android - 将 sqlcipher 从 3.5.2 升级到 4.0.1 后,GreenDAO 无法访问现有数据库

标签 android greendao sqlcipher

我正在使用 GreenDAOSQLCipher。 将 SQLCipher 从 3.5.2 升级到 4.0.1 后,我的应用无法访问旧的加密数据库。 我已经搜索了一个解决方案,发现我需要在 SQLiteDatabaseHookpostKey 中运行 PRAGMA cipher_migrate 来迁移我的数据库。我这样试过,但没有任何改变。:

    SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {
        @Override
        public void preKey(SQLiteDatabase database) {

        }

        @Override
        public void postKey(SQLiteDatabase database) {
            database.execSQL("PRAGMA key = '" + key + "';");
            database.execSQL("PRAGMA cipher_migrate;");
        }
    };
    Database db = new EncryptedDatabase(SQLiteDatabase.openOrCreateDatabase("DB.db", key, null, hook));
    return new DaoMaster(db).newSession();

最佳答案

"DB.db" 需要路径时,您将其传递给 openOrCreateDatabase。你想做这样的事情:

    File dbPathFile = new File(path);
    if (!dbPathFile.exists()) {
      dbPathFile.getParentFile().mkdirs();
    }

然后在 openOrCreateDatabase

中传递 "DB.db" 的地方传递 path

关于android - 将 sqlcipher 从 3.5.2 升级到 4.0.1 后,GreenDAO 无法访问现有数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54785383/

相关文章:

java - "Invalid escape sequence (valid ones are\b\t\n\f\r\"\'\\)"语法错误

android - 我能知道用户何时/是否在 API 级别 26(Oreo) 中禁用了 "background activity"吗?

android - 方向传感器和加速度计传感器之间的区别

Android ListView - 项目准备好后如何执行代码?

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

android - 导入多个属性返回错误

android - Sqlcipher __ CREATE TABLE android_metadata 失败

android - 在使用开源数据库工具greenDao时出现SQLiteException,望高手给予

android - 在 Android Studio 项目中集成 SQLCIPHER

sqlite - 在MonoTouch中将SQLcipher与sqlite-net一起使用