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/