gpt4 book ai didi

c++ - 处理 QSqlDatabase 连接

转载 作者:搜寻专家 更新时间:2023-10-31 01:03:17 25 4
gpt4 key购买 nike

处理 QSqlDatabase 连接的正确方法是什么?

在我的程序中我是这样做的:

DatabaseConnector *databaseConnector = 0;
try
{
databaseConnector = new DatabaseConnector();
//Do stuff...
delete databaseConnector;
}
catch(QString e)
{
delete databaseConnector;
QMessageBox::information(this,"Error",e);
}

databaseConnector.h

#ifndef DATABASECONNECTOR_H
#define DATABASECONNECTOR_H
#include <QtSql>

class DatabaseConnector
{
public:
DatabaseConnector();
DatabaseConnector(QString hostname, QString database, QString user, QString password);
~DatabaseConnector();
private:
QSqlDatabase db;
};

#endif // DATABASECONNECTOR_H

数据库连接器.cpp

#include "databaseconnector.h"
#include <QString>

DatabaseConnector::DatabaseConnector()
{
QSettings settings;

db = QSqlDatabase::addDatabase("QIBASE");
db.setHostName(settings.value("db/host").toString());
db.setDatabaseName(settings.value("db/name").toString());
db.setUserName(settings.value("db/user").toString());
db.setPassword(settings.value("db/pass").toString());

if(!db.open())
{
QString databaseConnectionError = db.lastError().text();
throw databaseConnectionError;
}
}

DatabaseConnector::DatabaseConnector(QString hostname, QString database, QString user, QString password)
{
db = QSqlDatabase::addDatabase("QIBASE");
db.setHostName(hostname);
db.setDatabaseName(database);
db.setUserName(user);
db.setPassword(password);
if(!db.open())
{
QString databaseConnectionError = db.lastError().text();
throw databaseConnectionError;
}

}

DatabaseConnector::~DatabaseConnector()
{
db.close();
}

即使我使用 QSqlDatabase::removeDatabase(db.connectionName());

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.

最佳答案

通常您不需要在应用程序中多次打开数据库连接。

添加数据库时,可以给连接命名:

QSqlDatabase::addDatabase( "QIBASE", "MyDBConnectionName" );

您可以使用名称来查询连接:

if( QSqlDatabase::contains( "MyDBConnectionName" ) )
{
QSqlDatabase db = QSqlDatabase::database( "MyDBConnectionName" );
//Do stuff...
}
else
{
// connection not found, do something
}

另请注意,在调用 QSqlDatabase::removeDatabase 之前,您应该断开数据库连接:

db.close();
QSqlDatabase::removeDatabase("MyDBConnectionName");

关于c++ - 处理 QSqlDatabase 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25483218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com