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ファイルが生成されるパスのダンプおよび、生成が正常終了したようだ。

sqlitefilpath_on_iphone_sim

Macの、SQLite Studio で上記パスのファイルを開き、データベースおよびテーブルが作成されることを確認。

sqlite_file_content

ラッパー試してみよう。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です