最近项目中用到了GreenDao,碰到了版本升级的问题。自己写数据库的时候都是自定义的helper,用GreenDao我们会发现在自动生成的DaoMaster中有一个内部类DevOpenHelper,GreenDao的版本升级就是在这里的onUpgrade()方法中进行的。
如果需要进行版本升级,第一步修改DaoMaster中的SCHEMA_VERSION字段,这个字段代表的事数据库的版本号。
一般版本升级都是往表中添加个字段,这时我们需要注释掉onUpgrade()中的 dropAllTables(db, true)方法和 onCreate(db)方法,然后对version进行对比是否进行版本升级,测试代码如下:
if (oldVersion!=newVersion) {
db.execSQL("ALTER TABLE TEST ADD \"NAME\" TEXT");
}
那如果想往数据库中添加一个新表该怎么操作呢,查看DaoMaster代码会发现有一个
createAllTables(SQLiteDatabase db, boolean ifNotExists)方法,标的创建都是在这个方法中进行的。比如我的完整方法代码如下:
/**
* Creates underlying database table using DAOs.
*/
public static voidcreateAllTables(SQLiteDatabase db, boolean ifNotExists) {
UserInfoDao.createTable(db,ifNotExists);
DiscountInfoDao.createTable(db,ifNotExists);
PoiAddEntityDao.createTable(db,ifNotExists);
TestDao.createTable(db,ifNotExists);
}
如果我想网数据库中添加一个test表,则在onUpgrade中执行建表语句即可,完整代码如下:
@Override
public voidonUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {
Log.i("greenDAO","Upgrading schema from version "+ oldVersion +" to "+ newVersion +" by dropping all tables");
// dropAllTables(db, true);
// onCreate(db);
if(newVersion != oldVersion) {
TestDao.createTable(db, true);
}
}
TestDao.createTable第二个参数传true表示没有表则创建。
以上就可以对GreenDao数据库进行升级,同时也不用删除之前的数据,