找回密码
 立即注册
收起左侧

关于Qt4和MySQL连接测试问题

10
回复
8655
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2014-5-20 17:07:49 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 snyanglq 于 2014-5-20 17:11 编辑

安装了MySQL驱动后写了个程序进行测试,数据库倒是能连接了,但是要输出表中的数据的时候输出不了,query.next为false.请问这个问题要如何解决,这个程序我在Linux平台下是没有问题的。
具体程序如下:

#ifndef CONNECTDATABASE_H#define CONNECTDATABASE_H#include <QSqlDatabase>#include <QString>#include <QDebug>#include <QSqlQuery>#include <QVariant>#include <QSqlRecord>#include <QtSql>
bool connectiondatabase(){    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");    db.setHostName("localhost");    db.setDatabaseName("Student");    db.setUserName("root");    db.setPassword("*******");    if(db.open())    {        qDebug() << "database is established!";    }    else    {        qDebug() << "build error!";        return false;    }    QSqlQuery query;    query.exec(QObject::tr("create table Student(sno varchar(10) not null primary key,sname varchar(20) not null,sclass varchar(10) not null)"));    query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009001','lilei','0901')"));    query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009002','lucy','0902')"));    query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009003','mike','0903')"));    query.exec("select * from Student");    qDebug()<<"sno\tsname\tsclass";    while(query.next())    {        qDebug() << query.value(0).toString()<< "\t"<<query.value(1).toString() << "\t" << query.value(2).toString();    }    return true;}#endif // CONNECTDATABASE_H
运行结果如下:

database is established!
sno        sname        sclass



----------------------------------------------------------------

后面就没有了,一直定在哪里,没有显示出之前插入的参数,请问是什么原因?求解。。。。


最佳答案

查看完整内容

因为我的数据库密码为空,仅用来测试的,,应该和这个密码是无关的!
回复

使用道具 举报

累计签到:157 天
连续签到:1 天
2014-5-20 17:07:50 显示全部楼层
snyanglq 发表于 2014-5-21 10:35
你上面这种编法是不是不用数据库登录密码
db.setHostName("127.0.0.1");
    db.setPort(3306);

因为我的数据库密码为空,仅用来测试的,,应该和这个密码是无关的!
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-20 17:09:11 显示全部楼层
本帖最后由 snyanglq 于 2014-5-20 17:11 编辑

额,程序好乱,再发一遍
  1. #ifndef CONNECTDATABASE_H
  2. #define CONNECTDATABASE_H

  3. #include <QSqlDatabase>
  4. #include <QString>
  5. #include <QDebug>
  6. #include <QSqlQuery>
  7. #include <QVariant>
  8. #include <QSqlRecord>
  9. #include <QtSql>

  10. bool connectiondatabase()
  11. {
  12.     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

  13.     db.setHostName("localhost");
  14.     db.setDatabaseName("Student");
  15.     db.setUserName("root");
  16.     db.setPassword("*******");

  17.     if(db.open())
  18.     {
  19.         qDebug() << "database is established!";
  20.     }
  21.     else
  22.     {
  23.         qDebug() << "build error!";
  24.         return false;
  25.     }

  26.     QSqlQuery query;

  27.     query.exec(QObject::tr("create table Student(sno varchar(10) not null primary key,sname varchar(20) not null,sclass varchar(10) not null)"));
  28.     query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009001','lilei','0901')"));
  29.     query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009002','lucy','0902')"));
  30.     query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009003','mike','0903')"));

  31.     query.exec("select * from Student");
  32.     qDebug()<<"sno\tsname\tsclass";

  33.     while(query.next())
  34.     {
  35.         qDebug() << query.value(0).toString()<< "\t"<<query.value(1).toString() << "\t" << query.value(2).toString();
  36.     }

  37.     return true;

  38. }

  39. #endif // CONNECTDATABASE_H
复制代码
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-20 17:09:47 显示全部楼层
运行结果如下:

database is established!
sno        sname        sclass
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-20 17:10:33 显示全部楼层
没有输出之前插入表中的数据
回复

使用道具 举报

累计签到:157 天
连续签到:1 天
2014-5-20 21:36:40 显示全部楼层
你的代码这样写有问题吧?31行的那里   QSqlQuery query;你都没把你的QSqlDatabase 扔进去给它。它执行的那些sql会成功吗???
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-21 09:06:19 显示全部楼层
修罗 发表于 2014-5-20 21:36
你的代码这样写有问题吧?31行的那里   QSqlQuery query;你都没把你的QSqlDatabase 扔进去给它。它执行的那 ...

你是说31行改为QSqlQuery query(db);这样吗?我改了也不行啊,运行结果跟之前的一样。还有就是这程序原先我在Linux平台下可以运行啊,完全没有问题,就是windows下不知道问题出在哪里了
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-21 09:09:11 显示全部楼层
刚刚添加了个输出,发现query.next的输出为FALSE,是不是说明我的数据没有插进去?
回复

使用道具 举报

累计签到:157 天
连续签到:1 天
2014-5-21 10:11:28 显示全部楼层
  1. int main(int argc,char** argv)
  2. {
  3.     QApplication app(argc,argv);
  4.     QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
  5.     db.setHostName("127.0.0.1");
  6.     db.setPort(3306);
  7.     db.setDatabaseName("student");
  8.     db.setUserName("root");
  9.     if(!db.open()){
  10.         QMessageBox::warning(NULL,"warning!","failure");
  11.     }else{
  12.         QMessageBox::information(NULL,"OK!","success!");
  13.     }
  14.     QSqlQuery query;

  15.     query.exec(QObject::tr("create table Student(sno varchar(10) not null primary key,sname varchar(20) not null,sclass varchar(10) not null)"));
  16.     query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009001','lilei','0901')"));
  17.     query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009002','lucy','0902')"));
  18.     query.exec(QObject::tr("insert into Student(sno,sname,sclass) values('2009003','mike','0903')"));

  19.     query.exec("select * from Student");
  20.     qDebug()<<"sno\tsname\tsclass";

  21.     while(query.next())
  22.     {
  23.             qDebug() << query.value(0).toString()<< "\t"<<query.value(1).toString() << "\t" << query.value(2).toString();
  24.     }

  25.     return app.exec();
  26. }
复制代码
我这里vs2008+qt4.8.2运行是可以查询出刚刚插入的数据,附上图片给您看,那个query那里不用扔进QSqlDatabase都可以,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-21 10:33:31 显示全部楼层
修罗 发表于 2014-5-21 10:11
我这里vs2008+qt4.8.2运行是可以查询出刚刚插入的数据,附上图片给您看,那个query那里不用扔进QSqlDatabas ...

嗯嗯,谢谢你的回复!刚刚我在另外一台机子上试验了一下,终于找到原因了,原来都是杀毒软件惹的祸,我的程序在另外一台机子能运行,后来回到我的机子再度对照排查,发现每次运行时弹出个程序阻止窗口,虽然我每次都选择允许了,但是还是不行。我想了一下把百度杀毒退出了,竟然可以了,万分郁闷。。。。
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-5-21 10:35:30 显示全部楼层
修罗 发表于 2014-5-21 10:11
我这里vs2008+qt4.8.2运行是可以查询出刚刚插入的数据,附上图片给您看,那个query那里不用扔进QSqlDatabas ...

你上面这种编法是不是不用数据库登录密码
db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("student");
    db.setUserName("root");

点评

因为我的数据库密码为空,仅用来测试的,,应该和这个密码是无关的!  详情 回复 发表于 2014-5-21 10:48
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了