Pie*_*ard 5 c sqlite objective-c
我正在查看第三方进程拥有的 SQLite 数据库。它看起来是锁定的并且有一个 *-journal 文件。我不知道的是,锁是共享的还是独占的。
我希望从数据库中读取,即使它当前被其他进程锁定。我只会从数据库中读取。
目前我失败了。只要第三方进程正在运行,我就会收到 SQLITE_BUSY 返回码。
我看过 sqlite3_busy_handler,但这似乎不是解决方案。据我了解,只允许实现重试机制。它似乎没有提供一种方法来忽略数据库已锁定的事实。
如何强制 SQLite 从该数据库中读取数据?
顺便说一句,我目前正在使用 FMDatabase API 包装器。这不使用 sqlite3_busy_handler。只要得到 SQLITE_BUSY 返回码,它就会无限循环。
我一直在对此进行一些研究,看起来有一些(非常不受欢迎的)选择。
这可能不适合你,也不适合我。
这似乎是解决这个问题的最佳方案。就我而言,我正在尝试读取 Firefox sqlite 数据库。Firefox 似乎会长时间锁定该文件,所以我不能只是等待。
由于您正在复制实时数据库文件,因此您可能会得到损坏的副本。我认为不存在损坏原件的风险(但我对此不确定)。
只需将文件复制到 shell 上即可,例如
copy original.sqlite copy.sqlite
Run Code Online (Sandbox Code Playgroud)
或者
cp original.sqlite copy.sqlite
Run Code Online (Sandbox Code Playgroud)
然后就可以正常打开了。
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |