有没有内置函数可以在SQLite中获取最后插入行的ID。
例如:在MySQL中,我们有
请帮助我。
谢谢
LAST_INSERT_ID()
这样的函数。对于sqllite,是否有可用于执行相同过程的函数。请帮助我。
谢谢
LAST_INSERT_ID()
这样的函数。对于sqllite,是否有可用于执行相同过程的函数。可以使用SQLite last_insert_rowid()
函数来获取:
last_insert_rowid()
函数返回调用该函数的数据库连接中最后插入的行的ROWID。该SQL函数是sqlite3_last_insert_rowid() C/C++接口函数的包装器。
此函数在PHP版本/绑定中称为sqlite_last_insert_rowid()
:
如果创建为自动增量字段,则返回最近插入到数据库dbhandle中的行的rowid。
当使用PDO SQLite 与SQLite版本3时,可以这样:
$insert = "INSERT INTO `module` (`mid`,`description`) VALUES (
NULL,
:text
);
";
$stmt = $conn->prepare($insert);
$stmt->execute(array(':text'=> $text));
echo $conn->lastInsertId()
这是一段对我来说可行的C#短方法。对于我的目的来说,Int32足够大。
public static Int32 GetNextID( SqliteConnection AConnection )
{
Int32 result = -1;
using ( SqliteCommand cmd = AConnection.CreateCommand() )
{
cmd.CommandText = "SELECT last_insert_rowid();";
using ( SqliteDataReader r = cmd.ExecuteReader() )
{
if ( r.Read() )
result = (Int32) r.GetInt64( 0 );
}
}
return result;
}
我对SQLite还很陌生,而且这个帖子已经很老了,所以我认为需要更新一下,因为我觉得有一种更简单、更短的方法可以获取最后插入行的'id'。我使用了->querySingle()
而不是->exec()
,并在我的SQL语句末尾包含了returning id
。
我觉得这可能更可靠和线程安全,因为它是实际插入语句的结果。甚至可能会减轻资源的处理负担。
$id = $db->querySingle("insert into names (first, last) values ('john', 'do') returning id;");