Java实现安卓数据库升级
安卓有自带的数据库sqlite可以存储数据。Sqlite数据库有一个问题是修改了Model对象代码后,对应的sqlite数据库表结构不会跟着改变,必须编写sql命令手动去更新。greenDAO是面向Android的ORM开源框架,使用它可以很方便的操作sqlite数据库。本文将介绍使用greenDao如何升级sqlite数据库,包括“创建sqlite数据库和数据库表”、“设置sqlite数据库版本,升级数据库”。
1、创建sqlite数据库和数据库表。
在使用Gradle构建好项目之后,greenDao会帮我们自动创建好数据库和对应表。
使用@Entity注解,标注我们需要创建数据库表的Model类:
@Entity(nameInDb = "commodity")
public class Commodity extends BaseModel
使用@Id、@Property、@NotNull等注解标注属性,创建数据库表的列:
@Transient
protected int commodityQuantity;//商品数量,因为数据表暂时没有这个字段,所以先不作为数据表字段
@Id(autoincrement = true)
@Property(nameInDb = "F_ID")
protected Long ID;
@NotNull
@Property(nameInDb = "F_Status")
protected int status;
使用@Transient注解标注属性,告诉greenDao这是临时数据,不需要创建数据库表的列:
@Transient
protected int number;//列表中的序号
编译完成后,greenDao会自动生成CommodityDao类:

同时也生成DaoSession和DaoMaster类,来管理数据库:


2、设置sqlite数据库版本,升级数据库。
打开build.gradle(app)可以查看当前sqlite数据库版本:
greendao {
schemaVersion 2
daoPackage 'com.bx.erp.model'
targetGenDir 'src/main/java'
// generateTests
// targetGenDirTest 'src/androidTest/java'
}
如果要升级数据库,做一些修改表结构的操作,我们可以新建一个类,继承DaoMaster.DevOpenHelper,这个类是greenDao生成的:
public class MyOpenHelper extends DaoMaster.DevOpenHelper
MyOpenHelper继承了DevOpenHelper,然后重写onUpgrade方法, 进行数据库升级操作:
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
if (oldVersion < newVersion) {
switch (newVersion) {
case 2:
String sql = "alter table Staff add F_roleID INTEGER";
db.execSQL(sql);
break;
default:
break;
}
}
//db.execSQL后等于是oldVersion升一级
oldVersion++;
//升级后还是比最新版低级的话,继续升级
if (oldVersion < newVersion) {
//递归
onUpgrade(db, oldVersion, newVersion);
}
}
onUpgrade方法有两个int类型的参数,oldVersion代表当前的数据库版本,newVersion代表我们在build.gradle(app)修改后的版本。在程序启动时,如果oldVersion < newVersion ,会进入onUpgrade方法,这样我们就可以编写操作数据库的sql语句了。如示例中的给Staff表增加一个F_roleID字段。注意sqlite不支持对数据库表删除字段的操作,只能删除这个表,新建一个新的表,把数据存放到新的表来。

浙公网安备 33010602011771号