SQLite需要在FirstRun

时间:2015-07-30 16:38:20

标签: android sqlite

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

说明:

  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 - &GT;他将获得所有升级

用户2第一次在他的设备中安装了我的apk的最后一个版本,其中包含db_version 3 - &GT;他不会得到升级,只有onCreate

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

但这样做我松开OnUpgrade用于下一个版本,它将始终检查oldVersion,并重做相同的代码,因此它会崩溃因为Unique列,改变列的任何内容

所以我仍然没有办法在第一次安装时结束升级=(

1 个答案:

答案 0 :(得分:0)

  

用户2第一次在他的设备中安装了我的apk的最后一个版本,其中包含db_version 3 - &gt;他不会得到升级,只有onCreate

没有&#34;升级&#34;,因为没有要升级的数据库。必须实现onCreate()才能使用正确的(最新)架构创建数据库。