[英]C++ MySQL connector execute stored procedure corrupts connection
在 MySQL 數據庫中,我有一個由以下創建語句定義的存儲過程:
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)
設置,並且適用於所有其他 select、插入和更新查詢。
成功調用該過程后,所有后續查詢都失敗並MySQL error code: 2014, SQLState: "HY000"
為什么此過程調用似乎將連接留在占用的 state 中?
將呼叫包裝在 do-while 中解決了這個問題:
do {
// execute code
} while (stmt->getMoreResults());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.