2014-10-19 7 views
0

Qt를 사용하여 MySQL 서버 저장 프로 시저를 호출하려고합니다. 이 프로시 저는 검색하려는 여러 행의 데이터를 반환합니다.바인딩을 사용하여 서버 저장 프로 시저 호출

내가 시도한 첫 번째 조각은 잘 작동 :

QSqlQuery query("CALL GetOrderItems(323)", dataBase); 
qDebug() << query.first(); 

는 또한 원하는 데이터를 반환하고 예상처럼 query.first()는 사실이다.

그런 다음 Qt 설명서와 같은 매개 변수 바인딩을 사용하여 매개 변수를 삽입하려고했습니다. 나는 다음 스 니펫을 시도했다. 첫 번째는 두 번째 키워드 자리 표시자인 인덱스 자리 표시자를 사용합니다.

QSqlQuery query(dataBase); 
qDebug() << query.prepare("CALL GetOrderItems(?)"); 
query.bindValue(0, 323); 
qDebug() << query.exec(); 
qDebug() << query.first(); 

QSqlQuery query(dataBase); 
qDebug() << query.prepare("CALL GetOrderItems(:myparam)"); 
query.bindValue(":myparam", 323); 
qDebug() << query.exec(); 
qDebug() << query.first(); 

위의 두 쿼리 모두 정상적으로 실행됩니다. 그러나 query.first()은 false를 반환하므로 결과를 얻는 방법을 모르겠습니다.

어떤 식 으로든 바인딩 쿼리의 결과를 얻을 수 있습니까? 왜이 기능이 작동하지 않습니까?

+0

http://qt-project.org/doc/qt-4.8/sql-driver.html#qmysql - MySQL 드라이버/API의 제한 사항 인 것 같습니다. – Mat

+0

링크 된 텍스트는 IN, OUT 및 INOUT 매개 변수를 나타냅니다. 하지만 나는 OUT 미터 또는 INOUT 파 미터를 사용하지 않습니다. 쿼리 결과 레코드를 검색하고 싶습니다. 대신 OUT 매개 변수를 사용하려고 시도하지 않았지만 연결된 텍스트가 맞으면 너무 실패합니다. – Silicomancer

+0

당신은'IN' 매개 변수를 사용하고 있습니다, 그렇지 않습니까? – Mat

답변

0

가 Qt의 문서에서 찾을 수 있습니다 두 문장은 다음과 같습니다

"는 SQL 수준에서 MySQL을 5 개 소개합니다 저장 프로 시저 지원은 있지만 API는 IN, OUT 및 INOUT 매개 변수를 제어 할 것이 없습니다." here, Thanks Mat)

"반환 문을 사용하여 값을 반환하거나 여러 결과 집합을 반환하는 저장 프로 시저가 완전히 지원되지 않습니다." (here)

분명히 Qt/MySQL의 바인딩 매개 변수는 꽤 쓸모가 없습니다. 배치 모드에 대해서는 this을 참조하십시오.