首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qtsql中的参数计数失配

Qtsql中的参数计数失配
EN

Stack Overflow用户
提问于 2016-11-16 16:08:48
回答 1查看 2.1K关注 0票数 3

我试图将数据插入到QtSql数据库中,但是我一直收到错误:

代码语言:javascript
复制
"Parameter count mismatch"

我做错了什么?

代码语言:javascript
复制
#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";
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 17:41:38

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

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

代码语言:javascript
复制
#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语句行,您的问题中也会出现同样的错误:

代码语言:javascript
复制
" Parameter count mismatch"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40636862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档