管理数据库和连接生命周期

时间:2014-12-03 20:57:20

标签: mysql qt database-connection resource-management qsqldatabase

在Qt中,有几个步骤需要完成,直到可以完成数据库访问。

第一步是按连接名称添加数据库:

QSqlDatabase::addDatabase("QMYSQL", connectionName);

在此之后,我可以使用open()close()来打开/关闭相应的连接。

也可以使用以下调用删除该数据库:

QSqlDatabase::removeDatabase(connectionName);

我的应用程序做了很多,因为它为了很多目的访问并行进程中的各种数据库。此外,它是一个服务器应用程序,运行很长时间而不重新启动。

对我来说,由于可能的网络问题和服务器端的连接有限,保持连接始终打开是一个坏主意。

然而addDatabase()呢?在没有直接调用addDatabase()之后调用removeDatabase() 是否有任何损害或好处(但仅在应用程序退出时)?或者最好直接对这些电话进行配对?

1 个答案:

答案 0 :(得分:1)

我们可以阅读有关QSqlDatabase

的Qt文档
  

警告:如果添加的连接名称与现有连接相同   连接,新连接替换旧连接。如果你这样称呼   函数不止一次而没有指定connectionName,默认值   连接将被替换。

因此,当您在特定名称中多次添加数据库或未指定任何(默认连接)时,将替换连接,并且不会调用removeDatabase

但我认为你应该为每个可能的数据库启动应用程序时调用QSqlDatabase::addDatabase()一次,并且每次要在不同的部分访问它时都不需要添加然后删除连接。

QSqlDatabase::addDatabase只为相关的SQL驱动程序和返回的QSqlDatabase对象分配连接名称。只有在您致电QSqlDatabase::open时,数据库才会打开。因此,当您在使用数据库的不同位置添加数据库时,将更改使用相同连接名称的所有QSqlDatabase对象。因此,如果您使用具有相同连接名称的许多QSqlDatabase对象,则可能会产生大量开销。

在代码的不同部分,您可以使用QSqlDatabase::database返回名为connectionName的数据库连接。这样,您就可以在开始时实际调用QSqlDatabase的不同部分中访问addDatabase实例。