Я использую довольно много параметризованных запросов в моем коде по соображениям производительности.Короче говоря, некоторые из них работают, некоторые - нет.
Я инициализирую запрос во время создания оболочки моей базы данных следующим образом:
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 и SQLite 3.7.4-2