• 11485阅读
  • 4回复

[提问]Qt多线程访问数据库的问题 [复制链接]

上一主题 下一主题
离线cyc610
 

只看楼主 倒序阅读 楼主  发表于: 2015-04-14
敬请各位帮忙解决:
纠结好久的问题了,Qt多线程访问SQLite数据库时出现数据锁定的问题:
出错信息:
QSqlError("5", "Unable to execute statement", "database is locked")
具体程序源代码,请看附件。
该程序所采用的思路:  http://www.linuxjournal.com/article/9602?page=0,1    List2里面例子里的思路。
在数据库插入和检索部分加互斥锁可以解决问题,但是对我不实用,因为我另外一个程序,主线程用了模型,代理,视图来实现界面部分,子线程实现对数据库的内容填充及修改操作,如果用QMutex,不知道该如何实现。
非常期待能够得到你的帮助,谢谢!
如果你不想下载附件,程序源代码也可以到这里看:http://www.pastie.org/10091382

描述:main.cpp
附件: main.cpp (2 K) 下载次数:14
描述:querydb.cpp
附件: querydb.cpp (2 K) 下载次数:17
描述:querydb.h
附件: querydb.h (1 K) 下载次数:12
描述:TestDataBase.pro
附件: TestDataBase.pro (1 K) 下载次数:13
离线圣域天子

只看该作者 1楼 发表于: 2015-04-15
我在处理高并发的时候,每个线程针对同一个数据库操作时,都分别是不同的Connection,这样操作从来没出现过问题,用的是mssql和pgsql数据库
离线cyc610

只看该作者 2楼 发表于: 2015-04-16
回 圣域天子 的帖子
圣域天子:我在处理高并发的时候,每个线程针对同一个数据库操作时,都分别是不同的Connection,这样操作从来没出现过问题,用的是mssql和pgsql数据库 (2015-04-15 16:58) 

我也是每个线程创建一个数据库连接,用的是Qt内置的SQLite数据库。
你用的MySQL里每个线程里面不用加锁吗?如果不用加锁的话,我就把数据库改成MySQL。
离线圣域天子

只看该作者 3楼 发表于: 2015-04-16
回 cyc610 的帖子
cyc610:我也是每个线程创建一个数据库连接,用的是Qt内置的SQLite数据库。
你用的MySQL里每个线程里面不用加锁吗?如果不用加锁的话,我就把数据库改成MySQL。 (2015-04-16 16:16) 

我用的是mssql和pgsql数据库 !!
离线cyc610

只看该作者 4楼 发表于: 2015-04-16
回 圣域天子 的帖子
圣域天子:我用的是mssql和pgsql数据库 !! (2015-04-16 16:47) 

好的,我也用MySQL试试,非常感谢你的帮助。
快速回复
限100 字节
 
上一个 下一个