Ich versuche, eine lokale Datenbank auf einem Android-Telefon mit sqlite
zu erstellen.
Ich habe eine Helfer-Klasse (siehe unten), mit der die Datenbank erstellt und die "Hilfe" bereitgestellt wird.
Ich möchte ein Objekt dieser Klasse im Hauptteil meines Codes erstellen und dort auch die Datenbank und die Tabellen erstellen.
Das Problem:
Wenn ich ein Objekt der Klasse erstelle, scheint es nicht, dass die onCreate
-Methode im Helfer aufgerufen wird. Ich dachte, das soll passieren. Ich dachte, dass onCreate
im Grunde ein Konstruktor für die Klasse ist. (Ich glaube ich irre mich)
onCreate
-Methode auf? 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());
}
}
Die Variable onCreate
ist kein Konstruktor für die Datenbankklasse. Sie wird nur aufgerufen, wenn Sie versuchen, eine Datenbank zu öffnen, die nicht vorhanden ist .. Um eine Datenbank zu öffnen oder zu erstellen, müssen Sie einer dieser Methoden einen Aufruf hinzufügen:
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());
// open to read and write
dBHelper.getWritableDatabase();
// or to read only
// dBHelper.getReadableDatabase();
}
}
Es ist ein bisschen groß, aber hier ist mein DatabaseAdapter, den Sie sich ansehen können: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.Java
Sie müssen getWritableDatabase()
oder getReadableDatabase()
aufrufen.
Die Methode oncreate () ist kein Konstruktor und wird auch beim ersten Erstellen der Datenbank aufgerufen. Sie müssen daher getWritableDatabase () oder getReadableDatabase () zum Öffnen oder Erstellen für aufrufen Ihre Datenbank.
getReadableDatabase (): - Eine Datenbank erstellen und/oder öffnen.
getWritableDatabase (): - Erstellen und/oder öffnen Sie eine Datenbank mit dem Namen wird zum Lesen und Schreiben verwendet.