SwiftUI SQLite.swift 教程大全之 04 线程安全 构建类型安全SQL

4.1 线程安全

每个连接都配有自己的串行队列来执行语句,并且可以跨线程安全访问。打开事务和保存点的线程将在事务打开时阻止其他线程执行语句。

如果您为单个数据库维护多个连接,请考虑设置超时(以秒为单位)或繁忙的处理程序。一次只能有一个活动,因此设置繁忙的处理程序将有效地覆盖busyTimeout。

db.busyTimeout = 5 // error after 5 seconds (does multiple retries)

db.busyHandler({ tries in
    tries < 3  // error after 3 tries
})

注意:默认超时为0,因此,如果您看到database is locked错误,您可能正在尝试从多个连接同时访问同一数据库。

4.2 构建类型安全SQL

SQLite.swift附带一个类型化表达式层,可以直接将Swift类型映射到其SQLite对应类型。

Swift类型 SQLite类型
Int64* INTEGER
Double REAL
String TEXT
nil NULL
SQLite.Blob BLOB

*虽然Int64是基本的原始类型(在32位平台上保留64位整数),但Int和Bool工作透明。

SQLite.swift定义了自己的Blob结构,该结构安全地包装了底层字节。

这些表达式(以结构形式Expression)相互构建,并通过查询(QueryType)创建和执行SQL语句。

精品教程推荐


加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

发表回复