Sqlite DB Android备份/恢复

Arn*_* C. 3 sqlite backup android restore

我想知道在android上备份和恢复SQLite数据库的最佳实践.目前我通过备份数据库并使用文件输入/输出流将其复制到SD卡来解决问题.然后,如果我想恢复和旧备份,我使用反向过程.

这种方法似乎有效,但尚未破坏我的数据.我想知道这是最好的方法还是有更安全的方法呢?

谢谢

ssu*_*z28 17

只是一个关于备份数据库的FYI.我目前在我的应用程序中执行此操作的方式与您上面解释的相同.以这种方式创建备份时要小心.它在大多数情况下都很有用,但问题是所创建的备份不能保证与所有设备和Android版本兼容.我第一次听到这个声音时觉得这听起来很奇怪,但我现在发现这是真的.我最近收到了一些关于丢失数据,数据消失等的报告.当用户从其他设备或不同的Android版本或ROM恢复备份时,就会发生这种情况.他们中的一些人直接与我联系,这很棒,所以我能够从中获取备份文件以测试它们并检查它们.当我尝试恢复它们时,我会收到以下logcat错误:android.database.sqlite.sqlitedatabasecorruptexception:数据库磁盘映像格式错误

我发现的是,主要是,某些HTC设备和一些自定义ROM(在任何设备上)正在创建这些备份,这些备份无法恢复到其他设备或ROM.数据库并没有真正腐败,但Android认为它们是.我会将它们带入SQLite浏览器,也没有数据显示.事实证明,较新版本的SQLite默认启用了WAL(写入前端日志记录),如果它已启用并且使用该数据库进行备份,则无法将其还原到旧版本的SQLite,甚至有时也无法恢复到相同版本(对于一些奇怪的原因).因此,我使用"PRAGMA journal_mode = DELETE"禁用WAL,然后我能够在浏览器中查看数据库并能够在我的测试设备上恢复它.另一个问题是,似乎没有办法在代码中捕获此异常,Android会在遇到此异常时自动删除数据库(在我看来Android上的管理非常糟糕).

很抱歉很长的回复,但我想用这种备份来解释我所看到的情况.我正在尝试寻找另一种在SD卡上创建通用备份的方法.创建像@Kingamajick这样的csv文件和sql脚本可能是另一种方法.这是更多的代码和更多的工作,但如果它适用于任何设备,SQLite版本和ROM,那么它是值得的.您的客户丢失数据绝不是一件好事.