성능상의 이유로 코드에서 많은 매개 변수화 된 쿼리를 사용하고 있습니다. 즉, 일부는 작동하지만 일부는 작동하지 않습니다.매개 변수화 된 쿼리에서 매개 변수 개수가 일치하지 않습니다.
내가 이렇게 내 데이터베이스 래퍼의 건설 중에 쿼리를 초기화 :
QString querystring = QString("SELECT somevalue FROM sometable "
"WHERE one_feature = :one_feature AND other_feature = :other_feature ");
myquery = QSqlQuery(db);
myquery.setForwardOnly(true);
myquery.prepare(querystring);
myquery
내 데이터베이스 래퍼의 QSqlQuery
멤버 변수입니다. 나중에,이 쿼리를 사용하고자하는 기능에, 나는
int db_wrapper::fetch_some_value (int arg1, int arg2) {
myquery.clear();
myquery.bindValue(":one_feature", arg1);
myquery.bindValue(":other_feature", arg2);
qDebug() << "Bound values: " << myquery.boundValues();
bool OK = myquery.exec();
if (!OK) {
int number = myquery.lastError().number();
qDebug() << "db error " << number;
qDebug() << "db error " << myquery.lastError().text();
#ifdef USE_EXCEPTIONS
throw "Could not fetch some_value!";
#endif
}
// process data...
}
뭔가를 할
나는 항상 같은 오류 메시지/출력 얻을 :
Bound values: QMap((":one_feature", QVariant(int, 1)) (":other_feature" , QVariant(int, 1)))
db error -1
db error " Parameter count mismatch"
terminate called after throwing an instance of 'char const*'
예외입니다 놀라운 일이 아니다, 그러나 매개 변수를 개수 불일치가 있습니다. boundValues
에 대한 호출은 실제로 올바른 값과 모든 것을 표시하지만 여전히이 오류 메시지가 표시됩니다. 유사한 쿼리가 제대로 작동합니다.
위치 바인드 값을 대체하려고 시도했습니다. 자리 표시 자의 이름은 ?
이고 위치 바인딩 값은 모두 사용하지 않았습니다. 문제가 무엇인지 알 수있는 사람이 있습니까?
나는 Qt는 4.7.3 및
테이블의 필드가 int로 선언 되었습니까? 당신은 텍스트로 시도 할 수 있고 (따옴표로 묶인 문자열을 전달할 수 있습니까?) – Louis
예, 필드는 ' "one_feature"정수로 선언됩니다 NOT NULL 참조 생성 SQL 스크립트에서 "feature_table"("id")'. 테이블을 변경하는 것은 불행히도 옵션이 아닙니다. 나는 또한 querystring에서 매개 변수를 인용하려고 시도했지만, 그 중 하나는 작동하지 않았다. – arne
다른 사람의 이동 경로 :이 오류가 있지만 내 문제는 열 이름에 역 따옴표를 사용하지 않고 'sqlite 키워드 인 열 이름을 사용한다는 것입니다. –