android - SQLite 数据库升级

标签 android sqlite

我对 android SQLite 数据库处理有点困惑。我浏览了教程,但没有得到确切的要点。

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

升级数据库部分有点困惑。在下面的方法中,如何处理版本 onUpdate(SQLiteDatabase db,int 旧版本,int newVerison)

是不是说我们第一次创建数据库的时候版本是1,然后修改之后版本就变成2了。 那么如果我们要再次修改 旧版本 = 2,新版本 = 3
[onUpdate(SQLiteDatabase db,int old Version,int newVerison) ]

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

public DatabaseHelper(Context context) {
  super(context, dbName, null,2);
}

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

最佳答案

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

您永远不需要直接调用 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 的升级代码。

这适用于小于新版本的所有旧版本值。如果您的用户跳过应用程序的升级,将依次升级到中间版本。

关于android - SQLite 数据库升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580849/

相关文章:

Android:有没有办法模拟方向键事件(API 10)?

java - MPAndroidChart,如何将图表上的值从 float 格式化为整数,接口(interface)已弃用

java - GET 方法调用两次,代码为 301 和 200

android - Google Play 商店中的更改开发者名称不会更新

MySQL - SQLite 如何改进这个非常简单的查询?

python - Django/Sqlite3 为带有外键的模型添加一行

android - 如何在 x 轴的左侧放置空间并显示条形图?

sqlite - 连接不在组中的元素

sqlite - 在sqlite中用字符串dd-mm-yyyy格式比较日期

python - 使用 django 模型将 pandas df 传输到 db.sqlite3