我使用 GreenDao 3.2.2 作为我的数据库,
在我第一次通过@tags创建实体时,一切正常。
现在我正在将gradle架构编辑为更高版本,因为我在表中添加了一些道具:
greendao {
schemaVersion 4
}
但是从不调用OpenHelper onUpgrade
方法,因此我的项目总是崩溃,因为找不到某些列。
申请类
//Init DB
UpgradeHelper helper = new UpgradeHelper(this, ENCRYPTED ? "db-encrypted" : "db", null);
Database db = ENCRYPTED ? helper.getEncryptedWritableDb("app-cipher") : helper.getWritableDb();
daoSession = new DaoMaster(db).newSession();
OpenHelper类
public class UpgradeHelper extends DaoMaster.OpenHelper {
public UpgradeHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//never gets called
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion);
//do migrations
}
}
我错过了什么吗?
答案 0 :(得分:2)
得到了!!!经过几个小时的搜索和阅读GreenDAO代码,我理解了这个问题。
问题在于getEncryptedWritableDb
创建了另一种不扩展SQLiteDatabase
的数据库。因此,即使EncryptedHelper
获取onUpgrade
方法,我的帮助程序类也没有捕获它,因为它落入了另一个签名。
解决方案只是使用另一个接收DAO Database
接口的签名:
public void onUpgrade(Database db, int oldVersion, int newVersion) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by migrating all tables data");
//do migration
}
当然我需要更新所有迁移方法以接收Database
对象而不是StandardDatabase