SQLite数据库升级

时间:2011-07-05 09:58:03

标签: android sqlite

我对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);
}

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

3 个答案:

答案 0 :(得分: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;
        }
    }
}

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

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

答案 1 :(得分:0)

我使用this approach使数据库架构演变更容易一些,您可能会发现它也很有用。

答案 2 :(得分:0)

完全由您决定如何维护数据库版本。您可以在更改表格结构后或在内容中进行任何修改后更改您的版本。维护版本控制没有硬性规定。这取决于项目的要求。