Swift で SQLite データベースを作成して開く

ここでは、Swift で SQLite データベースを作成して開く方法をご説明します。

SQLite テスト用の iOS アプリを作る」で作ったアプリにコード追加していきます。


SQLite のデータベースを、存在しない場合は作成してから開くのに sqlite3_open() 関数を使います。

DBService.swift ファイルを開き以下のコードを追加してください。

import Foundation
import SQLite3

final class DBService {
    static let shared = DBService()
    
    private let dbFile = "DBVer1.sqlite"
    private var db: OpaquePointer?
    
    private init() {
        db = openDatabase()
    }
    
    private func openDatabase() -> OpaquePointer? {
        let fileURL = try! FileManager.default.url(for: .documentDirectory,
                                                   in: .userDomainMask,
                                                   appropriateFor: nil,
                                                   create: false).appendingPathComponent(dbFile)
        
        var db: OpaquePointer? = nil
        if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
            print("Failed to open database")
            return nil
        }
        else {
            print("Opened connection to database")
            return db
        }
    }
}

コードを順を追ってご説明します。

7 行目は dbFile に SQLite のデータベースファイル名を定義して代入しています。

今回は DBVer1.sqlite というファイル名にしました。


8 行目では、これから SQLite のデータベースを操作するのに使う db と言う名前の OpaquePointer? 型の変数を定義しています。

10 ~ 12 行目のイニシャライザーで、DBService クラスのインスタンスが生成される時に openDatabase() 関数を実行して、db に戻り値を代入しています。


14 ~ 29 行目の openDatabase() 関数は SQLite データベースをなければ作成して開き、OpaquePointer を返す関数です。

15 ~ 18 行目では、FileManager.default.url() で、ユーザーのホームディレクトリ内の documentDirectory の URL を取得し、それに SQLite のデータベースファイル名を追加したものを fileURL に代入しています。


20 行目はローカルの db と言う名前の OpaquePointer? 型の変数を定義しています。

21 行目で、sqlite3_open() 関数に先ほどの fileURL.path と db を引数として渡して、SQLite データベースを開いています。

指定した path に SQLite データベースファイルが存在しない場合は、生成されてから開かれます。


データベースを開くのに成功したら、ポインターが db に設定され、sqlite3_open() 関数は SQLITE_OK を返します。

22 ~ 23 行目では、データベースを開くのに失敗した時に、メッセージをプリントして nil を返しています。

26 ~ 17 行目では、データベースを開くのに成功した時に、メッセージをプリントして db を返しています。


以上、Swift で SQLite データベースを作成して開く方法をご説明しました。

次は SQLite データベース にテーブルを作成します。

次の記事 「Swift で SQLite のテーブルを作成する」

© 2024 iOS 開発入門