我在onUpgrade()方法期间尝试更新SQLite数据库中表的架构。我通过删除表然后使用新架构重新创建它来做事。运行这两个操作后,有时旧模式仍然存在,因此我需要一种方法在创建新表之前强制删除旧表。有谁知道如何做到这一点?这是代码:
database.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARMS);
database.execSQL(buildAlarmTable());
OLD SCHEMA:
private String buildAlarmTable() {
return "CREATE TABLE IF NOT EXISTS " + TABLE_ALARMS +
"(" + KEY_ALARM_ID + " INTEGER PRIMARY KEY NOT NULL," +
KEY_ALARM_NAME + " TEXT," +
KEY_ALARM_TIME + " INTEGER" +
")";
}
新计划:
public String buildAlarmTable() {
return "CREATE TABLE IF NOT EXISTS " + TABLE_ALARMS +
"(" + KEY_ALARM_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_ALARM_NAME + " TEXT," +
KEY_ALARM_TIME + " INTEGER," +
KEY_ALARM_MALID + " INTEGER" +
")";
}
我知道旧架构仍然存在,因为我得到一个例外" KEY_ALARM_MALID"以后从数据库中读取时,列不存在。
答案 0 :(得分:0)
删除表并重新创建表onUpgrade()
不是更新表格架构的理想方式。另外,您将丢失所有数据行!假设旧版本为1且新版本为2,请使用ALTER TABLE
。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL("ALTER TABLE " + TABLE_ALARMS + " ADD COLUMN " + KEY_ALARM_MALID + " int default 0;");
}
}
当然,请为新数据库保留新版buildAlarmTable()
。
但是如果你必须放弃桌子,试试这个:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARMS);
onCreate(db);
}