代码之家  ›  专栏  ›  技术社区  ›  Roonil

不更新表时使用onUpgrade的正确方法?

  •  0
  • Roonil  · 技术社区  · 7 年前

    我刚刚制作完我的第一个android应用程序。当前数据库帮助程序包含此方法:

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+SUBJECTS_TABLE_NAME);
        onCreate(db);
    }
    

    经过一些谷歌搜索,我得到了矛盾的信息,我到底应该把这个方法。当我更新应用程序时,我不想更改数据库,而且我认为此方法当前将删除用户数据?运行不更改任何数据库的更新的最佳方式是什么?

    3 回复  |  直到 7 年前
        1
  •  2
  •   user8959091user8959091    7 年前

    将调用此方法 只有在更改数据库的版本时 不是你的应用。
    您可以根据需要对应用程序进行任意数量的升级/更新。只要数据库的版本保持不变,就没有什么好担心的。
    在DatabaseHelper(或您给出的任何名称)类的构造函数中有一个参数 int version . 当你实例化这个类时,你会传递你的数据库版本。
    如果将版本从1更改为2,则 onUpgrade() 将被调用。

        2
  •  2
  •   MikeT    7 年前

    您可以使用:-

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    }
    

    但是,也可以不更改数据库版本号(构造SQLiteOpenHelper子类即DatabaseHelper时的第4个参数)。

    两者都可以使用。

    P、 您当前拥有的onUpgrade方法不会删除数据库,它会删除数据库中的表。

        3
  •  1
  •   user3586826    7 年前
    private int DATA_BASE_VERSION=100;
    
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
       if(oldVersion<100){
          //your data base need an alter table or something new you added
       }
    }
    

    如果你想再换一次

    private int DATA_BASE_VERSION=101;
    
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
       if(oldVersion<100){
          //your data base need an alter table or something new you added
       }
       if(oldVersion<101){
          //your data base need an alter table or something new you added
       }
    }
    
    推荐文章