【问题标题】:sqlite.swift database table is locked (code:6)sqlite.swift 数据库表被锁定(代码:6)
【发布时间】:2017-12-19 02:14:31
【问题描述】:

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

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

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

我在尝试删除表格时遇到了问题。

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

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

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

抛出此错误:

database table is locked (code: 6)

【问题讨论】:

    标签: swift sqlite sqlite.swift


    【解决方案1】:

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

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

    【讨论】:

    • 这几乎做到了,尽管我仍然遇到同样的问题。修复方法是在每次操作后手动关闭数据库,方法是将 db 分配给空连接:db = Connection()
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2015-11-22
      相关资源
      最近更新 更多