Tag: 数据库 恢复

Android备份/还原:如何备份内部数据库?

我已经使用提供的FileBackupHelper实现了一个BackupAgentHelper来备份和恢复我拥有的本地数据库。 这是您通常与ContentProviders一起使用的数据库,位于/data/data/yourpackage/databases/ 。 有人会认为这是常见的情况。 但是文档不清楚该怎么做: http : //developer.android.com/guide/topics/data/backup.html 。 这些典型的数据库没有专门的BackupHelper 。 因此,我使用了FileBackupHelper ,将其指向“ /databases/ ”中的.db文件,在我的ContentProviders引入了任何数据库操作(如db.insert )的锁,甚至尝试在onRestore()之前创build“ /databases/ ”目录onRestore()因为安装后它不存在。 过去,我在其他应用程序中成功实施了类似的SharedPreferences解决scheme。 但是,当我在emulator-2.2中testing新的实现时,我看到从日志执行到LocalTransport的备份,以及正在执行的恢复(并onRestore() )。 然而,数据库文件本身从来没有创build。 请注意,这完全是在安装之后,在应用程序第一次启动之前,在执行还原之后。 除此之外,我的testing策略是基于http://developer.android.com/guide/topics/data/backup.html#Testing 。 另外请注意,我不是在谈论一些我自己pipe理的sqlite数据库,也不是关于备份到SD卡,自己的服务器或其他地方。 我在文档中看到了一些关于build议使用自定义的BackupAgent数据库,但似乎并不相关: 但是,如果需要,可能需要直接扩展BackupAgent:*备份数据库中的数据。 如果您在用户重新安装应用程序时想要还原SQLite数据库,则需要构build自定义的BackupAgent,以在备份操作期间读取相应的数据,然后创build表并在还原操作期间插入数据。 请澄清一下。 如果我真的需要自己做到SQL级别,那么我担心以下主题: 打开数据库和事务。 我不知道如何从我的应用程序的工作stream程之外的单一类中closures它们。 如何通知用户正在进行备份和数据库被locking。 这可能需要很长时间,所以我可能需要显示进度条。 如何做同样的恢复。 据我所知,恢复可能发生在用户已经开始使用应用程序(并input数据到数据库)。 所以你不能假定只是恢复备份的数据(删除空的或旧的数据)。 你将不得不以某种方式join它,因为任何非平凡的数据库是不可能的,由于ID的。 如何在还原完成后刷新应用程序,而不会让用户卡在某些 – 现在无法访问的点上。 我可以确定数据库已经在备份或恢复中升级了吗? 否则预期的模式可能不匹配。