3 回答
TA贡献1810条经验 获得超4个赞
1.关于onCreate()和onUpgrade()
onCreate(..)
每当应用程序刚刚安装时调用。 onUpgrade
每当升级和启动应用程序并且数据库版本不同时调用。
2.增加db版本
你需要一个像这样的构造函数:
MyOpenHelper(Context context) { super(context, "dbname", null, 2); // 2 is the database version}
重要提示:单独增加应用程序版本是不够的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
不必将数据库版本增加到平流层......
TA贡献1871条经验 获得超13个赞
您的代码看起来正确。我的建议是数据库已经认为它已经升级了。如果在增加版本号后执行项目,但在添加execSQL
调用之前,测试设备/模拟器上的数据库可能已经相信它在版本2中。
验证这一点的一种快速方法是将版本号更改为3 - 如果在此之后升级,您知道这只是因为您的设备认为它已经升级。
TA贡献1995条经验 获得超2个赞
您可以使用SQLiteOpenHelper的onUpgrade
方法。在onUpgrade方法中,您将oldVersion作为参数之一。
在onUpgrade
使用a switch
和每个case
s中使用版本号来跟踪当前版本的数据库。
这是最好的,你从遍历oldVersion
到newVersion
,增加version
在时间1,然后再升级一步数据库的一步。当数据库版本1的人在很长一段时间后将应用程序升级到使用数据库版本7的版本并且应用程序因某些不兼容的更改而开始崩溃时,这非常有用。
然后,数据库中的更新将逐步完成,涵盖所有可能的情况,即合并为每个新版本完成的数据库更改,从而防止应用程序崩溃。
例如:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch (oldVersion) { case 1: String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " + "name_of_column_to_be_added" + " INTEGER"; db.execSQL(sql); break; case 2: String sql = "SOME_QUERY"; db.execSQL(sql); break; }}
- 3 回答
- 0 关注
- 856 浏览
添加回答
举报