sqlite.swift 数据库 table 已锁定(代码:6)
sqlite.swift database table is locked (code:6)
我正在尝试创建一个将从在线数据库同步数据的项目。
我有 4 个文件来处理整个过程:
- dbConnection.swift
- createTables.swift
- dropAllTables.swift
- 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 是为了自动关闭它的连接,但我遇到了这个问题,因为我将我的连接定义为一个单独的函数。我不推荐这样做,最好在需要时在每个文件的开头定义连接。
我正在尝试创建一个将从在线数据库同步数据的项目。
我有 4 个文件来处理整个过程:
- dbConnection.swift
- createTables.swift
- dropAllTables.swift
- 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 是为了自动关闭它的连接,但我遇到了这个问题,因为我将我的连接定义为一个单独的函数。我不推荐这样做,最好在需要时在每个文件的开头定义连接。