• 10275阅读
  • 7回复

在程序中如何创建多个数据库会话,这些会话共用一个数据库连接 [复制链接]

上一主题 下一主题
离线searchcai
 

只看楼主 倒序阅读 楼主  发表于: 2013-08-03
在程序中如何创建多个数据会话,这些会话共用一个数据库连接?


数据库用的是MYSQL
现在情况是:用一个数据库连接来操作常规的业务操作(就是用户点按钮或菜单来进行的各类操作,实际是insert或select或update或delete操作);
                     另外还有一块是用定时器(大概5分钟)来去取数据库某张表的数据(实际上是做一个select操作)。


问题是:1、常规的业务操作和定时器操作会不会有冲突?
              2、在不另外创建一个数据库连接的情况下,有没有办法共用一个数据库连接,而用创建两个会话的方式?会话我是从网上看到的。
                    不知道QT和MYSQL里怎么做?
              3、有没有其他更好的处理思路?


谢谢!
在线XChinux

只看该作者 1楼 发表于: 2013-08-04
Qt中,同一个数据库会话(就叫QSqlDatabase吧),只能在创建它的线程中使用,所以,如果你这两个定时/常规操作是在同一个线程中的,并且使用同一个QSqlDatabase连接,那它是不会冲突的,因为必然是有先后顺序执行的.  

即使你将这两个定时/业务操作放到不同的线程中,每个线程在单独创建一个数据库连接,那也不一定能解决你的问题,在数据库里,该发生的冲突还要发生(比如你要操作一个数据表,此时可能你需要锁表,以防止其它事务也同时操作这个表).
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
在线XChinux

只看该作者 2楼 发表于: 2013-08-04
所以,你就直接只建一个QSqlDatabase连接,常规操作就可以了.定时器操作也使用这个QSqlDatabase连接. 同一个线程中,不会产生冲突,必然有先后顺序.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线searchcai

只看该作者 3楼 发表于: 2013-08-04
常规操作,你不知道用户什么时候点击按钮进行处理啊?
定时器的操作只是在后台轮询一张表的数据。
在线XChinux

只看该作者 4楼 发表于: 2013-08-04
引用第3楼searchcai于2013-08-04 16:42发表的  :
常规操作,你不知道用户什么时候点击按钮进行处理啊?
定时器的操作只是在后台轮询一张表的数据。

这有关系吗?你点击信号的处理,与定时器定时触发的处理,因为在同一个线程中,它们不可能同时进行,所以肯定是有先后顺序的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线searchcai

只看该作者 5楼 发表于: 2013-08-05
我对定时器理解错了。定时器不是线程。定时器还是在主线程里执行。
离线searchcai

只看该作者 6楼 发表于: 2013-08-05
谢谢版主。
离线foxgod

只看该作者 7楼 发表于: 2014-04-08
回 XChinux 的帖子
XChinux:这有关系吗?你点击信号的处理,与定时器定时触发的处理,因为在同一个线程中,它们不可能同时进行,所以肯定是有先后顺序的。
 (2013-08-04 17:25) 

多线程发病访问数据库,数据库查询结构乱码,单个线程是OK的。
快速回复
限100 字节
 
上一个 下一个