勇芳软件工作室.汉化:  SQLite3 API Functions > Database Connection >

sqlite3_last_insert_rowid

Previous pageReturn to chapter overviewNext page

描述

 

将第一个参数中数据库连接中最近成功插入的INSERT的rowid返回到数据库中。

 

C / C ++语法

 

sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);

 

PB语法

 

FUNCTION sqlite3_last_insert_rowid ( _

BYVAL hDbc AS DWORD _

) AS QUAD

 

参数

 

pDb

 

[in]数据库连接句柄。必须是从sqlite3_opensqlite3_open16sqlite3_open_v2获取的NULL指针或sqlite3对象指针。

 

返回值

 

最近成功将INSERT的rowid从数据库连接中插入数据库的第一个参数。

 

备注

 

SQLite表中的每个条目都有一个唯一的64位有符号整数键,称为“rowid”。rowid始终可用作名为ROWID,OID或_ROWID_的未声明列,只要这些名称也不被明确声明的列使用。如果表具有INTEGER PRIMARY KEY类型的列,则该列是rowid的另一个别名。

 

此函数将第一个参数中数据库连接中最近成功插入的INSERT的rowid返回到数据库中。从SQLite 3.7.7版本开始,这个函数记录了普通表和虚拟表的最后一个insert rowid。如果该数据库连接上没有发生任何成功的INSERT,则返回零。

 

如果INSERT发生在触发器内或虚拟表方法中,则只要触发器或虚拟表方法正在运行,该函数将返回插入行的rowid。但是一旦触发或虚拟表方法结束,此函数返回的值将返回到触发器或虚拟表方法开始之前的值。

 

由于约束违规而失败的INSERT不是成功的INSERT,并且不会更改此函数返回的值。因此INSERT OR FAIL,INSERT或IGNORE,INSERT OR ROLLBACK和INSERT OR ABORT在插入失败时不会更改此函数的返回值。当INSERT OR REPLACE遇到约束违规时,它不会失败。删除导致约束问题的行后,INSERT会继续完成,因此INSERT OR REPLACE将始终更改此接口的返回值。

 

为了实现此函数,即使后来回滚,INSERT也被认为是成功的。

 

SQL函数可通过last_insert_rowidSQL函数访问此函数。

 

如果单独的线程在sqlite3_last_insert_rowid函数运行时在同一数据库连接上执行新的INSERT,从而更改最后一个插入rowid,则sqlite3_last_insert_rowid返回的值是不可预测的,可能不等于旧的或新的最后一个插入rowid。

 

C ++实现代码

 

/*

** Return the ROWID of the most recent insert

*/

SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){

return db->lastRowid;

}