我为Android应用程序创建了一个SQLite数据库。该数据库最初有几个表。
在特定的应用程序版本上,我添加了创建新表的代码(即db.execSQL(“如果不存在则创建表”+ table_name ...),但从未在SQLiteOpenHelper的构造函数中将数据库版本从1更改。
现在我要升级数据库。我的问题是:
现有的已修改数据库是否仍为版本1,或者在创建新表时是否自动增加数据库版本号(即使数据库未通过onUpgrade(...)方法升级)?
提前致谢。
答案 0 :(得分:1)
是数据库版本,而不是表格版本。因此,删除/重新创建表不会影响数据库版本。
答案 1 :(得分:1)
数据库版本是你在SQLiteOPenHelper中分配的,现在你有2个不同的结构化数据库,版本号相同,真的很糟糕,因为相同的版本号,永远不会调用onUpgrade。
答案 2 :(得分:1)
扩展SQLiteOpenHelper类时,可以定义要使用的数据库版本。例如,通过以下方式:
private static class DbWordsHelper extends SQLiteOpenHelper {
private DbWordsHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
如果升级数据库,则应在代码中手动更改DB_VERSION并重建应用程序。新版本必须高于上一版本。当SQLiteOpenHelper检测到您的版本号已被更改时,它调用onUpgrade方法,您应该在其中提供如何更新数据库的逻辑:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Here in the future should be method that change the schema of the
// database. Now we just delete
try {
db.execSQL(DROP_TABLE_WORDS);
} catch (SQLException e) {
Log.e(TAG, "Error while updating database" + TABLE_WORDS, e);
}
onCreate(db);
}
因此,即使您添加新表,在您在代码中手动执行此操作之前,版本也不会更改。