3

我在 android 的 SQLite 数据库中有问题。

在我的 SQLiteOpenHelper 类的 onCreate(SQLiteDatabase db) 方法中,我正在创建表。现在我在 playstore 上传了这个应用程序。现在我认为我需要在这些表中再添加一个列。

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

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

4

4 回答 4

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 方法,这使您不必不断将数据库版本增加到平流层......

于 2013-01-29T09:17:58.933 回答
2

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

Alter table

参考 http://www.sqlite.org/lang_altertable.html

于 2013-01-29T09:12:17.273 回答
0

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

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

于 2013-01-29T09:19:30.820 回答
0

onCreate(SQLiteDatabase db)仅在第一次创建数据库时调用。如果要处理对现有表的升级,则应使用onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。专门处理从 oldVersion 到 newVersion 的迁移路径

于 2013-01-29T09:16:47.487 回答