Android SQLiteOpenHelper - onUpgrade()如何工作?

时间:2014-07-29 18:37:45

标签: android sqlite upgrade database-migration

显然这个问题之前已被问过,但是尽管看了几个回答,我仍然有点不确定。 onUpgrade()方法的docs也没有真正帮助。

onUpgrade()是否针对每个版本增量运行(即,从db_v1到db_v3 onUpgrade()运行一次为1> 2,然后再运行为2> 3),或者它只运行一次(即,从db_v1到db_v3 onUpgrade()运行一次为1> 3);

我的假设是它只被调用一次。在这种情况下,这样的工作会好吗?

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    switch (oldVersion) {
    case 0:
        migrateDatabaseToVersion_1(db);
        migrateDatabaseToVersion_2(db);
        migrateDatabaseToVersion_3(db);
        break;
    case 1:
        migrateDatabaseToVersion_2(db);
        migrateDatabaseToVersion_3(db);
        break;
    case 2:
        migrateDatabaseToVersion_3(db);
        break;
    default:
        Log.d(LOG, "no database migrations necessary");
        break;
    }
}

我看到了一个响应here,它提出了类似的建议,但是使用if语句而不是switch。任何帮助深表感谢。提前谢谢。

1 个答案:

答案 0 :(得分:0)

documentation没有明确说明这一点,但如果为每个增量调用它,那么将旧版本号和新版本号都作为参数是没有意义的。

注意:最好使用一系列if语句而不是switch:只要旧版本小于第n步的版本,就升级该步骤。 这不仅可以避免重复,还可以防止您忘记break ...