SQLiteExpress

Platforms: macOS, iOS Language: Swift 5.3 IDE: Xcode 12.0 Package managers: SwiftPM, Carthage License: Apache

概述

SQLiteExpress 是一个 Swift 库,为 macOS 和 iOS 上的 SQLite3 C API 实现了轻量级封装库。 SQLiteExpress 提供了

这是在不改变 SQLite3 C API 的编程协议的情况下完成的。SQLiteExpress 不提供任何编写 SQL 语句方面的帮助,例如以类型安全的方式。如果需要此功能,其他 SQLite 封装库可能更适合。

使用示例

以下代码片段展示了 SQLiteExpress 的使用方式。此代码片段执行以下操作

  1. 它创建一个新的内存数据库
  2. 它在数据库中创建一个新表
  3. 它将数据输入到新表中
  4. 它在新表中查询一些数据
// Create a new in-memory database `db` and require extended errors to be thrown.
let db = try SQLiteDatabase(extendedErrors: true)

// Create a new table in `db`.
let stmt0 = try db.prepare(sql: """
    CREATE TABLE Contacts (
      id INTEGER PRIMARY KEY,
      name TEXT NOT NULL,
      email TEXT NOT NULL UNIQUE,
      phone TEXT
    );
  """)
try stmt0.step()
stmt0.finalize()

// Enter two rows into the new table.
let stmt1 = try db.prepare(sql: """
    INSERT INTO Contacts VALUES (?, ?, ?, ?);
  """)
try stmt1.bind(integer: 1000, toParam: 1)
try stmt1.bind(text: "Mickey Mouse", toParam: 2)
try stmt1.bind(text: "mickey@disney.net", toParam: 3)
try stmt1.bind(text: "+1 101-123-456", toParam: 4)
try stmt1.step()
try stmt1.bind(integer: 1001, toParam: 1)
try stmt1.bind(text: "Donald Duck", toParam: 2)
try stmt1.bind(text: "donald@disney.net", toParam: 3)
try stmt1.bind(text: "+1 101-123-456", toParam: 4)
try stmt1.step()
stmt1.finalize()

// Cound the number of distinct phone numbers.
let stmt2 = try db.prepare(sql: """
    SELECT COUNT(DISTINCT phone) FROM Contacts;
  """)
try stmt2.step()
let phoneNumbers = try stmt2.int(atColumn: 0)
Swift.print("Number of distinct phone numbers: \(phoneNumbers)")
stmt2.finalize()

// Show all names and email addresses from the `Contacts` table.
let stmt3 = try db.prepare(sql: """
    SELECT name, email FROM Contacts;
  """)
Swift.print("Entries in table:")
while try !stmt3.step() {
 Swift.print("\(try stmt3.text(atColumn: 0)!), \(try stmt3.text(atColumn: 1)!)")
}
stmt3.finalize()

执行时,代码会打印以下行

Number of distinct phone numbers: 1
Entries in table:
Mickey Mouse, mickey@disney.net
Donald Duck, donald@disney.net

要求

构建 Swift SQLiteExpress 框架的组件需要以下技术

版权

作者:Matthias Zenger (matthias@objecthub.net)
版权所有 © 2020 Google LLC。
请注意:这不是谷歌官方产品。