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