IPhoneで、FMDBを使用してSQLiteデータベースに最後に挿入された行のIDを取得する最良の方法は何ですか?
行うよりも良い方法はありますか:
SELECT MAX(ID)
ID
列が自動インクリメント列であることを保証できる場合は、MAX(ID)
で問題ありません。
しかし、どんな場合でもカバーするために、 LAST_INSERT_ROWID()
と呼ばれる特殊なSQLite関数があります:
SELECT LAST_INSERT_ROWID();
FMDBでは、-lastInsertRowId
メソッド(上記を内部的に実行します)を使用します。
int lastId = [fmdb lastInsertRowId];
関数 sqlite3_last_insert_rowid() はあなたが探しているものです。 FMDBのソースコードをチェックアウトしたばかりですが、 FMDatabase に-lastInsertRowId
という関数をラップするメソッドがあるようです。
次のことを試してください。
var rowid: Int = Int(contactDB.lastInsertRowId())
Swift 4の場合はこのコードを使用
let lastRowId = sqlite3_last_insert_rowid(db)
例えば
if sqlite3_exec(db, stringSql, nil, nil, nil) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error Insert: \(errmsg)")
}
let lastRowId = sqlite3_last_insert_rowid(db);
print(lastRowId) // its gives you last insert id
if sqlite3_finalize(statement) != SQLITE_OK {
let errmsg = String(cString: sqlite3_errmsg(db)!)
print("error finalizing prepared statement: \(errmsg)")
}
statement = nil
//*** close data base
if sqlite3_close(db) != SQLITE_OK {
print("error closing database")
}
db = nil