我如何关闭 swift.sqlite 中的活动连接以交换其 sqlite.file
How can i close active connections in swift.sqlite to swap its sqlite.file
tl;博士:
如何在 Sqlite.swift 中关闭与数据库的读/写连接?
背景故事:
我正在使用 sqlite.swift
框架来管理在应用程序启动时从应用程序包 (bootstrap.sqlite) 复制的 .sqlite 文件 (data.sqlite)(如果它没有'尚不存在)。
捆绑包中的这个 sqlite 文件包含各种 bootstrap 数据。
我希望用户 "reset all data",到目前为止我的方法是删除 data.sqlite 文件并再次复制 bootstrap.sqlite 文件 - 在运行时
不幸的是,可能仍有打开的连接/运行 请求显然失败/崩溃/搞砸了文件。
我试过了
dbWriteConnection?.interrupt()
dbReadConnection?.interrupt()
try? fileManager.removeItem(at: localSqlitePathURL)
但这似乎以某种方式删除了 sqlite 中的 table。
有什么方法可以取消所有 运行 请求/保证连接空闲?
AFAIK 关闭 SQLite.swift 中的数据库连接只能通过取消分配您正在使用的 Connection
对象来隐式完成。我在类似情况下所做的是 a) 将连接保持为 var db: Connection?
以便我可以将 nil
分配给它们,并且 b) 使用 semaphores/locks 来确保数据库访问或我的数据库切换代码是 运行.
tl;dr
dbWriteConnection = nil
dbReadConnection = nil
tl;博士:
如何在 Sqlite.swift 中关闭与数据库的读/写连接?
背景故事:
我正在使用 sqlite.swift
框架来管理在应用程序启动时从应用程序包 (bootstrap.sqlite) 复制的 .sqlite 文件 (data.sqlite)(如果它没有'尚不存在)。
捆绑包中的这个 sqlite 文件包含各种 bootstrap 数据。
我希望用户 "reset all data",到目前为止我的方法是删除 data.sqlite 文件并再次复制 bootstrap.sqlite 文件 - 在运行时
不幸的是,可能仍有打开的连接/运行 请求显然失败/崩溃/搞砸了文件。
我试过了
dbWriteConnection?.interrupt()
dbReadConnection?.interrupt()
try? fileManager.removeItem(at: localSqlitePathURL)
但这似乎以某种方式删除了 sqlite 中的 table。
有什么方法可以取消所有 运行 请求/保证连接空闲?
AFAIK 关闭 SQLite.swift 中的数据库连接只能通过取消分配您正在使用的 Connection
对象来隐式完成。我在类似情况下所做的是 a) 将连接保持为 var db: Connection?
以便我可以将 nil
分配给它们,并且 b) 使用 semaphores/locks 来确保数据库访问或我的数据库切换代码是 运行.
tl;dr
dbWriteConnection = nil
dbReadConnection = nil