【问题标题】:SQLite need Upgrade on FirstRunSQLite 需要在 FirstRun 上升级
【发布时间】:2015-10-22 03:29:37
【问题描述】:

我使用 SQLite OpenHelper 来处理数据库版本并且工作正常,我的问题是,如果我设置了一些更新并且新用户安装了我的应用程序,将不会获得升级,因为它将使用最后一个 DB_VERSION 运行 onCreate

解释:

  private static final int DB_VERSION = 3;

Context context;

public DB(Context c) {

    super(c, DB_NAME, null, DB_VERSION);
    context = c;
}
    public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE table1...");
    }

   @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d("DBUpgrade", "Atualizando DATABASE");
        switch (oldVersion) {
            case 2: {

            execSQLFromFile(db, "sql2");
            }
  case 3: {

            execSQLFromFile(db, "sql3");
            }


        }

场景:

用户 1 自第一个应用发布后已安装 -> 他会得到所有的升级

用户 2 第一次在他的设备上安装了我的具有 db_version 3 的 apk 的最新版本 -> 他不会得到升级,只有 onCreate

ofc 我知道为什么会发生这种情况,但我不知道如何通过简单的方法来解决它,我唯一通过的方法是调用 onUpgrade(db, 0, DB_VERSION); 这在 onUpgrade 中输入但不要调用开关内的案例我不知道为什么,既然我发送0,它应该调用case:2,因为我没有休息不是吗?

但是这样做我为下一个版本松了 OnUpgrade,它总是会检查 oldVersion,并重做相同的代码,所以它会因为唯一列而崩溃,改变列任何东西

所以我仍然无法在第一次安装的情况下进行升级 =(

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    用户 2 第一次在他的设备上安装了我的具有 db_version 3 的最新版本的 apk -> 他不会得到升级,只是 onCreate

    没有“升级”,因为没有要升级的数据库。必须实现onCreate() 才能创建具有正确(最新)架构的数据库。

    【讨论】:

    • 嗯,我知道了,onUpgrade 只是考虑已经拥有数据库并且不想丢失数据的用户,所以如果我在 onUpgrade 上更改某些内容,我也必须更改 onCreate 吗?跨度>
    • @SenhorObvio:“所以如果我在 onUpgrade 上更改某些内容,我也必须更改 onCreate?” - 是的。 onCreate() 始终创建最新的数据库结构。 onUpgrade() 将更改应用于旧数据库结构,以使其与最新的数据库结构相匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2019-07-29
    相关资源
    最近更新 更多