Tana Gone
Tana Gone
~1 min read

Categories

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;
        """
    )
    

ref: Executing Arbitrary SQL