QSqlDatabase Class
La classe QSqlDatabase gère la connexion à une base de données. En savoir plus…
| En-tête : | #include <QSqlDatabase> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
| qmake : | QT += sql |
| Hérite de : | QSqlDatabaseDefaultConnectionName |
- Liste de tous les membres, y compris les membres hérités
- Membres obsolètes
- QSqlDatabase fait partie des classes de base de données.
Propriétés
(since 6.8)numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
Fonctions publiques
| QSqlDatabase() | |
| QSqlDatabase(const QSqlDatabase &other) | |
| ~QSqlDatabase() | |
| void | close() |
| bool | commit() |
| QString | connectOptions() const |
| QString | connectionName() const |
| QString | databaseName() const |
| QSqlDriver * | driver() const |
| QString | driverName() const |
| QString | hostName() const |
| bool | isOpen() const |
| bool | isOpenError() const |
| bool | isValid() const |
| QSqlError | lastError() const |
(since 6.8) bool | moveToThread(QThread *targetThread) |
| QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
| bool | open() |
| bool | open(const QString &user, const QString &password) |
| QString | password() const |
| int | port() const |
| QSqlIndex | primaryIndex(const QString &tablename) const |
| QSqlRecord | record(const QString &tablename) const |
| bool | rollback() |
| void | setConnectOptions(const QString &options = QString()) |
| void | setDatabaseName(const QString &name) |
| void | setHostName(const QString &host) |
| void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
| void | setPassword(const QString &password) |
| void | setPort(int port) |
| void | setUserName(const QString &name) |
| QStringList | tables(QSql::TableType type = QSql::Tables) const |
(since 6.8) QThread * | thread() const |
| bool | transaction() |
| QString | userName() const |
| QSqlDatabase & | operator=(const QSqlDatabase &other) |
Membres publics statiques
| QSqlDatabase | addDatabase(const QString &type, const QString &connectionName = defaultConnectionName()) |
| QSqlDatabase | addDatabase(QSqlDriver *driver, const QString &connectionName = defaultConnectionName()) |
| QSqlDatabase | cloneDatabase(const QSqlDatabase &other, const QString &connectionName) |
| QSqlDatabase | cloneDatabase(const QString &other, const QString &connectionName) |
| QStringList | connectionNames() |
| bool | contains(const QString &connectionName = defaultConnectionName()) |
| QSqlDatabase | database(const QString &connectionName = defaultConnectionName(), bool open = true) |
| QStringList | drivers() |
| bool | isDriverAvailable(const QString &name) |
| void | registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator) |
| void | removeDatabase(const QString &connectionName) |
Fonctions protégées
| QSqlDatabase(QSqlDriver *driver) | |
| QSqlDatabase(const QString &type) |
Description détaillée
La classe QSqlDatabase fournit une interface permettant d’accéder à une base de données via une connexion. Une instance de QSqlDatabase représente la connexion. La connexion permet d’accéder à la base de données via l’un des pilotes de base de données pris en charge, qui sont dérivés de QSqlDriver. Vous pouvez également créer votre propre pilote de base de données en sous-classant QSqlDriver. Pour plus d’informations, consultez la section « Comment écrire votre propre pilote de base de données ». Une instance de QSqlDatabase ne doit être accessible que par le thread dans lequel elle a été créée. Vous devez donc veiller à les créer dans le bon contexte. Vous pouvez également modifier le contexte à l’aide de la fonction QSqlDatabase::moveToThread().
Créez une connexion (c'est-à-dire une instance de QSqlDatabase) en appelant l'une des fonctions statiques addDatabase(), dans laquelle vous spécifiez le pilote ou le type de pilote à utiliser (en fonction du type de base de données) ainsi qu'un nom de connexion. Une connexion est identifiée par son propre nom, et non par le nom de la base de données à laquelle elle se connecte. Vous pouvez disposer de plusieurs connexions à une même base de données. QSqlDatabase prend également en charge le concept de connexion par défaut, qui correspond à la connexion sans nom. Pour créer la connexion par défaut, ne passez pas l’argument du nom de connexion lorsque vous appelez ` addDatabase()`. Par la suite, la connexion par défaut sera utilisée si vous appelez une fonction membre statique sans spécifier de nom de connexion. L'extrait de code suivant montre comment créer et ouvrir une connexion par défaut à une base de données PostgreSQL :
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("acidalia");
db.setDatabaseName("customdb");
db.setUserName("mojito");
db.setPassword("J0a1m8");
bool ok = db.open();Une fois l’objet QSqlDatabase créé, définissez les paramètres de connexion à l’aide de ` setDatabaseName()`, ` setUserName()`, ` setPassword()`, ` setHostName()`, ` setPort()` et ` setConnectOptions()`. Appelez ensuite ` open()` pour activer la connexion physique à la base de données. La connexion n’est pas utilisable tant que vous ne l’avez pas ouverte.
La connexion définie ci-dessus sera la connexion par défaut, car nous n’avons pas fourni de nom de connexion à la fonction ` addDatabase()`. Par la suite, vous pouvez récupérer la connexion par défaut en appelant la fonction ` database()` sans l’argument « nom de connexion » :
QSqlDatabase db = QSqlDatabase::database();QSqlDatabase est une classe de valeur. Les modifications apportées à une connexion à la base de données via une instance de QSqlDatabase affecteront les autres instances de QSqlDatabase représentant la même connexion. Utilisez cloneDatabase() pour créer une connexion indépendante à la base de données à partir d’une connexion existante.
Avertissement : il est fortement recommandé de ne pas conserver une copie de QSqlDatabase en tant que membre d’une classe, car cela empêcherait le nettoyage correct de l’instance à l’arrêt. Si vous devez accéder à une instance QSqlDatabase existante, utilisez la méthode ` database()`. Si vous choisissez de définir une variable membre de type `QSqlDatabase`, celle-ci doit être supprimée avant la suppression de l’instance ` QCoreApplication `, faute de quoi cela pourrait entraîner un comportement indéfini.
Si vous créez plusieurs connexions à la base de données, spécifiez un nom de connexion unique pour chacune d’entre elles lorsque vous appelez ` addDatabase()`. Utilisez ` database()` avec un nom de connexion pour récupérer cette connexion. Utilisez ` removeDatabase()` avec un nom de connexion pour supprimer une connexion. QSqlDatabase affiche un avertissement si vous essayez de supprimer une connexion référencée par d’autres objets QSqlDatabase. Utilisez contains() pour vérifier si un nom de connexion donné figure dans la liste des connexions.
| Quelques méthodes utilitaires : | |
|---|---|
| tables() | renvoie la liste des tables |
| primaryIndex() | renvoie l'index primaire d'une table |
| record() | renvoie des méta-informations sur les champs d'une table |
| transaction() | lance une transaction |
| commit() | enregistre et finalise une transaction |
| rollback() | annule une transaction |
| hasFeature() | vérifie si un pilote prend en charge les transactions |
| lastError() | renvoie des informations sur la dernière erreur |
| drivers() | renvoie les noms des pilotes SQL disponibles |
| isDriverAvailable() | vérifie si un pilote particulier est disponible |
| registerSqlDriver() | enregistre un pilote personnalisé |
Remarque : lorsque vous utilisez des transactions, vous devez démarrer la transaction avant de créer votre requête.
Voir aussi QSqlDriver, QSqlQuery, Qt SQLet « Threads et le module SQL ».
Documentation sur les propriétés
[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
Cette propriété définit la politique de précision numérique par défaut utilisée par les requêtes créées sur cette connexion à la base de données.
Remarque : les pilotes qui ne prennent pas en charge la récupération de valeurs numériques à faible précision ignoreront la politique de précision. Vous pouvez utiliser la fonction ` QSqlDriver::hasFeature()` pour vérifier si un pilote prend en charge cette fonctionnalité.
Remarque : le fait de définir la politique de précision par défaut sur precisionPolicy n’affecte pas les requêtes actuellement actives.
Cette énumération a été introduite dans Qt 6.8.
Fonctions d’accès :
| QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
| void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
Voir également QSql::NumericalPrecisionPolicy, QSqlQuery::numericalPrecisionPolicy et QSqlDriver::numericalPrecisionPolicy.
Documentation des fonctions membres
QSqlDatabase::QSqlDatabase()
Crée un objet QSqlDatabase vide et non valide. Utilisez les méthodes addDatabase(), removeDatabase() et database() pour obtenir des objets QSqlDatabase valides.
[explicit protected] QSqlDatabase::QSqlDatabase(QSqlDriver *driver)
Crée une connexion à la base de données à l'aide de l'driver fournie.
Il s'agit d'une fonction surchargée.
[explicit protected] QSqlDatabase::QSqlDatabase(const QString &type)
Crée une connexion QSqlDatabase utilisant le pilote spécifié par ` type`. Si ` type ` n'est pas reconnu, la connexion à la base de données ne fonctionnera pas.
Les types de pilotes actuellement disponibles sont les suivants :
| Type de pilote | Description |
|---|---|
| QDB2 | IBM DB2 |
| QIBASE | Pilote Borland InterBase |
| QMYSQL | Pilote MySQL |
| QOCI | Pilote Oracle Call Interface |
| QODBC | Pilote ODBC (inclut Microsoft SQL Server) |
| QPSQL | Pilote PostgreSQL |
| QSQLITE | SQLite version 3 ou supérieure |
| QMIMER | Mimer SQL 11 ou version ultérieure |
D'autres pilotes tiers, y compris vos propres pilotes personnalisés, peuvent être chargés dynamiquement.
Il s'agit d'une fonction surchargée.
Voir également Pilotes de bases de données SQL, registerSqlDriver() et drivers().
QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)
Crée une copie de other.
[noexcept] QSqlDatabase::~QSqlDatabase()
Détruit l'objet et libère toutes les ressources allouées.
Remarque : lorsque la dernière connexion est détruite, le destructeur appelle implicitement la fonction close() pour libérer la connexion à la base de données.
Voir aussi close().
[static] QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = defaultConnectionName())
Ajoute une base de données à la liste des connexions à la base de données à l'aide du pilote type et du nom de connexion connectionName. Si une connexion à la base de données nommée connectionName existe déjà, celle-ci est supprimée.
La connexion à la base de données est désignée par connectionName. La connexion à la base de données nouvellement ajoutée est renvoyée.
Si type n'est pas disponible ou n'a pas pu être chargé, isValid() renvoie false.
Si connectionName n’est pas spécifié, la nouvelle connexion devient la connexion par défaut de l’application, et les appels suivants à database() sans l’argument du nom de connexion renverront la connexion par défaut. Si un connectionName est fourni ici, utilisez database(connectionName) pour récupérer la connexion.
Avertissement : si vous ajoutez une connexion portant le même nom qu’une connexion existante, la nouvelle connexion remplace l’ancienne. Si vous appelez cette fonction plusieurs fois sans spécifier connectionName, c’est la connexion par défaut qui sera remplacée.
Avant d’utiliser la connexion, celle-ci doit être initialisée. Par exemple, appelez tout ou partie des fonctions suivantes : setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() et setConnectOptions(), puis enfin open().
Remarque : cette fonction est sûre pour les threads.
Voir également database(), removeDatabase() et « Threads et le module SQL ».
[static] QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = defaultConnectionName())
Cette surcharge est utile lorsque vous souhaitez établir une connexion à une base de données à l'aide d'un objet ` driver ` que vous avez instancié vous-même. Il peut s'agir de votre propre pilote de base de données, ou vous pouvez simplement avoir besoin d'instancier vous-même l'un des pilotes Qt. Si vous procédez ainsi, il est recommandé d'intégrer le code du pilote dans votre application. Par exemple, vous pouvez créer une connexion PostgreSQL avec votre propre pilote QPSQL de la manière suivante :
PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield");
QPSQLDriver *drv = new QPSQLDriver(con);
QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection
QSqlQuery query;
query.exec("SELECT NAME, ID FROM STAFF");Le code ci-dessus établit une connexion PostgreSQL et instancie un objet QPSQLDriver. Ensuite, la fonction addDatabase() est appelée pour ajouter la connexion à la liste des connexions connues, afin qu’elle puisse être utilisée par les classes Qt SQL. Lorsqu’un pilote est instancié avec un descripteur de connexion (ou un ensemble de descripteurs), Qt part du principe que vous avez déjà ouvert la connexion à la base de données.
Remarque : nous partons du principe que ` qtdir ` est le répertoire dans lequel Qt est installé. Cela permettra d’importer le code nécessaire à l’utilisation de la bibliothèque cliente PostgreSQL et à l’instanciation d’un objet `QPSQLDriver`, en supposant que les en-têtes PostgreSQL se trouvent quelque part dans votre chemin de recherche des fichiers d’inclusion.
N’oubliez pas que vous devez lier votre application à la bibliothèque cliente de la base de données. Assurez-vous que la bibliothèque cliente se trouve dans le chemin de recherche de votre éditeur de liens, et ajoutez des lignes comme celles-ci à votre fichier .pro:
unix:LIBS += -lpq
win32:LIBS += libpqdll.libLa méthode décrite fonctionne pour tous les pilotes fournis. La seule différence réside dans les arguments du constructeur du pilote. Voici un tableau répertoriant les pilotes inclus avec Qt, leurs fichiers de code source et leurs arguments de constructeur :
| Pilote | Nom de la classe | Arguments du constructeur | Fichier à inclure |
|---|---|---|---|
| QPSQL | QPSQLDriver | PGconn *connexion | qsql_psql.cpp |
| QMYSQL | QMYSQLDriver | MYSQL *connexion | qsql_mysql.cpp |
| QOCI | QOCIDriver | OCIEnv *environnement, OCISvcCtx *contexte de service | qsql_oci.cpp |
| QODBC | QODBCDriver | environnement SQLHANDLE, connexion SQLHANDLE | qsql_odbc.cpp |
| QDB2 | QDB2 | Environnement SQLHANDLE, connexion SQLHANDLE | qsql_db2.cpp |
| QSQLITE | QSQLiteDriver | sqlite *connexion | qsql_sqlite.cpp |
| QMIMER | QMimerSQLDriver | MimerSession *connexion | qsql_mimer.cpp |
| QIBASE | QIBaseDriver | isc_db_handle connexion | qsql_ibase.cpp |
Avertissement : l'ajout d'une connexion à la base de données portant le même nom qu'une connexion existante entraîne le remplacement de cette dernière par la nouvelle.
Avertissement : le framework SQL prend possession de l'driver. Celui-ci ne doit pas être supprimé. Pour supprimer la connexion, utilisez removeDatabase().
Il s'agit d'une fonction surchargée.
Voir également drivers().
[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
Clone la connexion à la base de données other et l'enregistre sous le nom connectionName. Tous les paramètres de la base de données d'origine, par exemple databaseName(), hostName(), etc., sont copiés. Ne fait rien si other correspond à une base de données non valide. Renvoie la connexion à la base de données nouvellement créée.
Remarque : la nouvelle connexion n’a pas encore été ouverte. Avant d’utiliser la nouvelle connexion, vous devez appeler open().
Remarque : cette fonction est réentrante.
[static] QSqlDatabase QSqlDatabase::cloneDatabase(const QString &other, const QString &connectionName)
Clone la connexion à la base de données other et l'enregistre sous le nom connectionName. Tous les paramètres de la base de données d'origine, par exemple databaseName(), hostName(), etc., sont copiés. Ne fait rien si other correspond à une base de données non valide. Renvoie la connexion à la base de données nouvellement créée.
Remarque : la nouvelle connexion n’a pas encore été ouverte. Avant d’utiliser la nouvelle connexion, vous devez appeler open().
Cette surcharge est utile lors du clonage de la base de données dans un autre thread que celui utilisé par la base de données représentée par other.
Il s'agit d'une fonction surchargée.
void QSqlDatabase::close()
Ferme la connexion à la base de données, libère toutes les ressources acquises et invalide tous les objets ` QSqlQuery ` existants utilisés avec la base de données.
Cela affectera également les copies de cet objet ` QSqlDatabase `.
Voir aussi removeDatabase().
bool QSqlDatabase::commit()
Valide une transaction dans la base de données si le pilote prend en charge les transactions et si une opération de validation ( transaction()) a été lancée. Renvoie « true » si l'opération a réussi. Sinon, elle renvoie « false ».
Remarque : pour certaines bases de données, la validation échouera et renverra false s’il existe une active query utilisant la base de données pour une SELECT. Effectuez la requête inactive avant de procéder à la validation.
Appelez ` lastError()` pour obtenir des informations sur les erreurs.
Voir également QSqlQuery::isActive(), QSqlDriver::hasFeature() et rollback().
QString QSqlDatabase::connectOptions() const
Renvoie la chaîne de caractères contenant les options de connexion utilisées pour cette connexion. La chaîne peut être vide.
Voir aussi setConnectOptions().
QString QSqlDatabase::connectionName() const
Renvoie le nom de la connexion, qui peut être vide.
Remarque : le nom de la connexion n'est pas le paramètre « database name ».
Voir aussi addDatabase().
[static] QStringList QSqlDatabase::connectionNames()
Renvoie une liste contenant les noms de toutes les connexions.
Remarque : cette fonction est sûre pour les threads.
Voir également contains(), database() et « Les threads et le module SQL ».
[static] bool QSqlDatabase::contains(const QString &connectionName = defaultConnectionName())
Renvoie ` true ` si la liste des connexions à la base de données contient ` connectionName` ; sinon, renvoie ` false`.
Remarque : cette fonction est sûre pour les threads.
Voir aussi connectionNames(), database() et « Les threads et le module SQL ».
[static] QSqlDatabase QSqlDatabase::database(const QString &connectionName = defaultConnectionName(), bool open = true)
Renvoie la connexion à la base de données appelée « connectionName ». La connexion à la base de données doit avoir été préalablement ajoutée à l’aide de la fonction addDatabase(). Si la valeur de « open » est « true » (valeur par défaut) et que la connexion à la base de données n’est pas encore ouverte, celle-ci est alors ouverte. Si aucune valeur n’est spécifiée pour « connectionName », la connexion par défaut est utilisée. Si « connectionName » n’existe pas dans la liste des bases de données, une connexion non valide est renvoyée.
Remarque : cette fonction est thread-safe.
Voir aussi isOpen() et « Threads et le module SQL ».
QString QSqlDatabase::databaseName() const
Renvoie le nom de la base de données de la connexion ; ce nom peut être vide.
Remarque : le nom de la base de données n'est pas le nom de la connexion.
Voir aussi setDatabaseName().
QSqlDriver *QSqlDatabase::driver() const
Renvoie le pilote de base de données utilisé pour accéder à la connexion à la base de données.
Voir également addDatabase() et drivers().
QString QSqlDatabase::driverName() const
Renvoie le nom du pilote de la connexion.
Voir également addDatabase() et driver().
[static] QStringList QSqlDatabase::drivers()
Renvoie une liste de tous les pilotes de base de données disponibles.
Voir aussi registerSqlDriver().
QString QSqlDatabase::hostName() const
Renvoie le nom d'hôte de la connexion ; il peut être vide.
Voir aussi setHostName().
[static] bool QSqlDatabase::isDriverAvailable(const QString &name)
Renvoie ` true ` si un pilote nommé ` name ` est disponible ; sinon, renvoie ` false`.
Voir également drivers().
bool QSqlDatabase::isOpen() const
Renvoie « true » si la connexion à la base de données est actuellement ouverte ; sinon, renvoie « false ».
bool QSqlDatabase::isOpenError() const
Renvoie « true » si une erreur s'est produite lors de l'ouverture de la connexion à la base de données ; sinon, renvoie « false ». Les informations relatives à l'erreur peuvent être récupérées à l'aide de la fonction « lastError() ».
bool QSqlDatabase::isValid() const
Renvoie « true » si l'QSqlDatabase dispose d'un pilote valide.
Exemple :
QSqlDatabase db;
qDebug() << db.isValid(); // Returns false
db = QSqlDatabase::database("sales");
qDebug() << db.isValid(); // Returns \c true if "sales" connection exists
QSqlDatabase::removeDatabase("sales");
qDebug() << db.isValid(); // Returns falseQSqlError QSqlDatabase::lastError() const
Renvoie des informations sur la dernière erreur survenue dans la base de données.
Les échecs liés à une requête spécifique sont signalés par la fonction QSqlQuery::lastError().
Voir également QSqlError et QSqlQuery::lastError().
[since 6.8] bool QSqlDatabase::moveToThread(QThread *targetThread)
Modifie l'affinité de thread pour QSqlDatabase et son pilote associé. Cette fonction renvoie true en cas de réussite. Le traitement des événements se poursuivra dans targetThread.
Au cours de cette opération, vous devez vous assurer qu’aucun QSqlQuery n’est lié à cette instance, sinon l’ QSqlDatabase ne sera pas déplacé vers le thread spécifié et la fonction renverra false.
Étant donné que le pilote associé est dérivé de ` QObject`, toutes les contraintes relatives au déplacement d’un ` QObject ` vers un autre thread s’appliquent également à cette fonction.
Cette fonction a été introduite dans Qt 6.8.
Voir également ` QObject::moveToThread()` et « Threads et le module SQL ».
QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const
Renvoie la propriété `numericalPrecisionPolicy`.
Remarque : fonctiongetter pour la propriété numericalPrecisionPolicy.
Voir aussi setNumericalPrecisionPolicy().
bool QSqlDatabase::open()
Ouvre la connexion à la base de données en utilisant les paramètres de connexion actuels. Renvoie « true » en cas de succès ; sinon, renvoie « false ». Les informations relatives à l'erreur peuvent être récupérées à l'aide de la fonction « lastError() ».
Voir également lastError(), setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() et setConnectOptions().
bool QSqlDatabase::open(const QString &user, const QString &password)
Ouvre la connexion à la base de données en utilisant le nom d'user et l'password fournis. Renvoie true en cas de succès ; sinon, renvoie false. Les informations d'erreur peuvent être récupérées à l'aide de la fonction lastError().
Cette fonction ne stocke pas le mot de passe qui lui est fourni. Au lieu de cela, le mot de passe est transmis directement au pilote pour l'ouverture de la connexion, puis il est ignoré.
Il s'agit d'une fonction surchargée.
Voir également lastError().
QString QSqlDatabase::password() const
Renvoie le mot de passe de la connexion. Une chaîne vide sera renvoyée si le mot de passe n’a pas été défini avec la fonction setPassword(), si le mot de passe a été fourni lors de l’appel à la fonction open() ou si aucun mot de passe n’a été utilisé.
Voir également setPassword().
int QSqlDatabase::port() const
Renvoie le numéro de port de la connexion. La valeur est indéfinie si le numéro de port n'a pas été défini.
Voir aussi setPort().
QSqlIndex QSqlDatabase::primaryIndex(const QString &tablename) const
Renvoie l'index primaire de la table tablename. Si aucun index primaire n'existe, une valeur vide QSqlIndex est renvoyée.
Remarque : certains pilotes, tels que le pilote QPSQL, peuvent exiger que vous transmettiez ` tablename ` en minuscules si la table n’a pas été placée entre guillemets lors de sa création. Consultez la documentation du pilote `Qt SQL ` pour plus d’informations.
Voir également tables() et record().
QSqlRecord QSqlDatabase::record(const QString &tablename) const
Renvoie un objet ` QSqlRecord ` contenant les noms de tous les champs de la table (ou vue) nommée ` tablename`. L'ordre d'apparition des champs dans l'enregistrement n'est pas défini. Si aucune table (ou vue) de ce nom n'existe, un enregistrement vide est renvoyé.
Remarque : certains pilotes, tels que le pilote QPSQL, peuvent exiger que vous transmettiez ` tablename ` en minuscules si la table n'a pas été placée entre guillemets lors de sa création. Consultez la documentation du piloteQt SQL pour plus d'informations.
[static] void QSqlDatabase::registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)
Cette fonction enregistre un nouveau pilote SQL appelé « name » au sein du framework SQL. Cela s'avère utile si vous disposez d'un pilote SQL personnalisé et que vous ne souhaitez pas le compiler en tant que plugin.
Exemple :
QSqlDatabase::registerSqlDriver("MYDRIVER", new QSqlDriverCreator<QSqlDriver>);
QVERIFY(QSqlDatabase::drivers().contains("MYDRIVER"));
QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER");
QVERIFY(db.isValid());QSqlDatabase prend en charge le pointeur creator; vous ne devez donc pas le supprimer vous-même.
Voir également drivers().
[static] void QSqlDatabase::removeDatabase(const QString &connectionName)
Supprime la connexion à la base de données connectionName de la liste des connexions à la base de données.
Avertissement : aucune requêtene doitêtre ouverte sur la connexion à la base de données lorsque cette fonction est appelée, sinon une fuite de ressources se produira.
Exemple :
// WRONG
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db" is now a dangling invalid database connection,
// "query" contains an invalid result setLa bonne façon de procéder :
{
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correctPour supprimer la connexion par défaut, qui a pu être créée à l’aide d’un appel à ` addDatabase()` sans spécifier de nom de connexion, vous pouvez récupérer le nom de la connexion par défaut en appelant ` connectionName()` sur la base de données renvoyée par ` database()`. Notez que si aucune base de données par défaut n’a été créée, une base de données invalide sera renvoyée.
Remarque : cette fonction est thread-safe.
Voir également database(), connectionName() et « Threads et le module SQL ».
bool QSqlDatabase::rollback()
Annule une transaction dans la base de données, à condition que le pilote prenne en charge les transactions et qu’une opération de type ` transaction()` ait été lancée. Renvoie ` true ` si l’opération a réussi. Sinon, elle renvoie ` false`.
Remarque : pour certaines bases de données, l’annulation échouera et renverra false s’il existe une active query utilisant la base de données pour une SELECT. Effectuez la requête inactive avant de procéder à l’annulation.
Appelez ` lastError()` pour obtenir des informations sur les erreurs.
Voir également QSqlQuery::isActive(), QSqlDriver::hasFeature() et commit().
void QSqlDatabase::setConnectOptions(const QString &options = QString())
Définit les options de connexion spécifiques à la base de données ( options). Cette opération doit être effectuée avant l'ouverture de la connexion, sinon elle n'aura aucun effet. Une autre possibilité consiste à fermer la connexion, à appeler QSqlDatabase::setConnectOptions(), puis à ouvrir à nouveau la connexion à l'aide de open().
Le format de la chaîne d'options s est une liste, séparée par des points-virgules, de noms d'options ou de paires option=valeur. Les options dépendent du client de base de données utilisé et sont décrites pour chaque plugin sur la page Pilotes de bases de données SQL.
Exemples :
db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the server
if (!db.open()) {
db.setConnectOptions(); // clears the connect option string
// ...
}
// ...
// PostgreSQL connection
db.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connections
if (!db.open()) {
db.setConnectOptions(); // clear options
// ...
}
// ...
// ODBC connection
db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC options
if (!db.open()) {
db.setConnectOptions(); // don't try to set this option
// ...
}
}Reportez-vous à la documentation de la bibliothèque cliente pour plus d’informations sur les différentes options.
Voir également ` connectOptions()`.
void QSqlDatabase::setDatabaseName(const QString &name)
Définit le nom de la base de données de la connexion sur « name ». Pour que cette modification prenne effet, le nom de la base de données doit être défini avant que la connexion ne soit établie via ` opened`. Vous pouvez également créer la connexion via ` close()`, définir le nom de la base de données, puis appeler à nouveau ` open()`.
Remarque : le nom de la base de données n’est pas le nom de la connexion. Le nom de la connexion doit être transmis à la fonction ` addDatabase()` lors de la création de l’objet de connexion.
Pour le pilote QSQLITE, si le nom de base de données spécifié n’existe pas, le fichier sera créé automatiquement, sauf si l’option QSQLITE_OPEN_READONLY est activée.
De plus, la fonction ` name ` peut être définie sur ` ":memory:" `, ce qui créera une base de données temporaire qui ne sera disponible que pendant la durée de vie de l’application.
Pour le pilote QOCI (Oracle), le nom de la base de données correspond au nom de service TNS.
Pour le pilote QODBC, l’ name peut être soit un DSN, soit un nom de fichier DSN (auquel cas le fichier doit porter l’extension .dsn ), soit une chaîne de connexion.
Par exemple, les utilisateurs de Microsoft Access peuvent utiliser la chaîne de connexion suivante pour ouvrir directement un fichier d’ .mdb, au lieu de devoir créer une entrée DSN dans le gestionnaire ODBC :
// ...
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
// success!
}
// ...Il n'y a pas de valeur par défaut.
Voir également databaseName(), setUserName(), setPassword(), setHostName(), setPort(), setConnectOptions() et open().
void QSqlDatabase::setHostName(const QString &host)
Définit le nom d'hôte de la connexion sur host. Pour que cette modification prenne effet, le nom d'hôte doit être défini avant l'opened de la connexion. Vous pouvez également utiliser la fonction close() pour obtenir la connexion, définir le nom d'hôte, puis appeler à nouveau la fonction open().
Il n’y a pas de valeur par défaut.
Voir également hostName(), setUserName(), setPassword(), setDatabaseName(), setPort(), setConnectOptions() et open().
void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
Définit la propriété « numericalPrecisionPolicy » sur « precisionPolicy ».
Remarque : fonctionde définition de la propriété numericalPrecisionPolicy.
Voir également numericalPrecisionPolicy().
void QSqlDatabase::setPassword(const QString &password)
Définit le mot de passe de la connexion sur password. Pour que cette modification prenne effet, le mot de passe doit être défini avant que la connexion ne soit établie via opened. Vous pouvez également fermer la connexion à l'aide de la fonction close(), définir le mot de passe, puis appeler à nouveau la fonction open().
Il n'y a pas de valeur par défaut.
Avertissement : cette fonction stocke le mot de passe en clair dans Qt. Utilisez l'appel ` open()` qui prend un mot de passe en paramètre pour éviter ce comportement.
Voir également : password(), setUserName(), setDatabaseName(), setHostName(), setPort(), setConnectOptions() et open().
void QSqlDatabase::setPort(int port)
Définit le numéro de port de la connexion sur port. Pour que cette modification prenne effet, le numéro de port doit être défini avant l'opened. Vous pouvez également utiliser la fonction close() sur la connexion, définir le numéro de port, puis appeler à nouveau la fonction open().
Il n’y a pas de valeur par défaut.
Voir également port(), setUserName(), setPassword(), setHostName(), setDatabaseName(), setConnectOptions() et open().
void QSqlDatabase::setUserName(const QString &name)
Définit le nom d'utilisateur de la connexion sur name. Pour que cette modification prenne effet, le nom d'utilisateur doit être défini avant l'établissement de la connexion opened. Vous pouvez également appeler la fonction close() sur la connexion, définir le nom d'utilisateur, puis appeler à nouveau la fonction open().
Il n’y a pas de valeur par défaut.
Voir également userName(), setDatabaseName(), setPassword(), setHostName(), setPort(), setConnectOptions() et open().
QStringList QSqlDatabase::tables(QSql::TableType type = QSql::Tables) const
Renvoie une liste des tables, tables système et vues de la base de données, telles que spécifiées par le paramètre type.
Voir également primaryIndex() et record().
[since 6.8] QThread *QSqlDatabase::thread() const
Renvoie un pointeur vers l'instance associée de ` QThread `.
Cette fonction a été introduite dans Qt 6.8.
bool QSqlDatabase::transaction()
Lance une transaction dans la base de données si le pilote prend en charge les transactions. Renvoie « true » si l'opération a réussi. Sinon, elle renvoie « false ».
Voir également QSqlDriver::hasFeature(), commit() et rollback().
QString QSqlDatabase::userName() const
Renvoie le nom d'utilisateur de la connexion ; il peut être vide.
Voir aussi setUserName().
QSqlDatabase &QSqlDatabase::operator=(const QSqlDatabase &other)
Attribue la valeur « other » à cet objet.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.