我有以下代码将一行插入mysql数据库并返回插入的id:
/*
* Execute the statement
*/
std::string sql = "INSERT INTO TABLE (A, B, C) VALUES (1, 2, 3)";
sql::Statement *stmt;
stmt = connection->createStatement();
stmt->execute(sql);
/*
* Get the returned id
*/
stmt = connection->createStatement();
sql::ResultSet *res = stmt->executeQuery("SELECT @@identity AS id");
res->next();
model.modelId = res->getInt64("id");
我的问题是:
我真的需要再次致电connection->createStatement()
吗?
我认为这可能会使代码重载,因为我需要调用两次数据库。
有没有办法优化此代码?
是否有其他方法可以获取最后插入的ID?
感谢您的帮助。
答案 0 :(得分:3)
仅供参考,@@identity
是MSSQL-specific system function,它也返回最后插入ID,但是对于MSSQL,而不是MySQL。
要获取MySQL中的last-insert id,因为您已经专门询问了MySQL,所以需要将SELECT语句更改为以下内容:
SELECT LAST_INSERT_ID() AS id;
另外,由于stmt->execute()
和stmt->executeQuery()
方法将 String 作为输入参数,我相信您不再需要connection->createStatement()
。只是为了确认,我只是用Google搜索并找到了link。
请注意,这个答案专门针对MySQL,因为这个问题是关于MySQL的。希望它有所帮助。