2

在 Qt 中,需要完成几个步骤才能完成数据库访问。

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

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

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

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

QSqlDatabase::removeDatabase(connectionName);

我的应用程序经常这样做,因为它出于多种目的访问并行进程中的各种数据库。它也是一个服务器应用程序,可以运行很长时间而无需重新启动。

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

然而呢addDatabase()addDatabase() 在不直接调用removeDatabase()(但仅在应用程序退出时)的情况下调用是否有任何危害或好处?还是始终直接配对这些呼叫更好?

4

1 回答 1

1

我们可以从 Qt 文档中了解到QSqlDatabase

警告:如果您添加与现有连接同名的连接,则新连接将替换旧连接。如果您多次调用此函数而不指定 connectionName,则默认连接将被替换。

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

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

QSqlDatabase::addDatabaseQSqlDatabase只需为相关的 SQL 驱动程序和返回的对象分配一个连接名称。数据库仅在您调用时打开QSqlDatabase::open。因此,当您在使用数据库的不同位置添加数据库时,所有QSqlDatabase使用相同连接名称的对象都会更改。QSqlDatabase因此,如果您使用许多具有相同连接名称的对象,您可能会有很多开销。

在代码的不同部分,您可以使用QSqlDatabase::database返回名为connectionName. 这样,您可以在开始时QSqlDatabase实际调用addDatabase一次的不同部分访问实例。

于 2014-12-04T07:02:57.273 回答