Qtsql中的参数计数不匹配

Parameter count mismatch in Qtsql

本文关键字:不匹配 参数 Qtsql      更新时间:2023-10-16

我正试图将数据插入QtSql数据库,但我一直得到错误:

"Parameter count mismatch"

我做错了什么?

#include <QtSql>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << QSqlDatabase::drivers();
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("LOCALHOST");
    db.setDatabaseName("people");
    db.setUserName("root");
    db.setPassword("");
    if(db.open()) {
        qDebug() << "Opened!";
        QSqlQuery query;
        query.prepare("INSERT INTO person (id, forename, surname) "
                      "VALUES (:id, :forename, :surname)");
        query.bindValue(":id", 1001);
        query.bindValue(":forename", "Bart");
        query.bindValue(":surname", "Simpson");
        query.exec();
        if( !query.exec() )
            qDebug() << query.lastError().text();
        else
            qDebug( "Inserted!" );
        db.close();
    } else {
        qDebug() << "Not opened";
    }
}

数据库中没有名为person的表。您正在尝试向一个不存在的表中插入值。


我认为错误信息是错误的。但无论如何,我在代码中添加了CREATE语句,以便在INSERT语句执行之前创建表:

#include <QtSql>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":memory:");
    if(!db.open()){
        qDebug() << "Not opened";
        return 1;
    }
    qDebug() << "Opened!";
    QSqlQuery query;
    //CREATE the table before executing the INSERT statement
    query.exec("CREATE TABLE person (id INTEGER, forename TEXT, surname TEXT);");
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (:id, :forename, :surname)");
    query.bindValue(":id", 1001);
    query.bindValue(":forename", "Bart");
    query.bindValue(":surname", "Simpson");
    if( !query.exec() )
        qDebug() << query.lastError().text();
    else
        qDebug( "Inserted!" );
    return 0;
}

现在打印Inserted!。但是,如果我注释掉CREATE语句行,我在你的问题中得到同样的错误:

" Parameter count mismatch"