您的位置:首页 > 移动开发 > Android开发

android 数据库升级

2015-09-19 13:13 519 查看
情况:

在android应用程序升级时,如果数据库表结构发生了变化(修改字段,添加新表),就需要同时对数据库进行升级。

程序如何知道数据库需要升级?

数据库实现方法中有必须继承两个方法:onCreate和onUpgrade,他们的调用过程如下:

1. 如果数据库*文件不存在*,SQLiteOpenHelper在自动创建数据库后只会调用onCreate方法,
在该方法中一般需要创建数据库中的表、视图等组件。在创建之前,数据库是空的,因此,
不需要先删除数据库中相关的组件。

2. 如果数据库文件存在,并且当前的版本号高于上次创建或升级时的版本号,
3SQLiteOpenHelper会调用onUpgrade方法,调用该方法后,会更新数据库版本号。
在onUpgrade方法中除了创建表、视图等组件外,还需要首先删除这些相关的组件,
因此,在调用onUpgrade方法之前,数据库是存在的,里面还有很多数据库组件。

3. 综合上述两点,可以得出一个结论。如果数据库文件不存在,只有onCreate方法
被调用(该方法只会在创建数据库时被调用1次)。如果数据库文件存在,并且当前
版本较高,会调用onUpgrade方法来升级数据库,并更新版本号。

4.版本降级情况在这里不进行讨论


升级数据库,需要考虑新老版本问题。

4.1 比如用户是正常升级

按照正常升级流程进行处理(升级语句写在 OnUpgrade() 中并增加version +1 )

4.2 比如不是升级而是安装最新版

这样的话是不会走 OnUpgrade()方法的!那么就需要 **数据库中在发布应用同时,
包含最新,最全的表**。这样,就可以解决升级问题


升级逻辑

#进行修改或者删除操作 (对于一些细节,请自行查阅相关文档)

private String CREATE_ALARM = "create table xxx(id INTEGER )";
private String CREATE_Table_HealthLog = "create table xxx(id INTEGER )";

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (newVersion) {
case 2:
db.execSQL(CREATE_ALARM);
db.execSQL(CREATE_Table_HealthLog);
break;
default:
break;
}
}


[相关链接] http://blog.csdn.net/u012974916/article/details/24582825
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: