为了账号安全,请及时绑定邮箱和手机立即绑定

Android备份/恢复:如何备份内部数据库?

Android备份/恢复:如何备份内部数据库?

拉莫斯之舞 2019-08-09 16:41:56
Android备份/恢复:如何备份内部数据库?我已经实现了BackupAgentHelper使用提供FileBackupHelper的备份和恢复我拥有的本机数据库。这是您通常与之一起使用ContentProviders并驻留在其中的数据库/data/data/yourpackage/databases/。人们会认为这是一个常见的情况。但是,文档不清楚该怎么做:http://developer.android.com/guide/topics/data/backup.html。这些典型的数据库并不BackupHelper专门。因此我使用了FileBackupHelper,将它指向我在。“文件中的.db文件,在我的/databases/任何数据库操作(例如db.insert)中引入了锁ContentProviders,甚至尝试创建” /databases/“目录,onRestore()因为它在安装后不存在。我已经SharedPreferences在过去的不同应用程序中成功实现了类似的解决方案。但是,当我在模拟器2.2中测试我的新实现时,我看到正在LocalTransport从日志执行备份,以及正在执行(并onRestore()调用)恢复。然而,db文件本身永远不会被创建。请注意,这是在安装之后,以及在首次启动应用程序之后,在执行还原之后。除此之外,我的测试策略基于http://developer.android.com/guide/topics/data/backup.html#Testing。还请注意,我不是在谈论我自己管理的一些sqlite数据库,也不是要备份到SDcard,自己的服务器或其他地方。我确实在文档中提到有关建议使用自定义的数据库,BackupAgent但它似乎并不相关:但是,如果需要,可能需要直接扩展BackupAgent:*备份数据库中的数据。如果您在用户重新安装应用程序时有要还原的SQLite数据库,则需要构建一个自定义BackupAgent,在备份操作期间读取相应的数据,然后创建表并在还原操作期间插入数据。请清楚一点。如果我真的需要自己完成SQL级别,那么我担心以下主题:打开数据库和事务。我不知道如何在应用程序的工作流程之外从这样的单例类中关闭它们。如何通知用户正在进行备份并且数据库已锁定。这可能需要很长时间,所以我可能需要显示进度条。如何在恢复时执行相同操作。据我了解,恢复可能发生在用户已经开始使用应用程序(并将数据输入数据库)时。所以你不能假定只是恢复备份数据(删除空数据或旧数据)。你必须以某种方式加入它,由于id的原因,任何非平凡的数据库都是不可能的。如何在恢复完成后刷新应用程序,而不会让用户卡在某个 - 现在 - 无法访问的点。我可以确定数据库是否已在备份或还原时升级?否则,预期的架构可能不匹配。
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

在重新审视我的问题之后,在查看ConnectBot的工作方式后,我能够让它工作。谢谢肯尼和杰弗里!

它实际上就像添加一样简单:

FileBackupHelper hosts = new FileBackupHelper(this,
    "../databases/" + HostDatabase.DB_NAME);addHelper(HostDatabase.DB_NAME, hosts);

到你的BackupAgentHelper

我遗漏的一点是,你必须使用带有“ ../databases/” 的相对路径。

不过,这绝不是一个完美的解决方案。FileBackupHelper例如,提及的文档:“ FileBackupHelper应仅用于小配置文件,而不是大型二进制文件。 ”,后者就是SQLite数据库的情况。

我想得到更多的建议,对我们的期望有什么见解(什么是正确的解决方案),以及关于如何破坏的建议。


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 1071 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信