【发布时间】:2016-02-05 15:04:26
【问题描述】:
简短形式的问题:从后续内容看来,我或许应该强调和简化我的问题的核心。核心是:Android 数据库的其他备份选项似乎存在恢复可能会覆盖数据库中当前数据的风险。是这样吗?有没有办法在没有这种风险的情况下进行备份/恢复?
.
长格式问题:查看了许多(相当多)有关在 Android 上备份 SQLite 数据库的问题后,我有一个问题找不到答案。
所有其他备份/恢复讨论都涉及将 db 文件保存到 SD(或 How to backup/restore SQLite database on Android to Dropbox 中的云),然后在需要时恢复它。我担心的是,恢复不会覆盖当前数据库吗?
我担心用户何时重新安装了他们使用了很短时间的应用(生成新数据),然后想要从应用的先前备份中导入数据。对于所有其他备份/恢复方法,恢复旧数据库文件似乎会覆盖当前数据库文件中的任何新数据。我想要的是一个备份选项,在恢复时,它会将备份中的数据添加到当前数据库中,以使其完整,而不会覆盖其中的任何其他内容。
其他方法会这样做吗?还是像我怀疑的那样,在这种情况下它们会覆盖?
如果他们确实覆盖了,那么我最好的备份选项可能是写出 csv 或 xml 文件或其他东西,我希望这些备份讨论是关于简单的方法来做到这一点。是否有任何流程可以加快该流程并使其变得容易,还是我必须手动完成所有这些操作?如果是这样,关于写入格式的建议以及为什么?
同样,有谁知道使用 BackupAgentHelper 的内置 Google 备份是否会出现同样的覆盖问题?
最后,如果我在任何时候最终都要进行数据迁移(类似于How to Restore SQLite Database from Backup after Core Data model has changed (lightweight migration)),我现在应该做什么(我仍处于数据库设计阶段)以使这种潜在的未来变化更容易看到- à-vis 这个备份过程?
【问题讨论】:
-
我想是合并,但从备份合并。写入 XML 或其他文件要复杂得多,因此如果 DB 文件的复制在还原时进行合并会很好;我只是不确定我相信它会。
-
合并不是恢复。合并来自备份没有区别。合并的细节取决于您的数据及其结构。
-
在这种情况下,merge 可能不是我想要的,而 restore 是首先正确的选择。
-
@J. Natael,一些问题和 cmets 以更好地理解问题。 1-由于您担心旧备份数据会覆盖新数据,因此您似乎希望将备份数据“添加”到新数据中(不对新数据进行任何修改)。 2-根据您的应用程序创建数据(记录)的方式,在将旧记录“添加”到当前数据库时,您可能需要注意新记录的主键值与旧记录之间的任何冲突。只是指出;在您的情况下,这可能不是问题。 3- 涉及多少张表?
标签: android sqlite data-migration android-backup-service backup-strategies