我在 Google Play 商店中有一个应用程序,我正在开发它的新版本。 SQLite 数据库方案(新表)+ 新的 ContentProviders 将会发生变化。
我考虑如何正确解决数据库结构的升级,以便用户在升级我的应用程序时不会丢失其当前内容,并且还会创建新表。
我应该改变: * private static final int DATABASE_VERSION = 1; 到: private static final int DATABASE_VERSION = 2; *
并且以某种方式在 onUpgrade() 方法中放置代码,如果检测到 oldVersion 为 1 且 newVersion 为 2。将创建新表。
现在我有一些愚蠢的代码,如果 onUpgrade 被调用,数据库就会被破坏并重新创建......但我认为这个方法从未被调用过,因为 DATABASE_VERSION 没有被改变。我只是在测试时卸载并重新安装应用程序。
最佳做法是什么?
private static final int DATABASE_VERSION = 1;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
enter code here
}
最佳答案
目前我使用的是:
private static final int DATABASE_VERSION = 3;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion < 2)
//changes added in DBv2
}
if(oldVersion < 3)
//changes added in DBv3
}
//so on...
}
这样可以确保以正确的顺序对数据库进行一个接一个的更改
关于Android SQLiteOpenHelper.onUpgrade 如何处理数据库架构升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348495/