我正在我的Activity中创建一个新数据库,如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate called");
super.onCreate(savedInstanceState);
Log.d(TAG, "create DatabaseOpenHelper");
DatabaseOpenHandler helper = new DatabaseOpenHandler(this);
Log.d(TAG, "get readable database access");
database = helper.getReadableDatabase();
Log.d(TAG, "create Cursor for database access");
Cursor data = database.query(DatabaseConstants.TABLE_NOTES, fields,
null, null, null, null, null);
Log.d(TAG, "create SimpleCursorAdapter for ListView");
dataSource = new SimpleCursorAdapter(this,
R.layout.conference_note_item, data, fields,
new int[] { R.id.note_text });
Log.d(TAG, "set ListAdapter");
setListAdapter(dataSource);
}
但我的DatabaseOpenHandler没有调用onCreate方法。
public DatabaseOpenHandler(Context context) {
super(context, DatabaseConstants.DATABASE_NAME, null,
DatabaseConstants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate called");
db.execSQL(DatabaseConstants.CREATE_TABLE_NOTES);
}
我的SQL查询:
public static final String CREATE_TABLE_NOTES = "CREATE TABLE "
+ TABLE_NOTES + " (" + NOTE_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + NOTE_CONFERENCE
+ " INTEGER, " + NOTE_DATE + " INTEGER, " + NOTE_TEXT
+ " INTEGER);";
答案 0 :(得分:2)
当数据库不存在时,SQLiteOpenHelper.onCreate()
生命周期方法仅 被调用。当没有数据库存在时,它会第一次执行。假设您的代码中没有错误,请更改dbadapter中的数据库名称,它将被执行。
答案 1 :(得分:0)
Oncreate 仅被称为,如果数据库不存在 ...并且应该创建新数据库..并且如果已经创建了数据库oncreate则不会被调用..
答案 2 :(得分:0)
如果更新DATABASE_VERSION
,则会调用onUpgrade(...)
实现的SQLiteOpenHelper
方法,然后您可以使用此方法删除现有表并重新创建它们(可能通过调用{明确地{1}}。
每当我在开发过程中对数据库进行更改时,这就是我所做的。
注意:当您的应用部署完成后,您可能希望做一些不错的迁移逻辑,以免丢失所有用户数据。
一些示例代码:
onCreate(...)