我已经实施了BackupAgentHelper
使用提供的FileBackupHelper
来备份和恢复我拥有的本地数据库。这是您通常与ContentProviders
一起使用的数据库,它位于/data/data/yourpackage/databases/
。Android备份/恢复:如何备份内部数据库?
有人会认为这是一种常见的情况。但是文档不知道该怎么做:http://developer.android.com/guide/topics/data/backup.html。 这些典型的数据库没有专门的BackupHelper
。因此,我用了FileBackupHelper
,就指着我的.db文件中的“/databases/
”,在我ContentProviders
介绍各地的任何数据库操作(如db.insert
)锁,onRestore()
之前甚至试图打造“/databases/
”目录,因为它不存在安装后。
我已经实现了SharedPreferences
类似的解决方案成功地在过去不同的应用程序。然而,当我在仿真器2.2中测试新的实现时,我看到从日志执行到LocalTransport
的备份以及执行恢复(并调用onRestore()
)。 然而,数据库文件本身从未被创建。
请注意,这是已被执行后,还原安装所有后,并首家推出应用程序之前,。除此之外,我的测试策略是基于http://developer.android.com/guide/topics/data/backup.html#Testing。
另外请注意,我不是在谈论一些SQLite数据库我管理自己,也不是有关备份到SD卡,自己的服务器或其他地方。
我没有看到的文档有关数据库的建议使用自定义BackupAgent
一提,但它似乎并不相关:
但是,您可能要直接,如果你需要延长 BackupAgent: *备份数据库中的数据。如果您有 要恢复当用户 重新安装应用程序的SQLite数据库,你需要 构建一个自定义BackupAgent是 一个 备份操作过程中读取相应的数据,然后创建 表并插入数据在 恢复操作。
请澄清一下。
如果我真的需要做的是自己到SQL的水平,那么我担心了以下主题:
打开数据库和交易。我不知道如何从我的应用工作流程之外的单一类中关闭它们。
如何通知备份正在进行中,该数据库被锁定的用户。这可能需要很长时间,所以我可能需要显示进度条。
如何做还原相同。据我所知,恢复可能发生在用户已经开始使用应用程序(并将数据输入到数据库)时。因此,您不能假定仅恢复备份的数据(删除空白或旧数据)。你必须以某种方式加入它,对于任何非平凡的数据库来说,由于id的缘故,这是不可能的。
如何在还原完成后刷新应用程序,而不会让用户卡在某些 - 现在无法访问的点。
我可以确定数据库已经在备份或恢复时升级了吗?否则,预期的模式可能不匹配。
我有同样的问题... – whynot 2011-05-31 11:47:03
有没有办法简单备份洞db? – Jin35 2011-12-29 06:01:09
我需要使用FileBackupHelper备份一个文件夹。将使用保存数据库的方法,让我保存该文件夹下有很多子文件夹和子文件? – coolcool1994 2014-12-17 12:18:37