サイトマップ 連絡先 最初に戻る 戻る 次へ進む
$Date: 2018-07-07 06:49:13 +0900 (2018/07/07 (土)) $
$Revision: 1347 $

swift 3 での SQLite3 の操作

SQLite.swift の入手

https://github.com/stephencelis/SQLite.swift を git clone します。

SQLite.swift を使うプロジェクトを作成します

SQLite3.swift を使うプロジェクトを作成します。

SQLite.swift をプロジェクトに追加します

Finder で SQLiteTest.xcodeproj のあるフォルダを開きます。
SQLiteTest.xcodeproj を Xcode のプロジェクトペインにドラッグアンドドロップします。
プロジェクト名を選択して、general タブを移動します。
"Linked Frameworks and Libraries" にある + ボタンを押します。
サポートしたいプラットホームを選びます。

SQLite3 の利用

使いたいソースの先頭でインポートします。
import SQLite
以下のようなコードを貼り付けます。

参考
Macにおけるバックスラッシュ(\)の入力方法
html上でバックスラッシュと円マークを共存表示する方法

このコードはプロジェクトごと https://github.com/m-tmatma/SQLiteTest.git で公開しています。

        let path = NSSearchPathForDirectoriesInDomains(
            .applicationSupportDirectory, .userDomainMask, true
            ).first! + Bundle.main.bundleIdentifier!
        
        print("\(path)")
        if FileManager.default.fileExists(atPath: path) {
            do {
                try FileManager.default.removeItem(atPath: path)
                print("Removal successful")
            } catch let error {
                print("Error: \(error.localizedDescription)")
            }
        }
        
        let id = Expression("id")
        let email = Expression("email")
        let name = Expression("name")
        let users = Table("users")
        do
        {
            // create parent directory iff it doesn’t exist
            try FileManager.default.createDirectory(
                atPath: path, withIntermediateDirectories: true, attributes: nil
            )
            
            let db = try Connection("\(path)/db.sqlite3")
            
            try db.run(users.create { t in     // CREATE TABLE "users" (
                t.column(id, primaryKey: true) //     "id" INTEGER PRIMARY KEY NOT NULL,
                t.column(email, unique: true)  //     "email" TEXT UNIQUE NOT NULL,
                t.column(name)                 //     "name" TEXT
            })                                 // )
            
            try db.run(users.insert(email <- "alice@mac.com", name <- "Alice"))
            // INSERT INTO "users" ("email", "name") VALUES ('alice@mac.com', 'Alice')
            
            try db.run(users.insert(email <- "test@mac.com", name <- "test"))
            // INSERT INTO "users" ("email", "name") VALUES ('test@mac.com', 'test')
            
            for user in try db.prepare(users.select(id, email)) {
                print("id: \(user[id]), email: \(user[email])")
                // id: 1, email: alice@mac.com
                // id: 2, email: test@mac.com
            }
        } catch {
            print("insertion failed: \(error)")
        }