如果应用程序在写入 sqlite db(或 CoreData)时崩溃,有时 db 文件会被破坏,之后 db 的初始化可能无法打开。
我现在正在做的是删除数据库文件,如果它无法打开,并复制一个新的以使用。
我想知道处理这种情况的最佳方法是什么?
由于 SQLite 的原子提交性质,您永远不会遇到数据库损坏,如果是,这可能是由于在 iOS 或硬盘本身中启用了诸如“写入缓存”之类的功能,或者甚至可能是由硬件引起的失败。
SQLite 维护一个日志文件以在电源故障或其他突然关闭的情况下回滚提交并将数据库返回到一致的状态。如果发生损坏,则意味着操作系统对 SQLite 的响应表明写入操作已完成,而实际上它尚未物理提交到媒体。请确保在您的应用程序中使用时禁用写入缓存。有关更多信息,请参阅 SQLite原子提交参考。
否则,人们似乎“修复”一个 SQlite DB 的常用方法是.dump
将 DB 文件转换为另一个。像这样echo ".dump" | sqlite old.db | sqlite new.db
希望这可以帮助...