在 MySQL 数据库中,我有一个由以下 create 语句定义的存储过程:
DROP procedure IF EXISTS `get_next_ticket_number`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_next_ticket_number`()
BEGIN
SELECT IFNULL((SELECT `number`
FROM ticket
ORDER BY `number` DESC
LIMIT 1)+1, 1) as 'next_number';
END$$
DELIMITER ;
在 QT C++ 应用程序中,我试图调用该过程并稍后使用结果:
std::unique_ptr<sql::PreparedStatement> pstmt;
std::unique_ptr<sql::ResultSet> res;
int next_number = 0;
try
{
pstmt.reset(dbConnection::getInstance()->getDb()->prepareStatement("CALL get_next_ticket_number();"));
res.reset(pstmt->executeQuery());
while(res->next()) {
next_number = res->getInt("next_number");
}
dbConnection::getInstance()->getDb()->commit(); // For good measure...
}
catch (sql::SQLException &e)
{
// Error logging here
}
getInstance()->getDb()
返回 MySQL 连接器连接的副本,该副本使用 setAutoCommit(true)
设置并且适用于所有其他选择、插入和更新查询。
成功调用该过程后,所有后续查询均失败并显示 MySQL error code: 2014, SQLState: "HY000"
为什么这个过程调用似乎让连接处于占用状态?
答案 0 :(得分:0)
将调用包装在 do-while 中解决了问题:
do {
// execute code
} while (stmt->getMoreResults());