Как я могу использовать подготовленные операторы с QSqlQuery?

Поэтому одной из целей использования (и повторного использования) подготовленных операторов является то, что драйвер базы данных выполняет меньше работы. Исходя из Perl, я привык готовить SQL-запрос и хранить ссылку на этот подготовленный запрос, чтобы впоследствии я мог связать некоторые значения и выполнить запрос, при необходимости много раз.

С Qt C ++ (Qt 5.1) я пытаюсь сделать это:

    class MyClass {
[...]
QSqlDatabase db;
QSqlQuery insert_query;
};

MyClass::MyClass() {
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("whatever");
db.open();

insert_query = QSqlQuery(db);
insert_query.prepare("insert into players (firstname, lastname) values(:firstname, :lastname)"));
}

void MyClass::MyMeth(QString firstname, QString lastname) {
insert_query.bindValue(":firstname", firstname); //COMPILE ERROR
}

error: no matching member function for call to 'bindValue'

note: candidate function not viable: 'this' argument has type 'const QSqlQuery', but method is not marked const

Но я хочу связать новые значения в подготовленном запросе вне конструктора MyClass. я нашел этот, но я подозреваю, что это груз-культ, потому что зовет QSqlQuery::prepare("query") более одного раза, фактически, но "query" остается прежним (даже если QSqlQuery объект другой). Это правда с некоторыми драйверами? Иначе чего мне не хватает? Как я должен повторно использовать подготовленные запросы?

1

Решение

Ошибка вашего компилятора не имеет ничего общего с повторным использованием QSqlQuery. Вы объявили MyMeth как const? Удалить const, это предотвращает вызов неконстантного bindValue ().

+ Изменить

void MyMeth(QString firstname, QString lastname) const;

в

void MyMeth(QString firstname, QString lastname);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]