因此,使用(和重用)准备好的语句的部分目的是数据库驱动程序执行更少的工作。来自 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")
,不止一次调用实际上是一个 noop 。某些驱动程序是这样吗?否则,我错过了什么?我应该如何重用准备好的查询?"query"
QSqlQuery