SQLite数据库升级

Jib*_*ibW 1 sqlite android

我对android SQLite数据库处理有点困惑.我经历了教程,但我没有得到确切的观点.

我们可以拥有一个扩展的数据库类SQLiteOpenHelper,并且可以覆盖onCreate()方法并创建数据库.

升级数据库部分有点令人困惑.在以下方法中,如何处理该版本 onUpdate(SQLiteDatabase db,int old Version,int newVerison)

这是否意味着当我们第一次创建数据库时版本为1.然后,一旦修改版本变为2.然后,如果我们想要再次修改旧版本= 2,newVerison = 3
[ onUpdate(SQLiteDatabase db,int old Version,int newVerison)]

当我们传递构造函数版本时,将执行此方法,如下面的代码所示(作为2)

public DatabaseHelper(Context context) {
  super(context, dbName, null,2);
}
Run Code Online (Sandbox Code Playgroud)

我需要知道当我们需要调用onUpgrade()方法时,我们是否应该始终将版本作为2传递,或者我们必须每次为前一版本增加一个版本.

Riv*_*Kid 9

每次架构更改时增加数据库版本.

你永远不需要onUpgrade直接打电话.当您通过将数据库版本与您的代码指定为当前版本的版本进行比较来打开数据库时,Android将在需要时调用它.

您只需要处理升级过程onUpgrade- 它可能会像这样:

int curVer = oldVersion;
while ( curVer < newVersion ) {
    curVer++;
    switch ( curVer ) {
        case 2: {
            // Upgrade from V1 to V2
            break;
        }
        case 3: {
            // Upgrade from V2 to V3
            break;
        }
        case 4: {
            // Upgrade from V3 to V4
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们说你的newVersion是4而oldVersion是1 - 第一次迭代将curVer增加到2并将运行V2到V3升级代码.第二次迭代将curVer增加到3并运行V2到V3升级代码,最后一次迭代将curVer增加到4并运行V3到V4升级代码.

这适用于oldVersion的所有小于newVersion的值.如果您的用户正在跳过应用程序的升级,则会依次升级到中间版本.