java - 使用相同的方法恢复 Room 数据库,但使用不同的 DAO

标签 java android-room

有 5 个房间数据库,每个房间都有不同的实体和 Dao。我使用以下代码使用相同的方法进行备份和恢复。所有这些都工作得很好,除了一个在“restoreSQL”方法之后抛出以下错误:

E/SQLiteLog: (26) file is encrypted or is not a database

请帮忙。

private void backupSQL(String sdb, File tDB){
    File sDB  = getDatabasePath(sdb);
    P.closeDB(sdb); 
    try {
        FileUtils.copyFile(sDB, tDB);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void restoreSQL(File tDB, String sdb){
    File sDB  = getDatabasePath(sdb);
    P.closeDB(sdb); 
    try {
        FileUtils.copyFile(tDB, sDB);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

更新:显然,我要问的第一个问题是 DAO 或其他数据库的身份之间有什么区别。答案是它们都是相同的,这让我发疯。

更新 2:我发现了该特定房间数据库的问题所在。我在备份之前关闭了该特定数据库,因此跳过了 -SHM 和 -WAL 引用。

最佳答案

(已解决)我发现了该特定房间数据库的问题所在。我没有在备份之前关闭数据库,跳过引用。文件 -SHM 和 -WAL 引用。这就是为什么我在恢复期间获得“E/SQLiteLog:(26) 文件已加密或不是数据库”。

关于java - 使用相同的方法恢复 Room 数据库,但使用不同的 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55316809/

相关文章:

java - 使用Java的广播监听器?

java - 房间数据库观察者

android - 错误 : Cannot find setter for field. - java.util.ArrayList 中的大小 - Room 中的嵌入式 ArrayList 无法编译

kotlin - 在 session 室数据库中使用 'like'搜索加密的文本

Java - 通过浏览器/URL 连接到 ServerSocket

java - 游戏设计: organizing object arraylists

java - SetText 方法找不到 JTextField 的变量名称

java - Intellij 使用 JAR 库导出 WAR 文件

android-studio - 如何在房间数据库上创建同一实体的多个表?

Android - 多数据库一个项目