iOS SwiftでSqliteを使う。シミュレータ上に作成されたSQLiteファイルをMacで確認する
SQLite3 の Swift用ラッパーもあるようなのだが、まずは(265) How to store data locally in swift 5 using SQLite – YouTubeをみながら、動作確認してみる。
Import SQLite3 の部分をCommnad押しながらクリック、Jump to Definition でとんだ先のヘッダーファイルにドキュメントがある。
読みにくいし、XCodeからダイナミックにヘルプ参照できないのと使い方がSwiftちっくでないので、先述のラッパー使ったほうが良さそうか。
とりあえず、SQLiteのファイルを作成してデータベースおよびテーブルを作成する。
import Foundation import SQLite3 class DBHelper { var db : OpaquePointer? var path : String = "mydb.sqlite" init() { self.db = self.creatDb() self.createTable() } func creatDb() -> OpaquePointer? { let filePath = try! FileManager.default.url( for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) .appendingPathComponent("mydb.sqlite") var db : OpaquePointer? = nil if sqlite3_open(filePath.path, &db) == SQLITE_OK { let documentDirPath = NSSearchPathForDirectoriesInDomains( FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) print("Simulator location \(documentDirPath)") print("Db has been created with path = \(filePath)") return db } else { print("Creating DB Error.") return nil } } func createTable() { let query = "create table if not exists grade(id integer primary key autoincrement, name text, result text, list text);" var createTable : OpaquePointer? = nil if sqlite3_prepare_v2(self.db, query, -1, &createTable, nil) == SQLITE_OK { if sqlite3_step(createTable) == SQLITE_DONE { print("Table created") } else { print("Table create fail") } } else { print("Preparation fail") } } }
ViewControllerから、上記を実装したDBHeler を生成すると裏でDBとテーブルを生成。
シミュレーターに生成されたSQLiteファイルのMac上の場所をダンプする。(シミュレーターのパスにデバイスのUUIDが含まれるのでFinderでぱっと見探し出せないので)
import UIKit class ViewController: UIViewController { let db = DBHelper() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } }
実行してみると、SQLiteファイルが生成されるパスのダンプおよび、生成が正常終了したようだ。
Macの、SQLite Studio で上記パスのファイルを開き、データベースおよびテーブルが作成されることを確認。
ラッパー試してみよう。