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

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

最佳答案

目前我使用的是:

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

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

关于Android SQLiteOpenHelper.onUpgrade 如何处理数据库架构升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348495/

相关文章:

android - 如何使用 Sqlite 将一个应用程序的数据库访问到另一个应用程序?

sqliteopenhelper - 在 Activity Context 或 Application Context 之间决定实例化 SQLiteOpenHelper

android - 未调用 SQLiteOpenHelper 构造函数

android - AndEngine在多个设备上加载TMX map

java - 如何将数据从Adapter内的onBindViewHolder传递到Tab

java - SQLiteOpenHelper 和 SQLiteAssetHelper 之间的区别?

java - Android SQLiteOpenHelper 偏移量

android - 如何在 Android 2.3.1 中更改 OverScroll 颜色?

android - infoWindow(谷歌地图)捕捉关闭窗口的事件

c# - 无法连接到 Android 上的 TCP 端口