热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt-同时处理多个数据库连接

如何解决《Qt-同时处理多个数据库连接》经验,为你挑选了1个好方法。



1> RobbieE..:

您犯的第一个基本错误是数据库连接管理器是多余的。您要实现的目标已经内置在QtSql框架中。

当您创建QSqlDatabase带有QSqlDatabase::addDatabase该对象的新实例时,该对象会保留在Qt内部,直到您调用QSqlDatabase::removeDatabase。您无需保持与变量的连接。如果您需要访问它们之间的连接,只需调用QSqlDatabase::database

第二个基本错误是您connectionName与混淆connectionString

connectionName是您为连接赋予的任意名称,以在数据库连接的内部集合中将其标识为单独的唯一对象。可以将其视为变量名。

connectionString 是用于连接数据库引擎本身的一组指令,其中包含数据库名称,用户名,密码等。您似乎对此有所了解,因此我将不做进一步解释。

您可以在不指定数据库名称的情况下创建与数据库的连接,QtSql框架将创建一个匿名连接,该连接将用作您进行的任何调用的默认连接,而无需指定连接名称。

如果尝试创建第二个不带名称的连接,而默认连接已存在,则将强制第一个连接被销毁并由新连接替换。这是您收到该消息时发生的情况。

您的错误:

QSqlDatabase sqliteCOnnection= QSqlDatabase::addDatabase("QSQLITE");
sqliteConnection.setConnectionString("blah blah");

QSqlDatabase sqlServerCOnnection= QSqlDatabase::addDatabase("QODBC3"); // no name specified means overwrite default connection, generates warning message
sqlServerConnection.setConnectionString("blah blah");

您应该做什么:

QSqlDatabase sqliteCOnnection= QSqlDatabase::addDatabase("QSQLITE", "myUniqueSQLITEConnection");
sqliteConnection.setConnectionString("blah blah");

QSqlDatabase sqlServerCOnnection= QSqlDatabase::addDatabase("QODBC3", "myUniqueMSSQLConnection"); 
sqlServerConnection.setConnectionString("blah blah");

如前所述,这些连接将保留在QtSql内部,直到您致电为止QSqlDatabase::removeDatabase

为此:

QSqlDatabase myAlreadyExistingMSSqlCOnnection= QSqlDatabase::database("myUniqueMSSQLConnection");


推荐阅读
author-avatar
胡龙云积极_622
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有