如何检查SQLite数据库是否被锁定

How to check if SQLite database is locked

我有一个应用程序可以多次调用本地 SQLite3 数据库,有时这些调用非常接近(来自应用程序的不同区域)。在调用数据库之前,如何检查数据库当前是否已锁定?

理想情况下,我会重写该应用程序(它已经远远超出了其原始范围),但没有时间进行此迭代。

我不知道在 objective-c 中该做什么,但我很长一段时间以来一直在使用 sqlite3c 我也遇到了同样的问题。我用了下面的方法。

  1. 使用 busy_timeout 并保持其可配置性。
  2. 使用 busy_handler 保持重试 n 次。

这两项改进对我来说效果很好,但我发现了一些性能问题,我可以通过上面的配置参数来处理这些问题。您需要在故障安全和性能之间做一些权衡。