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

qt mysql 多线程

3
回复
5919
查看
 关闭 [复制链接]
累计签到:4 天
连续签到:1 天
来源: 2013-10-12 15:17:40 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

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

x
我在程序里面这样写:
  1. QSqlQuery query(db);
  2.       query.exec(QObject::tr("select id from ib_sensors where dtu_id = %1;").arg(dtumac));//根据dtu发送的来的数据,可以先得到此dtu的号码,数据库已经做好关联,这个sensor_id---bridge_id---dtumac-......
  3.     while(query.next())//查询成功
  4.     {
  5.         sensor_id = query.value(0).toInt();
  6.         qDebug()<<"sensor_id"<<sensor_id<<endl;//此处运行正常,两个sensor_id 全部输出
  7.     }
  8.     int rowNum = query.size();
  9.     qDebug()<<"rowNum"<<rowNum<<endl;//输出2,对着呢

  10.     for(int i =0 ;i<rowNum ; i++)//我本意是根据得到的sensor_id查询数据库对应的sensor的信息,如sensor的mac,bridge——id;得到这些后 进行发送命令,或者存储得到的这些信息
  11.     {
  12.         QSqlQuery query1(db);
  13.         query1.seek(i);
  14.         QSqlRecord record = query1.record();
  15.         sensor_id = record.value("id").toInt();
  16.         qDebug()<<"sensor_id2"<<sensor_id<<endl;

  17.         //获得传感器所属的bridge_id
  18.         query1.exec(QObject::tr("select bridge_id from ib_sensors where id = %1;").arg(sensor_id));
  19.         bridgeid =  query1.value(0).toInt();
  20.         qDebug()<<"bridgeid"<<bridgeid<<endl;//得到这个sensor属于哪一个bridge;
复制代码
sensor_id 10
rowNum 2
sensor_id2 12
QSqlQuery::value: not positioned on a valid record  bridgeid 0
QSqlQuery::value: not positioned on a valid record    m_mac ""
Segmentation fault (core dumped)
(咦,上面这是咋回事,一行行的,好吧,先不管,说正事)
有人说,for循环应该换一个query,如query1之类的,但是还是不行,我个人觉得吧,我在dtumac对应一个sensor的时候,没有for循环,所有的一切好得很,收到dtumac,得到关联的mac,写进查询命令,得到查询的数据,解析并写进数据库,这一套都好着。之所以这样,是不是和多线程有关系,这个我看了亚飞的书,还看了还几遍,可惜我愚笨,用起来还是不熟悉,或者还有的问题??请大家帮忙看看



回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-12 15:20:25 显示全部楼层
这个论坛弄的发帖这个不是很好,我在啰嗦一下,sensor_id 10
rowNum 2
sensor_id2 12
QSqlQuery::value: not positioned on a valid record  bridgeid 0
QSqlQuery::value: not positioned on a valid record    m_mac ""
Segmentation fault (core dumped)
这些是在linux-centos下运行后的结果。我理解的是内存越界、
回复 支持 反对

使用道具 举报

尚未签到

2013-10-13 12:34:13 显示全部楼层
下面是我的理解,不知道对不对,仅供参考。
你第十三行新建大的query1根本就没有执行任何一条exec语句,当然啥都没有,更不能进行seek()query1和你第一行建的query变量没有一点儿关系。
为啥你不直接使用开头定义的query后面还要再新建一个query1呢?

点评

我试过了 那样不行 后来参考别人的意见改成这样  详情 回复 发表于 2013-10-14 09:28
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-10-14 09:28:20 显示全部楼层
imthypal 发表于 2013-10-13 12:34
下面是我的理解,不知道对不对,仅供参考。
你第十三行新建大的query1根本就没有执行任何一条exec语句,当 ...

我试过了 那样不行   后来参考别人的意见改成这样
回复 支持 反对

使用道具 举报

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

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