Qt 5与SQLite:bindValue()导致“参数计数不匹配”错误

我正在使用SQLite驱动程序在
Windows 7上使用Qt 5.3.1(64位)进行简单的参数化查询.当我使用bindValue()来设置查询的单​​个参数的值时,我系统地得到了可怕的“参数计数不匹配”错误.当我使用addBindValue()时,一切正常.请注意,使用bindValue()的代码可以与Qt 4.8.5(64位)一起使用.

这是完整的代码(main.cpp):

#include <QtSql>

int main(int, char* [])
{
    auto db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("db.sqlite");
    db.open();

    {
        QSqlQuery query("CREATE TABLE IF NOT EXISTS hashes (filepath TEXT, modified INTEGER, hash TEXT)", db);
        query.exec();
    }

    QSqlQuery query("SELECT modified FROM hashes WHERE filepath = :fp", db);
    query.bindValue(":fp", "test.jpg");

    if (!query.exec())
        qDebug() << query.lastError();

    db.close();

    return 0;
}

QtCreator项目文件(qtsqltest.pro):

QT += core sql
TARGET = qtsqltest
TEMPLATE = app
SOURCES += main.cpp

我的机器上的程序输出:

QSqlError("", "Parameter count mismatch", "")

任何的想法?

最佳答案 我刚刚发现我的问题是
this one的重复,而
corresponding answer是正确的.

事实证明,传递给QSqlQuery构造函数的查询字符串会立即执行,如documentation所示.

目前尚不清楚为什么这些查询在Qt 4.8.5中正常工作,或者为什么它们在使用位置参数(使用?占位符)时使用Qt 5.3.1,而它们在命名参数(使用:占位符)失败时使用.

点赞