SQLite.swift
一个在 SQLite3 之上的类型安全的 Swift 语言层。
SQLite.swift 提供了关于 SQL 语句语法和意图的编译时信心。
特性
- 纯 Swift 接口
- 类型安全、可选感知的 SQL 表达式构建器
- 灵活、可链式、惰性执行的查询层
- 自动类型数据访问
- 轻量、简单易用的查询和参数绑定接口
- 友好的错误处理和调试
- 支持全文本搜索
- 文档齐全
- 广泛测试
- 通过 CocoaPods 支持 SQLCipher
- 模式查询/迁移
- 在 Linux 上运行(有一些限制)
- 在 StackOverflow 和 Gitter 聊天室(试验性的)提供活跃支持
使用方法
import SQLite
// Wrap everything in a do...catch to handle errors
do {
let db = try Connection("path/to/db.sqlite3")
let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String?>("name")
let email = Expression<String>("email")
try db.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
// CREATE TABLE "users" (
// "id" INTEGER PRIMARY KEY NOT NULL,
// "name" TEXT,
// "email" TEXT NOT NULL UNIQUE
// )
let insert = users.insert(name <- "Alice", email <- "[email protected]")
let rowid = try db.run(insert)
// INSERT INTO "users" ("name", "email") VALUES ('Alice', '[email protected]')
for user in try db.prepare(users) {
print("id: \(user[id]), name: \(user[name]), email: \(user[email])")
// id: 1, name: Optional("Alice"), email: [email protected]
}
// SELECT * FROM "users"
let alice = users.filter(id == rowid)
try db.run(alice.update(email <- email.replace("mac.com", with: "me.com")))
// UPDATE "users" SET "email" = replace("email", 'mac.com', 'me.com')
// WHERE ("id" = 1)
try db.run(alice.delete())
// DELETE FROM "users" WHERE ("id" = 1)
try db.scalar(users.count) // 0
// SELECT count(*) FROM "users"
} catch {
print (error)
}
SQLite.swift 还可以作为 C API 的轻量级、Swift 实友的包装器。
// Wrap everything in a do...catch to handle errors
do {
// ...
let stmt = try db.prepare("INSERT INTO users (email) VALUES (?)")
for email in ["[email protected]", "[email protected]"] {
try stmt.run(email)
}
db.totalChanges // 3
db.changes // 1
db.lastInsertRowid // 3
for row in try db.prepare("SELECT id, email FROM users") {
print("id: \(row[0]), email: \(row[1])")
// id: Optional(2), email: Optional("[email protected]")
// id: Optional(3), email: Optional("[email protected]")
}
try db.scalar("SELECT count(*) FROM users") // 2
} catch {
print (error)
}
阅读文档或从 Xcode 项目的 playground 中交互式探索更多内容。
安装
注意:版本 0.11.6 及更高版本需要 Swift 5 (并且 Xcode 10.2)或更高。版本 0.11.5 需要 Swift 4.2 (并且 Xcode 10.1)或更高。
Swift 包管理器
Swift 包管理器是一个用于管理 Swift 代码分发的工具。
- 添加以下内容到您的
Package.swift
文件中
dependencies: [
.package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.14.1")
]
- 构建您的项目
$ swift build
查看 Tests/SPM 文件夹中使用的 SPM 的小型演示项目。
Carthage
Carthage 是一个简单的、去中心化的 Cocoa 依赖项管理器。要使用 Carthage 安装 SQLite.swift
-
确保已安装 Carthage Carthage。
-
更新您的 Cartfile 以包含以下内容
github "stephencelis/SQLite.swift" ~> 0.14.1
-
运行
carthage update
并 添加适当的框架。
CocoaPods
CocoaPods 是用于 Cocoa 项目的依赖项管理器。要使用 CocoaPods 安装 SQLite.swift
-
确保已安装 CocoaPods CocoaPods。
# Using the default Ruby install will require you to use sudo when # installing and updating gems. [sudo] gem install cocoapods
-
更新您的 Podfile 以包含以下内容
use_frameworks! target 'YourAppTargetName' do pod 'SQLite.swift', '~> 0.14.0' end
-
运行
pod install --repo-update
。
用户手册
要以子项目的方式安装SQLite.swift到Xcode中
-
将 SQLite.xcodeproj 文件拖入您的项目中。(首先需要 通过Submodule、克隆或者 下载 项目。)
-
在您的目标配置的 通用 选项卡中,点击 链接框架和库 下的 + 按钮。
-
选择适合您平台的相应 SQLite.framework。
-
添加.
登录到实际设备还需要一些额外的步骤
-
在 通用 选项卡中,点击 嵌入的二进制文件 下的 + 按钮。
-
选择适合您平台的相应 SQLite.framework。
-
添加.
通信
查看规划文档以获取路线图和现有功能请求。
阅读贡献指南。 TL;DR(但请;R)
- 需要 帮助 或有 一般问题? 在Stack Overflow(标签
sqlite.swift
)提问。 - 发现 错误 或有 功能请求? 打开一个issue。
- 想要 贡献? 提交一个pull request。
原作者
许可
SQLite.swift遵循MIT许可证。有关更多信息,请参阅LICENSE文件。
关联
这些项目增强或使用SQLite.swift
替代
正在寻找其他内容?尝试另一个Swift封装(或FMDB)