Android不执行create语句

时间:2012-04-02 12:45:02

标签: android sqlite

我正在我的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);";

3 个答案:

答案 0 :(得分:2)

当数据库不存在时,SQLiteOpenHelper.onCreate()生命周期方法仅 被调用。当没有数据库存在时,它会第一次执行。假设您的代码中没有错误,请更改dbadapter中的数据库名称,它将被执行。

答案 1 :(得分:0)

Oncreate 仅被称为,如果数据库不存在 ...并且应该创建新数据库..并且如果已经创建了数据库oncreate则不会被调用..

答案 2 :(得分:0)

如果更新DATABASE_VERSION,则会调用onUpgrade(...)实现的SQLiteOpenHelper方法,然后您可以使用此方法删除现有表并重新创建它们(可能通过调用{明确地{1}}。

每当我在开发过程中对数据库进行更改时,这就是我所做的。

注意:当您的应用部署完成后,您可能希望做一些不错的迁移逻辑,以免丢失所有用户数据。

一些示例代码:

onCreate(...)