Android - 在SQLite数据库升级时

时间:2015-10-21 09:01:06

标签: android sqlite

我有一个有SQLite数据库的应用程序,它位于Play商店,最近我发布了一些更新,其中包括向数据库中的表添加列

我现在想做另一个版本,它再次将一个列添加到表中,但是我遇到的问题是我不知道是否所有人都下载了更新

如果每个人都没有升级,如果我删除对数据库的旧更改,他们将无法获取它们并且应用程序将崩溃

如果我留下更新并且已安装更新的人尝试更新,则会说该列已存在,然后不会执行实际需要的更新,应用程序将崩溃

我猜测最好的办法是在数据库中的每个修改版上进行try / catch,这样如果一个失败,它仍会转到下一个

但是我想知道是否有一种实际的'正确'方式来处理这个问题

谢谢

1 个答案:

答案 0 :(得分:2)

onUpgrade中,您拥有应用程序版本。在这里,您需要决定如何升级。

例如,3版本,v2有额外的列,v3也有额外的列

  • 从v1到v3:添加两列
  • 从v2到v3:仅添加v3所需的最新列

示例:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    int upgradeTo = oldVersion + 1;

    while (upgradeTo <= newVersion) {
        switch (upgradeTo) {
            case 1:
                // Add columns
                break;
            case 2:
                // Add more columns
                break;
        }

        upgradeTo++;
    }
}