• 2921阅读
  • 5回复

[提问]为什么总是插入数据错误,代码哪里错了 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-14
#include <QCoreApplication>
#include <QTextCodec>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlRecord>
#include <QTime>
#include <QSqlError>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv); //创建一个Qt应用程序对象app
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());    //设置中文显示
    QSqlDatabase db10 = QSqlDatabase::addDatabase("QSQLITE");
    db10.setHostName("127.0.0.1");    //设置数据主机名
    db10.setDatabaseName("qtDB8.db");  //设置数据库名称
    db10.setUserName("user");     //设置用户名
    db10.setPassword("root");     //设置密码
    db10.open();      //连接数据库

    //创建数据库表
    QSqlQuery   query5;
    query5 = QSqlQuery(db10);
    bool success = query5.exec("create table automobile(id int primary key,attribute varchar(20),type varchar(20),kind varchar(20),nation int,carnumber int,elevator int,distance int,oil int,temperature int)");
    if(success)
        qDebug()<<"创建数据库成功";
    else
        qDebug()<<"创建数据库失败";

    //查询
    query5.exec("select *from automobile");
    QSqlRecord rec = query5.record();    //声明一个sql记录对象将读取到的记录存放到rec该记录变量中
    qDebug()<<QObject::tr("automobile表字段数:")<< rec.count();

    //插入记录
    QTime t;
    t.start();  //启动一个计时器,统计操作耗时
    query5.prepare("insert into sutomobile values(?,?)");
    long records = 10; //向表中插入任意的100条记录
    for(int i=0;i<records;i++)
    {
        query5.bindValue(i,i);   //绑定要插入的值,也可调用函数addBindValue()
        query5.bindValue(1,"四轮");
        query5.bindValue(2,"轿车");
        query5.bindValue(3,"富康");
        query5.bindValue(4,qrand()%100);
        query5.bindValue(5,qrand()%10000);
        query5.bindValue(6,qrand()%300);
        query5.bindValue(7,qrand()%200000);
        query5.bindValue(8,qrand()%52);
        query5.bindValue(9,qrand()%100);
        success = query5.exec();
        if(!success)
        {
            QSqlError lastError = query5.lastError();
            qDebug()<<lastError.driverText()<<QString(QObject::tr("插入失败"));
        }
    }
    qDebug()<<QObject::tr("插入 %1 条记录,耗时 %2 ms").arg(records).arg(t.elapsed());


    return a.exec();
}
本帖提到的人: @XChinux @lifengjz @q洁士铭

只看该作者 1楼 发表于: 2016-04-14
难道不是用bindValue()插入数据码?
离线z_墨脱

只看该作者 2楼 发表于: 2016-04-14
bindValue 第一个参数应该字段名把

只看该作者 3楼 发表于: 2016-04-14
回 z_墨脱 的帖子
z_墨脱:bindValue 第一个参数应该字段名把 (2016-04-14 14:23) 

试过 了,还是报错插入数据失败。

只看该作者 4楼 发表于: 2016-04-14
哪个大神可以帮我解决一个问题呀?小弟感激不尽,纠结了好几天了。

只看该作者 5楼 发表于: 2016-04-14
解决了,
query5.prepare("insert into sutomobile values(?,?)");少了几个占位符,
快速回复
限100 字节
 
上一个 下一个