在 SQLite 上获取最后插入行的 ID 的最佳方法

发布于 2024-11-04 09:08:43 字数 124 浏览 5 评论 0原文

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

有没有更好的方法而不是这样做:

SELECT MAX(ID)

On iPhone, what's the best way to get the ID of the last inserted row on an SQLite Database using FMDB ?

Is there a better way rather than doing :

SELECT MAX(ID)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甚是思念 2024-11-11 09:08:43

如果您可以保证您的 ID 列是自动递增列,则 MAX(ID) 就可以了。

但为了涵盖任何情况,有一个专门的 SQLite 函数,名为 LAST_INSERT_ROWID()< /a>:

SELECT LAST_INSERT_ROWID();

在 FMDB 中,您使用 -lastInsertRowId 方法(该方法在内部运行上述内容):

int lastId = [fmdb lastInsertRowId];

If you can guarantee that your ID column is an auto-increment column, MAX(ID) is fine.

But to cover any case, there's a specialized SQLite function called LAST_INSERT_ROWID():

SELECT LAST_INSERT_ROWID();

In FMDB, you use the -lastInsertRowId method (which internally runs the above):

int lastId = [fmdb lastInsertRowId];
離人涙 2024-11-11 09:08:43

函数 sqlite3_last_insert_rowid() 就是您要寻找的。刚刚检查了 FMDB 的源代码,FMDatabase 调用包装该函数的 -lastInsertRowId

The function sqlite3_last_insert_rowid() is what you're looking for. Having just checked out the source code for FMDB, there seems to be a method on FMDatabase called -lastInsertRowId that wraps the function.

差↓一点笑了 2024-11-11 09:08:43

对于 swift 5 使用此代码

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

For swift 5 use this code

let lastRowId = sqlite3_last_insert_rowid(db)

for example

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
孤君无依 2024-11-11 09:08:43

请尝试以下操作:

var rowid: Int = Int(contactDB.lastInsertRowId())

Try the following:

var rowid: Int = Int(contactDB.lastInsertRowId())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文