GreenDao-Android-OnUpgrade未被调用(加密数据库)
我正在使用绿道3.2.2作为我的数据库 在我第一次通过@tags创建实体时,一切正常 现在,我正在编辑更高版本的gradle模式,因为我在表中添加了一些道具:GreenDao-Android-OnUpgrade未被调用(加密数据库),android,android-sqlite,upgrade,database-migration,greendao,Android,Android Sqlite,Upgrade,Database Migration,Greendao,我正在使用绿道3.2.2作为我的数据库 在我第一次通过@tags创建实体时,一切正常 现在,我正在编辑更高版本的gradle模式,因为我在表中添加了一些道具: greendao { schemaVersion 4 } 然而,OpenHelperonUpgrade方法从未被调用,因此我的项目总是因为找不到某些列而崩溃 应用程序类 //Init DB UpgradeHelper helper = new UpgradeHelper(this, ENCRYPTED ? "db
greendao {
schemaVersion 4
}
然而,OpenHelperonUpgrade
方法从未被调用,因此我的项目总是因为找不到某些列而崩溃
应用程序类
//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();
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
}
}
OpenHelper类
//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();
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
}
}
我错过什么了吗?明白了!!!经过几个小时的搜索和阅读,我明白了这个问题 问题是
getEncryptedWritableDb
创建了另一种不扩展SQLiteDatabase
的DB。因此,即使EncryptedHelper
获得onUpgrade
方法,我的helper类也没有捕获它,因为它落入了另一个签名中
解决方案只是使用接收DAO数据库的另一个签名
接口:
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
}
当然,我需要更新所有迁移方法以接收
数据库
对象,而不是标准数据库
您有权访问创建的数据库吗?你能用SQLiteStudio打开它吗?@MatPag是的我can@MatPagPRAGMA user_version命令给出了在gradle和DaoMaster中定义的正确的SCHEMA_版本:(,但是我的表没有更新到最新的schemeGood;)