longhushi 2014-08-20
Android中SQLite版本升级
网上有很多文章,但是感觉写的都不是很明白
前提:
定义DbOpenHelper类继承SQLiteOpenHelper
重写onCreate和onUpgrade方法
onDowngrade是降级的方法,应该不会用到
定义两个属性
//数据库名称,如果是null就会创建一个在内存中的数据库,当然内存被清理数据也就消失了
privatestaticfinalStringDATABASE_name="test.db";
//数据库版本,必须大于1,不然抛异常
privatestaticfinalintDATABASE_VERSION=1;
最重要的方法是(网上都没有说):
publicDbOpenHelper(Contextcontext){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
一,有了前提就可以说说执行过程
1,在使用数据库的时候就会调用DbOpenHelper构造方法
2,猜测(懒,没有看源码)SQLite会根据DATABASE_NAME进行判断,如果不存在就创建,同时记录版本号。然后调用onCreate方法
3,如果DATABASE_NAME存在,就检查版本号,如果版本号一致就继续执行
4,如果版本号不一致就执行onUpgrade方法
二,onUpgrade方法(自己定义规则,版本号是连续)
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//1是初始化版本,所以不用考虑
//不能使用elseif,是为了解决跨版本的问题比如1直接升级到5需要执行2,3,4,5
//newVersion在这个方法没有用到,可以做个判断newVersion==DATABASE_VERSION
//如果不等就抛异常(SQLite内部出现错误了,这种应该不可能出现)
intcurrVersion=oldVersion;
if(currVersion==2){
//TODO执行相应的数据库变更代码
currVersion=3;
}
if(currVersion==3){
//TODO执行相应的数据库变更代码
currVersion=4;
}
if(currVersion==4){
//TODO执行相应的数据库变更代码
currVersion=5;
}
if(currVersion==5){
//TODO执行相应的数据库变更代码
}
}
三,如何保留原始数据,创建临时表,初始化值之类的都属于sql范畴,就不说了。