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 データベース にテーブルを作成します。