Commands out of sync 문제
일반적으로 mysql을 다룰 때 mysql connector c api를 사용한다.
이미 훌륭한 예제들도 많거니와 트러블 슈팅에 대한 자료도 많아서 사용하기에 그리 어렵지 않다.
이번에 한글문제로 기존 mysql c api로 구축된 소스를 mysql c++ api로 전환하자마자 부딪힌 문제가 바로
Commands out of sync;
mysql c api의 경우에는 이를 해결하기 위한 솔루션이 많이 검색되는데 c++ api는 아무리 검색을 해도 찾을 수가 없던 중에,
중국 친구의 블로그에서 해결 방법을 알아내게 되었다.
https://stackoverflow.com/questions/17115919/mysql-commands-out-of-sync-error-c-connector 요기와
https://www.cnblogs.com/sixbeauty/p/4798879.html 요기를 보자
요점은 stored precedure를 호출하거나 multi query의 경우에는 result를 비워줘야 한다이다.
어떤 곳에서는 이 문제를 해결하기 위해 CLIENT_MULTI_STATEMENTS 나 CLIENT_MULTI_RESULTS 를 enable 시키면 된다고 하는데,
나의 경우에는 동일한 문제가 계속 발생했다.
위의 블로그 글을 참고하여서 result가 있던 없던 무조건 아래의 소스를 추가하였더니 짠~ 하고 해결이 되어 버렸다.
while(res->next())
{
;
}
while(pstmt->getMoreResults())
{
res.reset(pstmt->getResultSet());
}
// shared_ptr<sql::PreparedStatement> pstmt
// shared_ptr<sql::ResultSet> res
포인트는 getMoreResults() 이 부분인데, 왜 그런지는 잘 모르겠다.
(난 전문 개발자가 아니니까 그냥 무시하기로 했다 ㅠ_-)
어쨌든 해결;;;