我已经更新了应用程序的数据库。但是从市场上更新应用程序的用户每次启动应用程序时都会看到崩溃,因为新的数据库结构与旧数据库不兼容。要求他们卸载和安装应用程序不好,我需要在安装时只执行一次操作,即清除旧数据库并创建新数据库。这不应该在每次应用程序启动时调用,只能在安装时调用..或应用程序第一次启动时。
我想我已经清楚地定义了我的情况,现在我该去哪里?我应该让用户卸载和安装应用程序还是可以按照我的要求去做?
我已经更新了应用程序的数据库。但是从市场上更新应用程序的用户每次启动应用程序时都会看到崩溃,因为新的数据库结构与旧数据库不兼容。要求他们卸载和安装应用程序不好,我需要在安装时只执行一次操作,即清除旧数据库并创建新数据库。这不应该在每次应用程序启动时调用,只能在安装时调用..或应用程序第一次启动时。
我想我已经清楚地定义了我的情况,现在我该去哪里?我应该让用户卸载和安装应用程序还是可以按照我的要求去做?
只需更改数据库的版本并覆盖onUpgrade
您的DatabaseHelper
类。
private static final int DATABASE_VERSION = 2;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CREATION);
onCreate(db);
}
为什么不实现的 onUpgrade()方法SQLiteOpenHelper
?这个类提供了有用onCreate()
的onUpgrade()
方法。
请参见此处:是否调用过 onUpgrade 方法?
首先,清除旧数据库并创建一个新数据库确实是个坏主意(看到那里的数据丢失,用户会非常生气)。
您应该始终尝试使用新的列和内容来升级以前的数据。您应该始终尝试更改表的结构而不清除数据,而不是清除整个数据。
另一件事是您可以在 DBHelper 类的 onUpgrade() 方法中升级到新数据库。