在Qt中,有几个步骤需要完成,直到可以完成数据库访问。
第一步是按连接名称添加数据库:
QSqlDatabase::addDatabase("QMYSQL", connectionName);
在此之后,我可以使用open()
和close()
来打开/关闭相应的连接。
也可以使用以下调用删除该数据库:
QSqlDatabase::removeDatabase(connectionName);
我的应用程序经常这样做,因为它出于多种目的在并行进程中访问各种数据库。此外,它是一个服务器应用程序,可以运行很长时间而不会重新启动。
在我看来,很明显,由于可能存在的网络问题和服务器端的连接有限,始终保持连接打开是一个坏主意。
但是addDatabase()
呢?调用addDatabase()
而不直接调用removeDatabase()
之后(但仅在应用程序退出时(是否有任何危害或好处?还是始终直接配对这些呼叫更好?
我们可以从Qt文档中读到QSqlDatabase
:
警告:如果添加与现有连接同名的连接 连接,新连接将替换旧连接。如果你称之为 函数多次不指定连接名称,默认 连接将是替换的连接。
因此,当您在特定名称中多次添加数据库或未指定任何(默认连接(时,连接将被替换,并且不会调用removeDatabase
。
但是我认为,当您为每个可能的数据库启动应用程序时,您应该调用QSqlDatabase::addDatabase()
一次,并且不需要在每次要在不同部分访问连接时添加然后删除连接。
QSqlDatabase::addDatabase
只为相关的 SQL 驱动程序和返回的QSqlDatabase
对象分配连接名称。仅当您调用 QSqlDatabase::open
时,数据库才会打开。因此,当您在使用数据库的不同位置添加数据库时,使用相同连接名称的所有QSqlDatabase
对象都将更改。因此,如果使用许多具有相同连接名称的QSqlDatabase
对象,则可能会产生大量开销。
在代码的不同部分,您可以使用返回名为 connectionName
的数据库连接的QSqlDatabase::database
。这样,您就可以访问不同部分的QSqlDatabase
实例,这些部分在开始时实际上调用了addDatabase
一次。