如何使用 QSqlQuery 重用预准备语句
How do I reuse prepared statements with 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 构造函数之外的准备好的查询中绑定新值。我发现了这个,但我怀疑它是货物崇拜,因为如果"query"
保持不变(即使QSqlQuery
对象不同),多次调用QSqlQuery::prepare("query")
实际上是一个无聊的事情。某些驱动程序是这样吗?否则,我错过了什么?我应该如何重用准备好的查询?
您的编译器错误与 QSqlQuery 的重用性无关。您是否宣布MyMeth为const
?删除const
,它阻止了对非 const bindValue() 的调用。
改变
void MyMeth(QString firstname, QString lastname) const;
自
void MyMeth(QString firstname, QString lastname);
相关文章:
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 在 COUT 语句中使用 COUT 调用函数
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 有没有办法在C++将字符串与开关语句一起使用?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- 我如何将 OR 与 if 语句一起使用字符串
- 如何在不同的开关大小写语句上使用对象的类成员函数?
- 是否可以对任何语句字符串使用预准备语句?
- 如何在 if-else 语句中使用 C++20 的可能/不太可能属性
- 在 if 中使用变量,这些变量在 if 语句中使用
- 如何在 if 语句中使用dynamic_cast
- 检测要在 if 语句中使用的输入空格
- 如何在开关语句中使用 cin "as a parameter"
- 如何从映射中获取值并在 C++ 的 switch 语句中使用它
- 如何在COUT语句中使用移动运算符
- 在其声明的同一语句中使用指针
- 如何在开关语句中使用成员变量
- 为什么我不能在我的三元表达式中使用 return,但我可以在常规的 if-else 语句中使用?
- 我们可以在if语句中使用三元运算符
- MySQL准备的语句未使用C 连接器在无限环中清理