несоответствие количества параметров в параметризованном запросе - PullRequest
2 голосов
/ 23 сентября 2011

Я использую довольно много параметризованных запросов в моем коде по соображениям производительности.Короче говоря, некоторые из них работают, некоторые - нет.

Я инициализирую запрос во время создания оболочки моей базы данных следующим образом:

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

1 Ответ

5 голосов
/ 23 сентября 2011

Обычно эта ошибка означает, что сам запрос SELECT / UPDATE неверен.Вы не дали схему базы данных, поэтому невозможно определить, какая именно.Таким образом, один или несколько из somevalue, sometable, one_feature или second_feature отсутствуют в базе данных / таблице.

...