FMDatabaseQueue被称为reentrantly错误

时间:2018-02-14 04:07:56

标签: fmdb

我的sqlite数据库周围有一个包装器,可以创建对象并处理所有数据库查询。它只包含SELECT查询。它可以很好地考虑到可重复使用的部件并且运行良好。

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

我创建了一个FMDatabaseQueue,并将我对db.executeQuery内的所有来电包裹在queue.inDatabase { db in ... }内。

但是当FMDB检测到我在另一个inDatabase电话中呼叫inDatabase时,它就会爆炸:

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

处理此问题的正确方法是什么?似乎我需要重构我的代码以确保永远不会对db进行嵌套调用,但我不明白为什么,因为sqlite对于同时读取没有问题。

1 个答案:

答案 0 :(得分:0)

FMDatabaseQueue无法检测您是否要进行更新或开始交易,或者您是否只进行了阅读。所以它总是说" nope"可以重新进入的电话。

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