ios - 我如何关闭 swift.sqlite 中的事件连接以交换其 sqlite.file

标签 ios swift sqlite.swift

tl;博士:

如何在 Sqlite.swift 中关闭与数据库的读/写连接?

背景故事:

我正在使用 sqlite.swift 框架来管理 .sqlite 文件 (data.sqlite),该文件是在应用程序启动时从应用程序包 (bootstrap.sqlite) 复制的(如果没有)还存在)。 bundle 中的这个 sqlite 文件包含各种引导数据。

我希望用户“重置所有数据”,到目前为止我的方法是删除 data.sqlite 文件并再次复制 bootstrap.sqlite 文件 - 在运行时

不幸的是,可能仍然存在打开的连接/正在运行的请求,这些连接/请求显然会失败/崩溃/搞砸文件。

我试过了

dbWriteConnection?.interrupt()
dbReadConnection?.interrupt()
try? fileManager.removeItem(at: localSqlitePathURL)

但这似乎以某种方式删除了 sqlite 中的表。

有没有办法取消所有正在运行的请求/保证连接空闲?

最佳答案

据我所知,关闭 SQLite.swift 中的数据库连接只能通过取消分配您正在使用的 Connection 对象来隐式完成。我在类似情况下所做的是a)将连接保持为var db: Connection?,以便我可以将nil分配给它们,b)使用信号量/锁确保数据库访问或我的数据库切换代码正在运行。

tl;博士

dbWriteConnection = nil
dbReadConnection = nil

关于ios - 我如何关闭 swift.sqlite 中的事件连接以交换其 sqlite.file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406966/

相关文章:

iphone - 在 objective-c 中声明一个属性(保留)时,set/get方法的默认实现是什么

ios - UITableView 滚动时滞后,每个单元格包含 4 个 UIButtons 和 4 个 UILables

ios - PFQueryTableViewController 中带有图像的动态单元格高度

ios - Swift 中缺少属性 setter 和 getter

swift - NSDate 在测试中比较

ios - SQLite.Swift 如何获得从不重复的随机行

ios - CoreData 多线程获取在访问属性之前需要很小的延迟

ios - 如何在 iOS/swift 中打破断言

swift - 如何创建一个过滤器,对 SQLite.Swift 执行相当于 WHERE ... IN 的 SQL 操作

ios - Swift 中的 Int 和 Int32 有什么区别?