使用相同的方法,但使用不同的DAO还原Room数据库

时间:2019-03-23 18:03:34

标签: java android-room

拥有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参考。

1 个答案:

答案 0 :(得分:1)

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