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

时间:2018-08-08 20:08:12

标签: android sqlite

我刚完成我的第一个Android应用程序。当前,数据库助手包含此方法:

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

经过一番谷歌搜索后,我得到了关于该方法应使用的确切内容的矛盾信息。当我更新应用程序时,我不想更改数据库,并且我认为此方法当前会擦除用户数据吗?运行不更改任何数据库更新的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用:-

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

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

两者都可以使用。

P.S。您当前拥有的onUpgrade方法不会删除数据库,而是会删除(删除)数据库中的表。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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
   }
}