• 12662阅读
  • 6回复

QT MYSQL插入数据老是失败,大侠帮忙看看。 [复制链接]

上一主题 下一主题
离线demowolf
 

只看楼主 正序阅读 楼主  发表于: 2009-02-08
QT MYSQL插入数据老是失败,大侠帮忙看看。
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
    db.setHostName("192.168.1.106");
    db.setDatabaseName("mydb"); // 我们之前建立的数据库
    db.setUserName("root"); // 我们创建的 yunfan 用户名
    db.setPassword("1234"); // yunfan 用户的密码
    bool ok = db.open(); // 尝试连接数据库
    if(ok)
    {
        qWarning("ok");
    }
    else
    {
        qWarning("not ok");
        return;
    }

QSqlQuery query;
    query.prepare("insert into `UserInfo`(`id`,`name`,`sexual`,`province`,`city`,`age`,`qq`,`email`,`comment`,`msn`,`phone`) values ( '3','fdasd','1','jiangsu','nanjing','18','11007732','kof@126.com','fdsafdsafadsf','jiang@hotmail.com','15902144076');");
    query.exec();
    while(query.next())
    {
    db.close();
    }

大家帮忙看看,我想一次性插入很多条数据到一个表里面。可是我在MYSQL的GUI管理程序里,发现的LOG如下:
update `UserInfo` set `id`='1',`name`='Bart',`sexual`='1',`province`='2',`city`=NULL,`age`=NULL,`qq`=NULL,`email`=NULL,`comment`=NULL,`msn`=NULL,`phone`=NULL where `id`='1';

也就是说,他只插入了前面的3个值,这是为什么啊?上面的执行语句,也是我先GUI编辑,然后把对应的SQL语句复制下来的,SQL语句应该没有问题。

还有就是,我试着改插入数据的内容,可是我每次改,都没效果,每次执行,都是把第一次插入的3个数值的内容插进去了,我改内容,好歹他也跟着改那3个内容啊,可是却不改。可急死我了。

大侠帮忙解决啊
离线wd007

只看该作者 6楼 发表于: 2009-02-17
                呵呵,学习一下,   
QtCreator还是测试版,可能会有问题。我觉得你也可以向NOKIA反馈这个bug,也是做了贡献了
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线demowolf

只看该作者 5楼 发表于: 2009-02-15
感谢楼上各位的支持。我终于弄好了。
我的环境是UBUNTU 8.04 + QT4.3.5+QTCREATEOR,

事实证明是QTCREATOR偶然出现的BUG,就是clean all时候会失败,结果导致我每次执行的,都是第一次创建的QUERY.呵呵。很傻的找了很久原因,后来把QWARNING关闭,居然还会打印老的LOG,后来才发现。

谢谢各位了。
离线weizhy
只看该作者 4楼 发表于: 2009-02-13
我觉得你使用QSqlQuery的方式错了,按照你说的意思,你只需要使用使用
QSqlQuery::exec(const QString& strSql)
就可以了

如果你要使用prepare,这个函数是为了插入多条数据使用的,而不是执行一条数据的插入
正确的使用方式为:先使用prepare构建一个插入模式,其中具体的数据都不是像你做的那样在prepare函数里写出的,也就是说其参数只是一个格式,其中的数据是按位置记录符号的,你可以再看看assistant中QSqlQuery类prepare方法的示例代码段就知道了

这与是不是使用mysql没有关系

再说,你的LOG中写的是update,也不是insert啊,这个让我很混乱,不知道你要说什么了

另外,你如果只是做插入的话,不需要使用 while(query.next())这样的语句,只要query.exec(strSql)返回true就好了

这是我在做工程中间的体会,你权当参考好了,有问题大家一起讨论
离线wd007

只看该作者 3楼 发表于: 2009-02-13
我不太清楚mysql的情况,它可以设置主键吗?
如果可以,你试试增加几个键作为主键,看看有没有数据写进去
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
离线demowolf

只看该作者 2楼 发表于: 2009-02-12
回楼上的,控制台里都OK的语句,复制过来的。
离线wd007

只看该作者 1楼 发表于: 2009-02-10
把语句放到sql控制台试一下,看看输出情况
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个