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 で上記パスのファイルを開き、データベースおよびテーブルが作成されることを確認。
ラッパー試してみよう。



