Android数据库是否会被完全删除并重新创建,然后更新应用程序?

时间:2010-08-28 21:21:16

标签: android

我有一个使用数据库的应用。在启动时我检查我的表是否丢失,如果是,我创建它们。效果很好。 我注意到,如果我“adb uninstall”,那么下次我运行我的应用时,表格会再次创建(这就是我需要的),但是什么时候通过市场进行更新? 我正在发布更新,我已经对表进行了重大更改。如果表格被完全擦除并重新创建,我会喜欢它,事实上我的应用程序需要这样做。如果有人更新并拥有旧表,则会有一个强制关闭。 有谁知道这种情况的细节?

我的表只用于查找,我没有存储用户数据所以我真的不关心丢失更新数据。 当然我知道一个选项是使用某种类型的“版本”表,并检查我是否需要手动删除和创建,但我想知道是否甚至需要。 感谢。

1 个答案:

答案 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成员作为数据库实现的一部分。

希望有所帮助,如果您有疑问,请给我留言。