【发布时间】:2011-01-19 02:27:37
【问题描述】:
我正在查看第三方进程拥有的 SQLite 数据库。它看起来被锁定并且有一个 *-journal 文件。我不知道锁是共享的还是独占的。
我希望从数据库中读取数据,即使它当前已被其他进程锁定。我只会从数据库中读取数据。
目前我在这方面失败了。只要第三方进程正在运行,我就会得到一个 SQLITE_BUSY 返回码。
我查看了 sqlite3_busy_handler,但这似乎不是解决方案。据我了解,这只允许实现重试机制。它似乎没有提供一种方法来忽略数据库被锁定的事实。
如何强制 SQLite 从该数据库中读取?
顺便说一句,我目前正在使用 FMDatabase API 包装器。这不使用 sqlite3_busy_handler。只要得到 SQLITE_BUSY 返回码,它就会无限循环。
【问题讨论】:
-
你是怎么打开数据库的?
-
int err = sqlite3_open(databasePath, &db);还有其他方法吗?
-
您有什么方法可以判断其他进程是否已失效或处于磁盘睡眠状态(可能)?锁(AFAIK)应该只用于写入。
-
另一个进程运行良好。从 SQLite 文档中,我了解到 SQLite 在让我阅读之前会尝试使用日志回滚。
标签: c objective-c sqlite