管理数据库和连接生存期



在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一次。

相关内容

  • 没有找到相关文章

最新更新