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() returns MySQL 连接器连接的副本,它使用 setAutoCommit(true) 设置并且适用于所有其他 select,插入,并更新查询。

成功调用该过程后,所有后续查询都失败并显示 MySQL error code: 2014, SQLState: "HY000"

为什么这个过程调用似乎使连接处于占用状态?

在 do-while 中封装调用解决了问题:

do {
// execute code
} while (stmt->getMoreResults());