这两天都在为 QSqlDatabase 类头疼 因为涉及多个连接 连接到同一个数据库 而又没有对各个连接设置名称 网上大部分简易教程都是采用默认数据库连接名称 这样就会导致在对其中一个数据库连接进行操作时 影响到其它数据连接的操作(其实本质上他们是同一个连接) 因为我采用多文档窗体在各个窗体处理不同的数据连接 所以移除或者改变一个连接 也会导致其它连接跟着受到影响 直接导致了程序假死崩溃
本来毫无头绪 不知道个所以然 参照前辈的文章来写程序 也没翻看相应的文档解释 导致头大了两天 唉
现在贴出文档的部分信息
以上是addDatabase的说明 第一个是连接数据库的类型 第二个是连接名称 如果我们直接采用
这样的形式进行设置实例的话 那么此时连接的名称是qt的默认数据连接名称 当然这就是导致多个连接实例操作同一个数据库出错的根源所在
所以我们必须采用下面这样的形式进行连接数据库
currentConnName必须与其它实例不相同 不然也会导致多个连接操作出错
警告信息已经说的很清楚
如果使用的连接名称已经存在 则先前那个连接将被替换掉。
再看看removedatabase
这里removedatabase也必须传入相应要移除的连接名称 如果有先前多个连接采用默认的数据连接名称 或者是相同的名称 不管你移除哪个连接(实际上是同一个) 都会导致程序出错
移除前 需要将该连接上取得的数据 资源释放掉 不然将可能导致内存泄漏
非默认连接名称的QSqlDatabase实例 在使用query 或者model进行操作的时候 实例化query或者model都必须设置使用的QSqldatabase 其实就是设置连接名称
形如如下所示
或者
其实也是一知半解 下面贴一下改造过的数据库连接类
h文件
cpp文件
本文总结了QSqlDatabase在处理多个数据库连接时遇到的问题及解决方案。当不设置特定的连接名称时,多个连接可能操作同一数据库导致程序崩溃。QSqlDatabase的addDatabase函数允许设置连接名称,确保每个连接独一无二。移除数据库连接时,必须使用removeDatabase并传入正确的连接名称,防止资源泄漏和错误。此外,分享了一个改造过的SqliteDB类,用于更好地管理和操作SQLite数据库。
2288





