【问题标题】:Restoring Room database with same method, but with different DAO’s使用相同的方法恢复 Room 数据库,但使用不同的 DAO
【发布时间】:2019-03-23 18:03:33
【问题描述】:

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

【问题讨论】:

  • 与其更新问题,不如将其发布为下面的答案并接受。
  • abatishchev:谢谢。如何将其标记为已接受?
  • 我重申这个问题:我看到他们多次询问发布者,将答案标记为已接受。我在任何地方都没有看到表示接受的按钮,那么您如何将响应接受为已接受?
  • 我只是想了解它的工作原理并遵守规则并感谢版本。一当你在寻找解决方案时,有时你并没有意识到语法和概念上的错误。快乐的一天

标签: java android-room


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2011-09-10
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多