在iPhone上,使用FMDB获取SQLite数据库上最后插入行的ID的最佳方法是什么?
是否有更好的方式而不是:
SELECT MAX(ID)
答案 0 :(得分:61)
如果您可以保证ID
列是自动增量列,MAX(ID)
就可以了。
但是要涵盖任何情况,都有一个名为LAST_INSERT_ROWID()
的专门的SQLite函数:
SELECT LAST_INSERT_ROWID();
在FMDB中,您使用-lastInsertRowId
方法(内部运行上述方法):
int lastId = [fmdb lastInsertRowId];
答案 1 :(得分:8)
函数sqlite3_last_insert_rowid()正是您所寻找的。刚刚检查了FMDB的源代码后,FMDatabase上的一个名为-lastInsertRowId
的方法似乎包含了该函数。
答案 2 :(得分:0)
尝试以下方法:
var rowid: Int = Int(contactDB.lastInsertRowId())
答案 3 :(得分:0)
对于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