Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QSqlQuery中重用准备好的语句?_C++_Sql_Qt_Prepared Statement_Qsqlquery - Fatal编程技术网

C++ 如何在QSqlQuery中重用准备好的语句?

C++ 如何在QSqlQuery中重用准备好的语句?,c++,sql,qt,prepared-statement,qsqlquery,C++,Sql,Qt,Prepared Statement,Qsqlquery,因此,使用(和重用)准备好的语句的部分目的是数据库驱动程序执行更少的工作。来自Perl,我习惯于准备SQL查询并存储对该查询的引用,以便以后可以绑定一些值并在必要时多次执行查询 用Qt C++(Qt 5.1),我尝试这样做: class MyClass { [...] QSqlDatabase db; QSqlQuery insert_query; }; MyClass::MyClass() {

因此,使用(和重用)准备好的语句的部分目的是数据库驱动程序执行更少的工作。来自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
    }
错误:没有匹配的成员函数用于调用“bindValue”

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


但是我想在MyClass构造函数之外的准备好的查询中绑定新值。我发现了,但我怀疑这是cargo cult,因为如果
“query”
保持不变(即使
QSqlQuery
对象不同),那么多次调用
QSqlQuery::prepare(“query”)
实际上就是一个noop。有些司机是这样吗?否则,我错过了什么?我应该如何重用准备好的查询?

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

改变

void MyMeth(QString firstname, QString lastname) const;


答对 了我错过了这个,因为我忘了我在一个继承了const的重写方法中。我需要在另一个我控制签名的方法中绑定这些值。
void MyMeth(QString firstname, QString lastname);