gpt4 book ai didi

c - 从锁定的 SQLite3 数据库中读取

转载 作者:搜寻专家 更新时间:2023-10-30 19:48:50 25 4
gpt4 key购买 nike

我正在查看第三方进程拥有的 SQLite 数据库。它似乎已锁定并有一个 *-journal 文件。我不知道的是锁是共享锁还是独占锁。

我希望从数据库中读取数据,即使它当前被其他进程锁定。我只会从数据库中读取。

目前我在这方面失败了。只要第三方进程正在运行,我就会收到 SQLITE_BUSY 返回码。

我看过 sqlite3_busy_handler,但这似乎不是解决方案。据我了解,这只允许实现重试机制。它似乎没有提供一种方法来忽略数据库已锁定这一事实。

如何强制 SQLite 从该数据库中读取数据?

顺便说一句,我目前正在使用 FMDatabase API 包装器。这不使用 sqlite3_busy_handler。只要获得 SQLITE_BUSY 返回码,它就会无限循环。

最佳答案

我一直在对此进行一些研究,看起来有一些(非常不受欢迎的)选项。

  • 杀死锁定数据库的进程

这可能不适合你,也不适合我。

  • 复制文件并阅读副本

这似乎是解决这个问题的最佳方案。就我而言,我正在尝试读取 Firefox sqlite 数据库。 Firefox 似乎会长时间锁定文件,所以我等不及了。

因为您正在复制实时数据库文件,所以您可能会得到损坏的副本。我不认为存在破坏原件的风险(但我不确定这一点)。

简单的复制shell上的文件就好

copy original.sqlite copy.sqlite

cp  original.sqlite copy.sqlite

然后正常打开。

关于c - 从锁定的 SQLite3 数据库中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com