개발



일반적으로 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() 이 부분인데, 왜 그런지는 잘 모르겠다.

(난 전문 개발자가 아니니까 그냥 무시하기로 했다 ㅠ_-)


어쨌든 해결;;;