sqlite:检查读/写锁
Posted
技术标签:
【中文标题】sqlite:检查读/写锁【英文标题】:sqlite: check reader/writer lock 【发布时间】:2011-05-08 08:59:32 【问题描述】:我有 2 个进程都访问 sqlite3 数据库。虽然在 sqlite 中读取不是问题,但只有一个进程可以写入数据库。根据常见问题解答: http://www.sqlite.org/faq.html#q5 sqlite 使用读/写锁。
我如何检查数据库是否被另一个进程锁定以进行写入,无论是来自 python 还是 c++?
[编辑] 我的意思是执行查询是一种选择,但它的性能取决于查询。所以问题也是我使用什么类型的查询来最小化这种影响。我也想自己锁定/解锁数据库。
【问题讨论】:
【参考方案1】:当 SQLite 尝试访问锁定的数据库时,它的默认行为是返回 SQLITE_BUSY。文档描述了向此事件添加自定义处理的方法:http://www.sqlite.org/faq.html#q5。
我从文档中了解到,您调用的任何尝试写入此锁定数据库的函数都只会返回 SQLITE_BUSY,这将通知您数据库已锁定。
如果您担心执行无法完成的写入,您可以结合繁忙超时 (sqlite3_busy_timeout) 实现繁忙处理程序回调 (sqlite3_busy_handler),这将在 x 毫秒后重试写入。
[edit] 在http://www.sqlite.org/c3ref/io_methods.html 中,它提到了一个函数指针结构,其中之一是xCheckReservedLock(),如果文件被锁定,它会返回true。在这个结构中是所有其他与锁相关的功能。我不确定是否可以从 sqlite 库外部访问这些,但可能值得研究。我想你是通过这个界面来做的:http://www.sqlite.org/c3ref/file_control.html
【讨论】:
我实际上链接到我的问题中的常见问题解答。我仍然想知道的是如何检查数据库是否被锁定。我的意思是执行查询是一种选择,但它的性能取决于查询。所以问题也是我使用什么类型的查询来最小化这种影响。我也想自己锁定/解锁数据库。我可能应该在这个问题上更清楚。 在sqlite.org/c3ref/io_methods.html 中,它提到了一个函数指针结构,其中一个是xCheckReservedLock(),如果文件被锁定,它会返回true。在这个结构中是所有其他与锁相关的功能。我不确定是否可以从 sqlite 库外部访问这些,但可能值得研究。我想你是通过这个界面来做的:sqlite.org/c3ref/file_control.html以上是关于sqlite:检查读/写锁的主要内容,如果未能解决你的问题,请参考以下文章
无法使用可读格式的 JavaScript 读取 IndexedDB sqlite 文件
如何将 sqlite 文件中的 blob 数据读取为可读格式?
java Android中的SQLite数据库创建和数据库读/写操作。