■はじめに
以下のサイトを参考に、SQLite3は使用できるようにしておいてください。(基本的なことは飛ばして説明します。)
■手順
まずは、ソースコードの全量は以下
func insert() {
var stmt: OpaquePointer?
let queryString = "INSERT INTO sampleTable (name, age) VALUES (?, ?)"
// クエリを準備する
if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error preparing insert: \(errmsg)")
return
}
// prepared statementを複数定義するために非定常の定義
let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
// 1つめの?の定義
if sqlite3_bind_text(stmt, 1, "ひとつめ", -1, SQLITE_TRANSIENT) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(self.db)!)
print("failure binding name: \(errmsg)")
return
}
// 2つめの?の定義
if sqlite3_bind_text(stmt, 2, "ふたつめ", -1, SQLITE_TRANSIENT) != SQLITE_OK{
let errmsg = String(cString: sqlite3_errmsg(self.db)!)
print("failure binding name: \(errmsg)")
return
}
// クエリを実行する
if sqlite3_step(stmt) != SQLITE_DONE {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("failure inserting hero: \(errmsg)")
return
}
print("データが登録されました")
}
重要なのは、以下の定義です。
これは、複数のPrepared Statementを使用するための「おまじない」だと思ってください。
let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
上記のおまじないの定数を「sqlite3_bind_text」の第五引数に設定することで、複数のPrepared Statementに値をそれぞれ設定できます。