获取SQLite中最后一个插入行的ID的最佳方法

时间:2011-05-03 09:11:27

标签: ios sql objective-c sqlite fmdb

在iPhone上,使用FMDB获取SQLite数据库上最后插入行的ID的最佳方法是什么?

是否有更好的方式而不是:

SELECT MAX(ID)

4 个答案:

答案 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