Sto provando a creare un database locale su un telefono Android utilizzando sqlite
.SQLiteOpenHelper non riesce a chiamare suCreare?
Ho una classe di supporto, illustrata di seguito, che viene utilizzata per creare il database e fornire la "guida".
Sto cercando di creare un oggetto di questa classe nella parte principale del mio codice e crea anche il database e le tabelle.
Il problema:
Ogni volta che creo un oggetto della classe, non sembra essere di chiamare il metodo onCreate
nel aiutante. Pensavo che questo dovesse succedere. Pensavo che lo onCreate
fosse fondamentalmente un costruttore per la classe. (Credo di aver sbagliato)
- Quindi, perché non chiama il metodo
onCreate
? - O come faccio a creare il database e le tabelle in cui sto creando l'oggetto della classe?
- Quale sarebbe un modo migliore per farlo, se questo non è un buon approccio?
public class SmartDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "smart_lite_db.db";
private static final int DATABASE_VERSION = 2;
private static final String NOTIFY_TABLE_NAME = "user_notify_data";
private static final String HR_TABLE_NAME = "user_hr_data";
private static final String NOTIFY_TABLE_CREATE =
"CREATE TABLE " + NOTIFY_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"userresponse INTEGER, " +
"notifytime INTEGER);";
private static final String DATA_TABLE_CREATE =
"CREATE TABLE " + HR_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"hr INTEGER, " +
"act INTEGER, " +
"timestamp INTEGER);";
public SmartDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.v("smartdbhelper", "before creation");
db.execSQL(NOTIFY_TABLE_CREATE);
Log.v("smartdbhelper", "middle creation");
db.execSQL(DATA_TABLE_CREATE);
Log.v("smartdbhelper", "after creation");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
private SmartDBHelper dBHelper;
public void onCreate(Bundle savedInstanceState) {
//where i am wanting to create the database and tables
dBHelper = new SmartDBHelper(getContext());
}
}
Cool, grazie. Se voglio avere una classe, come la tua, che contiene tutte le mie cose di gestione di SQL. Come posso accedere all'oggetto di quella classe in tutte le mie altre classi? Ad esempio, creo l'oggetto nella mia classe principale. Ora voglio usare i metodi di inserimento in una classe che è stata creata nella mia classe principale. Come posso accedere all'oggetto db originale che è stato creato nella classe principale in un'altra classe? – prolink007
In realtà, devo solo creare un nuovo oggetto all'interno di ogni classe che necessita di databaseHelper? Credo che questo sia quello che dovrei fare, potrei chiedere a questo come una domanda se nessuno risponde. Grazie – prolink007
mi trovo ad affrontare un problema qui ..02-17 10: 12: 53.441: ERRORE/Database (311): close() non è mai stato chiamato esplicitamente sul database '/data/data/com.ey.eyconnect/databases/test. db '02-17 10: 12: 53.441: ERRORE/Database (311): android.database.sqlite.DatabaseObjectNotClosedException: L'applicazione non ha chiuso il cursore o l'oggetto del database che è stato aperto qui viene lanciata l'eccezione qui..come risolvere questo. .. – jennifer