我在Android上维护一个长期存在的应用程序,我决定改变其背后的数据模型,将一些SQLite数据库合并为一个新的数据库。
问题是,如果我只是创建新数据库并停止使用旧数据库,那么每个应用程序用户仍然会在其本地存储中使用旧的SQLite文件。
有没有办法在应用的新版本上强制使用“清晰数据”? (我正在寻找“正确”的方式来做到这一点,我知道我可以检查新数据库是否存在并采取行动,但我认为可能有更好的方法)
由于
答案 0 :(得分:2)
每当需要升级数据库时(例如,当用户下载新版本的应用程序时),数据库版本号的更改会调用onUpgrade()方法,您可以覆盖SQLiteOpenHelper类提供的thiis方法:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("TaskDBAdapter", "Upgrading from version "+oldVersion
+" to "+newVersion
+", which will destroy all old data");
for (String string : table_names)
db.execSQL("drop table if exists "+ string);
onCreate(db);
}
答案 1 :(得分:1)
是的,您可以为BroadcastReceiver
操作定义MY_PACKAGE_REPLACED
。在此接收者的onReceive
方法中,您可以删除数据库。 (API12 +)
<receiver
android:name=".OnUpgradeReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
和BroadcastReceiver
public class OnUpgradeReceiver extends BroadcastReceiver {
public OnUpgradeReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
context.deleteDatabase("YOUR_DATABASE_NAME");
}
}
请注意,这只会在更新(增加Gradle文件中的版本代码)
时触发