首页 > 解决方案 > 使用相同的方法恢复 Room 数据库,但使用不同的 DAO

问题描述

有 5 个房间数据库,每个房间都有不同的实体和道。我使用下面的代码使用相同的方法进行备份和恢复。除了在“restoreSQL”方法之后引发以下错误之外,所有这些都可以正常工作:

E/SQLiteLog: (26) 文件被加密或者不是数据库

请帮忙。

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:我发现了那个特定房间数据库的问题。我在 BACKUP 之前关闭了那个关节数据库,所以跳过了 -SHM 和 -WAL 参考。

标签: javaandroid-room

解决方案


(已解决)我发现了那个特定房间数据库的问题。我没有在 BACKUP 之前关闭数据库,跳过了 ref。文件 -SHM 和 -WAL 参考。这就是为什么我在 RESTORE 期间获得“E/SQLiteLog:(26)文件已加密或不是数据库”。


推荐阅读