Android中SQLite版本升级

Android中SQLite版本升级
网上有很多文章,但是感觉写的都不是很明白
前提:
定义DbOpenHelper类继承SQLiteOpenHelper
重写onCreate和onUpgrade方法
onDowngrade是降级的方法,应该不会用到
定义两个属性
// 数据库名称,如果是null就会创建一个在内存中的数据库,当然内存被清理数据也就消失了
private static final String DATABASE_NAME = "test.db";
// 数据库版本,必须大于1,不然抛异常
private static final int DATABASE_VERSION = 1;

最重要的方法是(网上都没有说):
public DbOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
一,有了前提就可以说说执行过程
1,在使用数据库的时候就会调用DbOpenHelper构造方法
2,猜测(懒,没有看源码)SQLite会根据DATABASE_NAME进行判断,如果不存在就创建,同时记录版本号。然后调用onCreate方法
3,如果DATABASE_NAME存在,就检查版本号,如果版本号一致就继续执行
4,如果版本号不一致就执行onUpgrade方法
二,onUpgrade方法(自己定义规则,版本号是连续)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 1是初始化版本,所以不用考虑
// 不能使用else if, 是为了解决跨版本的问题比如1直接升级到5需要执行2,3,4,5
// newVersion在这个方法没有用到,可以做个判断newVersion == DATABASE_VERSION
// 如果不等就抛异常(SQLite内部出现错误了,这种应该不可能出现)
int currVersion = oldVersion;
if (currVersion == 2) {
// TODO执行相应的数据库变更代码
currVersion = 3;
}
if (currVersion == 3) {
// TODO执行相应的数据库变更代码
currVersion = 4;
}
if (currVersion == 4) {
// TODO执行相应的数据库变更代码
currVersion = 5;
}
if (currVersion == 5) {
// TODO执行相应的数据库变更代码
}
}
三,如何保留原始数据,创建临时表,初始化值之类的都属于sql范畴,就不说了。


猜你喜欢

转载自yq81862.iteye.com/blog/2106516
今日推荐