我有一个使用数据库的应用。在启动时我检查我的表是否丢失,如果是,我创建它们。效果很好。 我注意到,如果我“adb uninstall”,那么下次我运行我的应用时,表格会再次创建(这就是我需要的),但是什么时候通过市场进行更新? 我正在发布更新,我已经对表进行了重大更改。如果表格被完全擦除并重新创建,我会喜欢它,事实上我的应用程序需要这样做。如果有人更新并拥有旧表,则会有一个强制关闭。 有谁知道这种情况的细节?
我的表只用于查找,我没有存储用户数据所以我真的不关心丢失更新数据。 当然我知道一个选项是使用某种类型的“版本”表,并检查我是否需要手动删除和创建,但我想知道是否甚至需要。 感谢。
答案 0 :(得分:4)
在更新时,表格保持不变。我将假设您已经实现了SQLiteOpenHelper
的子类来解释这一点。 Android能够处理版本更改的方式是在onUpgrade
类中使用SQLiteOpenHelper
。如果数据库版本早于应用程序所期望的版本,则从SQLiteOpenHelper
构造函数调用此方法。从onUpgrade
内部开始,您将放弃旧表并创建新表。
onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion){
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
//we can change this to perform different behaviors
db.execSQL("DROP TABLE IF EXISTS "+MYDB.TABLE_NAME);
onCreate(db);
}
重要的是要注意Android告诉您使用新数据库版本的方式。
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
使用了该字段DATABASE_VERSION
,因此您应该使用最终的静态int成员作为数据库实现的一部分。
希望有所帮助,如果您有疑问,请给我留言。