Qt 5 与 SQLite : bindValue() results in "Parameter count mismatch" error

标签 qt sqlite qt5 qtsql qsqlquery

我正在使用 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是正确的。

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

目前尚不清楚为什么这样的查询在 Qt 4.8.5 上运行良好,或者为什么在使用位置参数(使用 ? 占位符)时它们在 Qt 5.3.1 上运行良好,而在命名参数(使用 : 占位符)。

关于Qt 5 与 SQLite : bindValue() results in "Parameter count mismatch" error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684550/

相关文章:

java - 可以使用静态 "database helper"类吗?

Android SQLiteHelper问题

android - 应用程序在模拟器上工作就像一个魅力,而在 android 设备中强制关闭

c++ - 如何在我的代码中使用createWindow [Qt5.8]

python - PyQt:如何找到适用于 Ubuntu Unity 的菜单文本颜色?

绘制基本图形的QT应用

qt - Qt 设计器中的 QStackedLayout

android - Qt QML for Android 错误

qt - 在 QTableWidget 中拖放行

c++ - Qt Designer,上下文菜单中缺少 "go to slot"?