【发布时间】:2015-10-22 03:29:37
【问题描述】:
我使用 SQLite OpenHelper 来处理数据库版本并且工作正常,我的问题是,如果我设置了一些更新并且新用户安装了我的应用程序,将不会获得升级,因为它将使用最后一个 DB_VERSION 运行 onCreate
解释:
private static final int DB_VERSION = 3;
Context context;
public DB(Context c) {
super(c, DB_NAME, null, DB_VERSION);
context = c;
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE table1...");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d("DBUpgrade", "Atualizando DATABASE");
switch (oldVersion) {
case 2: {
execSQLFromFile(db, "sql2");
}
case 3: {
execSQLFromFile(db, "sql3");
}
}
场景:
用户 1 自第一个应用发布后已安装 -> 他会得到所有的升级
用户 2 第一次在他的设备上安装了我的具有 db_version 3 的 apk 的最新版本 -> 他不会得到升级,只有 onCreate
ofc 我知道为什么会发生这种情况,但我不知道如何通过简单的方法来解决它,我唯一通过的方法是调用 onUpgrade(db, 0, DB_VERSION); 这在 onUpgrade 中输入但不要调用开关内的案例我不知道为什么,既然我发送0,它应该调用case:2,因为我没有休息不是吗?
但是这样做我为下一个版本松了 OnUpgrade,它总是会检查 oldVersion,并重做相同的代码,所以它会因为唯一列而崩溃,改变列任何东西
所以我仍然无法在第一次安装的情况下进行升级 =(
【问题讨论】: