QSqlDatabase 使用小结,解决部分数据库操作导致程序崩溃的办法

本文总结了QSqlDatabase在处理多个数据库连接时遇到的问题及解决方案。当不设置特定的连接名称时,多个连接可能操作同一数据库导致程序崩溃。QSqlDatabase的addDatabase函数允许设置连接名称,确保每个连接独一无二。移除数据库连接时,必须使用removeDatabase并传入正确的连接名称,防止资源泄漏和错误。此外,分享了一个改造过的SqliteDB类,用于更好地管理和操作SQLite数据库。

这两天都在为 QSqlDatabase 类头疼   因为涉及多个连接  连接到同一个数据库     而又没有对各个连接设置名称  网上大部分简易教程都是采用默认数据库连接名称   这样就会导致在对其中一个数据库连接进行操作时  影响到其它数据连接的操作(其实本质上他们是同一个连接)      因为我采用多文档窗体在各个窗体处理不同的数据连接  所以移除或者改变一个连接  也会导致其它连接跟着受到影响     直接导致了程序假死崩溃 

 

 

本来毫无头绪  不知道个所以然        参照前辈的文章来写程序  也没翻看相应的文档解释    导致头大了两天   唉

 

 

现在贴出文档的部分信息

 

 

以上是addDatabase的说明        第一个是连接数据库的类型   第二个是连接名称   如果我们直接采用

这样的形式进行设置实例的话    那么此时连接的名称是qt的默认数据连接名称    当然这就是导致多个连接实例操作同一个数据库出错的根源所在   

所以我们必须采用下面这样的形式进行连接数据库

currentConnName必须与其它实例不相同  不然也会导致多个连接操作出错

警告信息已经说的很清楚

 

如果使用的连接名称已经存在   则先前那个连接将被替换掉。

 

 

 

再看看removedatabase

 

 

这里removedatabase也必须传入相应要移除的连接名称          如果有先前多个连接采用默认的数据连接名称  或者是相同的名称      不管你移除哪个连接(实际上是同一个)  都会导致程序出错

移除前  需要将该连接上取得的数据 资源释放掉  不然将可能导致内存泄漏 

 

 

非默认连接名称的QSqlDatabase实例   在使用query  或者model进行操作的时候     实例化query或者model都必须设置使用的QSqldatabase    其实就是设置连接名称

形如如下所示  

 

或者

 

 

 

 

 

 

 

 

 

 

其实也是一知半解         下面贴一下改造过的数据库连接类

h文件

 

cpp文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值