【问题标题】:Android SQLiteOpenHelper - how does onUpgrade() work?Android SQLiteOpenHelper - onUpgrade() 如何工作?
【发布时间】:2014-09-21 06:10:26
【问题描述】:

很明显,这个问题之前已经被问过,但是尽管看了几个回答,我还是有点不确定。 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。任何帮助深表感谢。提前谢谢你。

【问题讨论】:

    标签: android sqlite upgrade database-migration


    【解决方案1】:

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

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

    【讨论】:

    • 您能否详细说明使用 if 语句如何避免重复?我正试图弄清楚那会是什么样子,但我不能这样做。
    猜你喜欢
    • 2011-03-31
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2016-09-17
    相关资源
    最近更新 更多