最近項目中用到了GreenDao,碰到了版本升級的問題。自己寫數(shù)據(jù)庫的時候都是自定義的helper,用GreenDao我們會發(fā)現(xiàn)在自動生成的DaoMaster中有一個內(nèi)部類DevOpenHelper,GreenDao的版本升級就是在這里的onUpgrade()方法中進行的。
如果需要進行版本升級,第一步修改DaoMaster中的SCHEMA_VERSION字段,這個字段代表的事數(shù)據(jù)庫的版本號。
一般版本升級都是往表中添加個字段,這時我們需要注釋掉onUpgrade()中的 ? ? ? ?dropAllTables(db, true)方法和 onCreate(db)方法,然后對version進行對比是否進行版本升級,測試代碼如下:
if (oldVersion!=newVersion) {
db.execSQL("ALTER TABLE TEST ADD \"NAME\" TEXT");
}
那如果想往數(shù)據(jù)庫中添加一個新表該怎么操作呢,查看DaoMaster代碼會發(fā)現(xiàn)有一個
createAllTables(SQLiteDatabase db, boolean ifNotExists)方法,標的創(chuàng)建都是在這個方法中進行的。比如我的完整方法代碼如下:
/**
* 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);
}
如果我想網(wǎng)數(shù)據(jù)庫中添加一個test表,則在onUpgrade中執(zhí)行建表語句即可,完整代碼如下:
@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第二個參數(shù)傳true表示沒有表則創(chuàng)建。
以上就可以對GreenDao數(shù)據(jù)庫進行升級,同時也不用刪除之前的數(shù)據(jù),