SQLite onUpgrade()

时间:2013-01-29 09:08:02

标签: android sqlite android-activity

我在android中的SQLite数据库中遇到了问题。

在我的SQLiteOpenHelper类的onCreate(SQLiteDatabase db)方法中,我正在创建表。现在我已将此应用程序上传到Playstore。现在我想我在这些表格中需要多一个颜色。

如果我在playstore中放置应用程序的更新(在onCreate()方法中使用新查询),下次将调用OnUpgrade()方法,因此不会再次创建表。

所以请告诉我在重新安装或更新应用程序时有没有办法删除SQLite数据库..或者在重新安装之前删除整个应用程序?

4 个答案:

答案 0 :(得分:13)

<强> 1。关于onCreate()和onUpdate()

只要新安装了应用程序,就会调用onCreate(..)。每当应用程序升级并启动且数据库版本不同时,都会调用onUpgrade。

你需要一个像:

这样的构造函数

<强> 2。增加db版本

MyOpenHelper(Context context) {
super(context, "dbname", null, 2);
}

重要提示:单独增加应用版本并不足以调用onUpgrade。

第3。不要忘记您的新用户!

不要忘记添加

database.execSQL(DATABASE_CREATE_color);

也可以使用onCreate()方法,否则新安装的应用程序将缺少该表。

<强> 4。如何处理多个数据库随时间的变化

如果你有连续的应用升级,其中有几个有数据库升级,你想确保检查oldVersion:

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   switch(oldVersion) {
   case 1:
       db.execSQL(DATABASE_CREATE_color);
       // we want both updates, so no break statement here...
   case 2:
       db.execSQL(DATABASE_CREATE_someothertable); 
   }
}

这样,当用户从版本1升级到版本3时,他们都会获得这两个更新。当用户从版本2升级到3时,他们只会获得版本3更新...毕竟,每次发布更新时,都不能指望100%的用户群升级。有时他们会跳过更新或12:)

希望这是有道理的。

<强> 5。在制定

时控制修订号

最后......打电话

adb uninstall <yourpackagename>

完全卸载该应用。再次安装时,您可以确保使用onCreate方法,这样您就不必将数据库版本增加到平流层......

答案 1 :(得分:2)

根据我的理解,您只需添加一列。
您可以尝试使用

Alter table

REF- http://www.sqlite.org/lang_altertable.html

答案 2 :(得分:0)

只有在第一次创建数据库时才会调用

onCreate(SQLiteDatabase db)。如果要处理现有表的升级,则应使用onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。具体处理从oldVersion到newVersion

的迁移路径

答案 3 :(得分:0)

这可能不是最好的解决方案,但我已经构建了我的代码,通过选择我要查找的列来比较表模式。

如果它们不存在,则会出现异常,然后我删除/重新创建表。下次应用程序运行时,列就在那里,因此选择正常。不确定它的理想,但它有效,