GreenDao-Android-OnUpgrade未被调用(加密数据库)

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

我正在使用绿道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();
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;)