• 3689阅读
  • 10回复

[提问]我这个数据库操作哪里错了?怎么改了好多次了还是数据库表创建失败 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2016-04-13

    QCoreApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("easybook-3313b0");          //设置数据主机名
    db.setDatabaseName("qtDB.db");              //设置数据库名
    db.setUserName("zhouhejun");                //设置数据库用户名
    db.setPassword("123456");                   //设置数据库密码
    db.open();                                     //打开连接

    //创建数据库表
    QSqlQuery query;
    bool success=query.exec("create table automobil(id int primary key,attribute varchar,type varchar,kind varchar,nation int,carnumber int,elevaltor int,distance int,oil int,temperature int)");
    if(success)
        qDebug()<<QObject::tr("数据库表创建成功!\n");
    else
        qDebug()<<QObject::tr("数据库表创建失败!\n");
    qDebug()<<success;

    //查询
    query.exec("select * from automobil");
    QSqlRecord rec = query.record();
    qDebug() << QObject::tr("automobil表字段数:" )<< rec.count();

    //插入记录
    QTime t;
    t.start();
    query.prepare("insert into automobil values(?,?,?,?,?,?,?,?,?,?)");

    long records=10;
    for(int i=0;i<records;i++)
    {
        query.bindValue(0,i);
        query.bindValue(1,"四轮");
        query.bindValue(2,"轿车");
        query.bindValue(3,"富康");
        query.bindValue(4,rand()%100);
        query.bindValue(5,rand()%10000);
        query.bindValue(6,rand()%300);
        query.bindValue(7,rand()%200000);
        query.bindValue(8,rand()%52);
        query.bindValue(9,rand()%100);

        success=query.exec();
        if(!success)
        {
            QSqlError lastError=query.lastError();
            qDebug()<<lastError.driverText()<<QString(QObject::tr("插入失败"));
        }
    }
    qDebug()<<QObject::tr("插入 %1 条记录,耗时:%2 ms").arg(records).arg(t.elapsed());

    //排序
    t.restart();
    success=query.exec("select * from automobil order by id desc");
    if(success)
        qDebug()<<QObject::tr("排序 %1 条记录,耗时:%2 ms").arg(records).arg(t.elapsed());
    else
        qDebug()<<QObject::tr("排序失败!");

    //更新记录
    t.restart();
    for(int i=0;i<records;i++)
    {
       query.clear();
       query.prepare(QString("update automobil set attribute=?,type=?,"
                             "kind=?,nation=?,"
                             "carnumber=?,elevaltor=?,"
                             "distance=?,oil=?,"
                             "temperature=? where id=%1").arg(i));

       query.bindValue(0,"四轮");
       query.bindValue(1,"轿车");
       query.bindValue(2,"富康");
       query.bindValue(3,rand()%100);
       query.bindValue(4,rand()%10000);
       query.bindValue(5,rand()%300);
       query.bindValue(6,rand()%200000);
       query.bindValue(7,rand()%52);
       query.bindValue(8,rand()%100);

       success=query.exec();
       if(!success)
       {
           QSqlError lastError=query.lastError();
           qDebug()<<lastError.driverText()<<QString(QObject::tr("更新失败"));
       }
    }
运行后的结果如图:

只看该作者 1楼 发表于: 2016-04-13
各位大牛神人指点指点
离线XChinux

只看该作者 2楼 发表于: 2016-04-14
截图告诉你了,数据库没连接上。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yanwuyue

只看该作者 3楼 发表于: 2016-04-14
mysql对应的应该是ip地址吧,本地应该是127.0.0.1
离线yanwuyue

只看该作者 4楼 发表于: 2016-04-14
db.open();这句都没过

只看该作者 5楼 发表于: 2016-04-14
回 XChinux 的帖子
XChinux:截图告诉你了,数据库没连接上。 (2016-04-14 08:06) 

怎么解决,要怎么连接?

只看该作者 6楼 发表于: 2016-04-14
回 yanwuyue 的帖子
yanwuyue:mysql对应的应该是ip地址吧,本地应该是127.0.0.1 (2016-04-14 08:21) 

不行啊,改了还是没有打开
离线yanwuyue

只看该作者 7楼 发表于: 2016-04-14
db.setHostName("easybook-3313b0");          //设置数据库主机名
db.setDatabaseName("qtDB.db");              //设置数据库名

应该是这两句问题,数据库主机这样不知道行不行,一般用ip,还有端口问题,
数据库名应该没有带db的吧


只看该作者 8楼 发表于: 2016-04-14
回 yanwuyue 的帖子
yanwuyue:db.setHostName("easybook-3313b0");          //设置数据库主机名
db.setDatabaseName("qtDB.db");              //设置数据库 .. (2016-04-14 14:28) 

嗯嗯解决了,但是新的问题又来了,就是插入数据是总是失败是我插入数据query.bindvalue()哪里错了吗?
离线XChinux

只看该作者 9楼 发表于: 2016-04-14
回 小白修炼中 的帖子
小白修炼中:嗯嗯解决了,但是新的问题又来了,就是插入数据是总是失败是我插入数据query.bindvalue()哪里错了吗? (2016-04-14 18:51) 

query.exec()返回false的话,调用qDebug() << query.lastError().text()看下SQL错误信息。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yl19823442

只看该作者 10楼 发表于: 2016-04-15
QSqlQuery query(db); 试一下,我以前遇到过,传入一个构造参数就好了。
快速回复
限100 字节
 
上一个 下一个