Android SQLiteOpenHelper.onUpgrade如何处理数据库架构升级

时间:2015-03-30 14:12:35

标签: android sqliteopenhelper

我在Google Play商店中有一个应用,我正在研究它的新版本。 SQLite数据库方案(新表)+新的ContentProviders将会发生变化。

我考虑如何正确解决数据库结构的升级问题,以便用户在升级我的应用程序时不会丢失其当前内容,并且还会创建新表。

我应该改变: * private static final int DATABASE_VERSION = 1; 至: private static final int DATABASE_VERSION = 2; *

并以某种方式在onUpgrade()方法中放置代码,如果检测到oldVersion为1且newVersion为2.将创建新表。

现在我有一些愚蠢的代码,如果已经调用了onUpgrade,数据库已被销毁并重新创建......但我认为这个方法从未被调用,因为DATABASE_VERSION没有被更改。我只是在测试时卸载并重新安装应用程序。

最佳做法是什么?

private static final int DATABASE_VERSION = 1;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
enter code here
} 

1 个答案:

答案 0 :(得分:3)

目前我使用以下内容:

private static final int DATABASE_VERSION = 3;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(oldVersion < 2)
         //changes added in DBv2
    } 
    if(oldVersion < 3)
         //changes added in DBv3
    } 
   //so on...
}

这样可以确保以正确的顺序一个接一个地对数据库进行更改