Gestion des connexions QSqlDatabase

Quelle est la bonne façon de gérer les connexions pour QSqlDatabase ?

Dans mon programme, je le fais de cette façon:

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

databaseConnector.h

 #ifndef DATABASECONNECTOR_H #define DATABASECONNECTOR_H #include  class DatabaseConnector { public: DatabaseConnector(); DatabaseConnector(QSsortingng hostname, QSsortingng database, QSsortingng user, QSsortingng password); ~DatabaseConnector(); private: QSqlDatabase db; }; #endif // DATABASECONNECTOR_H 

databaseconnector.cpp

 #include "databaseconnector.h" #include  DatabaseConnector::DatabaseConnector() { QSettings settings; db = QSqlDatabase::addDatabase("QIBASE"); db.setHostName(settings.value("db/host").toSsortingng()); db.setDatabaseName(settings.value("db/name").toSsortingng()); db.setUserName(settings.value("db/user").toSsortingng()); db.setPassword(settings.value("db/pass").toSsortingng()); if(!db.open()) { QSsortingng databaseConnectionError = db.lastError().text(); throw databaseConnectionError; } } DatabaseConnector::DatabaseConnector(QSsortingng hostname, QSsortingng database, QSsortingng user, QSsortingng password) { db = QSqlDatabase::addDatabase("QIBASE"); db.setHostName(hostname); db.setDatabaseName(database); db.setUserName(user); db.setPassword(password); if(!db.open()) { QSsortingng databaseConnectionError = db.lastError().text(); throw databaseConnectionError; } } DatabaseConnector::~DatabaseConnector() { db.close(); } 

Je reçois une erreur même si j’utilise QSqlDatabase::removeDatabase(db.connectionName());

QSqlDatabasePrivate :: addDatabase: nom de connexion en double ‘qt_sql_default_connection’, ancienne connexion supprimée.

Normalement, vous n’avez pas besoin d’ouvrir plusieurs fois la connexion à la firebase database dans votre application.

Lors de l’ajout d’une firebase database, vous pouvez nommer la connexion:

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

Vous pouvez utiliser le nom pour interroger la connexion:

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

Notez également qu’avant d’appeler QSqlDatabase::removeDatabase vous devez déconnecter votre firebase database:

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

Pour append une nouvelle firebase database, vous devez lui donner un nom. Si vous ne donnez pas un nom unique, la firebase database par défaut est réutilisée. Ceci est documenté dans la référence de classe.

Essayer:

 db = QSqlDatabase::addDatabase("QIBASE", databaseName); 

Dans l’application principale:

 QSqlDatabase db =QSqlDatabase::addDatabase( "QSQLITE"); 

en seconde application:

 QSqlDatabase db2 =QSqlDatabase::database();