FMDatabaseQueue 被调用可重入错误

FMDatabaseQueue was called reentrantly error

我有一个围绕我的 sqlite 数据库的包装器,它创建对象并处理所有数据库查询。它仅包含 SELECT 个查询。它很好地融入了可重复使用的部分,并且运行良好。

最近我添加了一个 运行ning 缓慢的查询(多个连接),所以我想 运行 它在后台队列中。

我创建了一个 FMDatabaseQueue 并将我对 db.executeQuery 的所有调用包装在 queue.inDatabase { db in ... } 中。

但是当 FMDB 检测到我正在从另一个 inDatabase 调用中调用 inDatabase 时,它会爆炸:

inDatabase: was called reentrantly on the same queue, which would lead to a deadlock.

正确的处理方法是什么?看来我需要重组我的代码以确保永远不会对数据库进行嵌套调用,但我不明白为什么,因为 sqlite 没有同时读取的问题。

FMDatabaseQueue 无法检测您是否要进行更新或开始事务,或者您是否只进行读取。所以它总是对重入调用说 "nope"。

如果您只进行读取,则可以改用连接池。