作者:胡龙云积极_622 | 来源:互联网 | 2023-02-13 04:30
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");