SwiftからSQLite3を扱うためのFrameworkは複数ある。Swift Package Indexで検索するとダントツに星が多いのがSQLite.swiftだ。
RepoのREADMEを見るとExpressionオブジェクト, Tableオブジェクトなど見慣れないオブジェクトを生成しなければならず取っ付き悪そうだが、実は生のSQLを書いてDBを操作できる。
-
dbオブジェクトの取得
let db = try Connection("path/to/db.sqlite3")
-
select: 一旦usersテーブルから全id, emailを取り出しrowsに格納
let rows = try db.prepare("SELECT id, email FROM users") for row in rows { for (index, name) in stmt.columnNames.enumerated() { print ("\(name):\(row[index]!)") // id: Optional(1), email: Optional("alice@mac.com") } }
-
insert: queryを作成しrun, commit
let query = try db.prepare("INSERT INTO users (email) VALUES (?)") try query.run("alice@mac.com") db.changes // -> {Some 1}
-
insert: runまで一気に行う
try db.run("INSERT INTO users (email) VALUES (?)", "alice@mac.com") db.changes // -> {Some 1}
-
create table:
try db.execute(""" BEGIN TRANSACTION; CREATE TABLE users ( id INTEGER PRIMARY KEY NOT NULL, email TEXT UNIQUE NOT NULL, name TEXT ); CREATE TABLE posts ( id INTEGER PRIMARY KEY NOT NULL, title TEXT NOT NULL, body TEXT NOT NULL, published_at DATETIME ); PRAGMA user_version = 1; COMMIT TRANSACTION; """ )