因此,使用(和重用)預準備語句的目的之一就是數據庫驅動程序執行的工作量較少。從Perl開始,我習慣於準備SQL查詢並存儲對準備查詢的引用,以便稍後可以綁定某些值並在必要時多次執行查詢。如何在QSqlQuery中重用預準備語句?
有了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的構造函數之外的新價值。我發現this,但我懷疑它是貨運邪教,因爲如果"query"
保持不變(即使QSqlQuery
對象不同),多次呼叫QSqlQuery::prepare("query")
實際上是noop。這對某些司機是否屬實?否則,我錯過了什麼?我應該如何重用準備好的查詢?
賓果!我錯過了這個,因爲我忘記了我在const繼承的重寫方法。我需要綁定另一個方法中的值來控制簽名。 – njahnke