vda*_*bry 25 sql sqlite objective-c fmdb ios
在iPhone上,使用FMDB获取SQLite数据库上最后插入行的ID的最佳方法是什么?
有没有更好的方式而不是做:
SELECT MAX(ID)
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 61
如果您可以保证您的ID
列是自动增量列,那MAX(ID)
很好.
但是为了涵盖任何情况,有一个专门的SQLite函数叫LAST_INSERT_ROWID()
:
SELECT LAST_INSERT_ROWID();
Run Code Online (Sandbox Code Playgroud)
在FMDB中,您使用该-lastInsertRowId
方法(在内部运行上面的方法):
int lastId = [fmdb lastInsertRowId];
Run Code Online (Sandbox Code Playgroud)
对于 swift 5 使用此代码
let lastRowId = sqlite3_last_insert_rowid(db)
Run Code Online (Sandbox Code Playgroud)
例如
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
Run Code Online (Sandbox Code Playgroud)