sqlite.swift 数据库 table 已锁定(代码:6)

sqlite.swift database table is locked (code:6)

我正在尝试创建一个将从在线数据库同步数据的项目。

我有 4 个文件来处理整个过程:

  1. dbConnection.swift
  2. createTables.swift
  3. dropAllTables.swift
  4. updateDatabase.swift

我在尝试删除 table 时遇到了问题 运行。

例如,我在 createTables.swift 的函数中有一个名为 FLEET_GROUPINGS_FOR_IPAD_SYSTEM 的 table。

以下代码(在dropAllTables.swift的单独函数中):

let table = Table("FLEET_GROUPINGS_FOR_IPAD_SYSTEM")
try db.run(table.drop())

抛出此错误:

database table is locked (code: 6)

尝试 运行 在一个线程中同步所有与表相关的数据

DispatchQueue.global(qos: .background).sync 
           {
             try db.run(table.drop())
           }

这最终对我有用,每次 read/write 操作后手动关闭连接:db = Connection()。这是一个混乱的解决方案,因为 sqlite.swift 是为了自动关闭它的连接,但我遇到了这个问题,因为我将我的连接定义为一个单独的函数。我不推荐这样做,最好在需要时在每个文件的开头定义连接。