Android中SQLite版本升级

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范畴,就不说了。

相关推荐