Я тоже столкнулся с этой проблемой и потратил немного времени, чтобы разобраться с ней.Я даже установил "CLIENT_MULTI_RESULTS" и "CLIENT_MULTI_STATEMENTS" безрезультатно.
То, что происходит, - MySql думает, что есть другой набор результатов, ожидающий чтения от первого вызова к Запросу.Затем, если вы попытаетесь запустить другой Query, MySql думает, что у него все еще есть ResultSet с прошлого раза, и отправляет ошибку «Out of Sync».
Похоже, это может быть проблема с C ++ Connector, но я нашелОбходной путь и хотел опубликовать его в случае, если кто-то еще имеет эту проблему:
sql::PreparedStatement *sqlPrepStmt;
sql::ResultSet *sqlResult;
int id;
std::string name;
try {
//Build the Query String
sqlStr = "CALL my_routine(?,?)";
//Get the Result
sqlPrepStmt = this->sqlConn->prepareStatement(sqlStr);
sqlPrepStmt->setInt(1, itemID);
sqlPrepStmt->setInt(2, groupId);
sqlPrepStmt->executeUpdate();
sqlResult = sqlPrepStmt->getResultSet();
//Get the Results
while (sqlResult->next()) {
id = sqlResult->getInt("id");
name = sqlResult->getString("name");
}
//Workaround: Makes sure there are no more ResultSets
while (sqlPrepStmt->getMoreResults()) {
sqlResult = sqlPrepStmt->getResultSet();
}
sqlResult->close();
sqlPrepStmt->close();
delete sqlResult;
delete sqlPrepStmt;
}
catch (sql::SQLException &e) {
/*** Handle Exception ***/
}