簡體   English   中英

C++ MySQL 連接器執行存儲過程損壞連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM