gpt4 book ai didi

c++ - 如何使用 QSqlQuery 重用准备好的语句?

转载 作者:行者123 更新时间:2023-11-30 04:14:25 24 4
gpt4 key购买 nike

因此,使用(和重用)准备好的语句的部分目的是数据库驱动程序执行更少的工作。来自 Perl,我习惯于准备 SQL 查询并存储对该准备好的查询的引用,以便我以后可以绑定(bind)一些值并执行查询,必要时可以执行多次。

使用 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
}

错误:没有匹配的成员函数来调用“bindValue”

注意:候选函数不可行:“this”参数的类型为“const QSqlQuery”,但方法未标记为 const

但我想在 MyClass 构造函数之外的准备好的查询中绑定(bind)新值。我找到了 this ,但我怀疑它是 cargo-cult,因为如果 "query" 保持不变,多次调用 QSqlQuery::prepare("query") 实际上是一个 noop (即使 QSqlQuery 对象不同)。某些驱动程序是这样吗?否则,我错过了什么?我应该如何重用准备好的查询?

最佳答案

您的编译器错误与 QSqlQuery 的重用性无关。您是否将 MyMeth 声明为 const?删除 const,它会阻止调用非常量 bindValue()。

改变

void MyMeth(QString firstname, QString lastname) const;

void MyMeth(QString firstname, QString lastname);

关于c++ - 如何使用 QSqlQuery 重用准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18948384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com