QSqlDriver Class
La classe QSqlDriver est une classe de base abstraite permettant d'accéder à des bases de données SQL spécifiques. Plus d'informations...
| En-tête : | #include <QSqlDriver> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Sql)target_link_libraries(mytarget PRIVATE Qt6::Sql) |
| qmake : | QT += sql |
| Héritages : | QObject |
- Liste de tous les membres, y compris les membres hérités
- QSqlDriver fait partie des classes de bases de données.
Types publics
| enum | DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries, …, CancelQuery } |
| enum | IdentifierType { FieldName, TableName } |
| enum | NotificationSource { UnknownSource, SelfSource, OtherSource } |
| enum | StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement } |
Propriétés
(since 6.8)numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
Fonctions publiques
| QSqlDriver(QObject *parent = nullptr) | |
| virtual | ~QSqlDriver() |
| virtual bool | beginTransaction() |
| virtual void | close() = 0 |
| virtual bool | commitTransaction() |
(since 6.9) QString | connectionName() const |
| virtual QSqlResult * | createResult() const = 0 |
| virtual QString | escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const |
| virtual QString | formatValue(const QSqlField &field, bool trimStrings = false) const |
| virtual QVariant | handle() const |
| virtual bool | hasFeature(QSqlDriver::DriverFeature feature) const = 0 |
| virtual bool | isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const |
| virtual bool | isOpen() const |
| bool | isOpenError() const |
| QSqlError | lastError() const |
(since 6.0) virtual int | maximumIdentifierLength(QSqlDriver::IdentifierType type) const |
| QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
| virtual bool | open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0 |
| virtual QSqlIndex | primaryIndex(const QString &tableName) const |
| virtual QSqlRecord | record(const QString &tableName) const |
| virtual bool | rollbackTransaction() |
| void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
| virtual QString | sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const |
| virtual QString | stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const |
| virtual bool | subscribeToNotification(const QString &name) |
| virtual QStringList | subscribedToNotifications() const |
| virtual QStringList | tables(QSql::TableType tableType) const |
| virtual bool | unsubscribeFromNotification(const QString &name) |
Signaux
| void | notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload) |
Fonctions protégées
| virtual void | setLastError(const QSqlError &error) |
| virtual void | setOpen(bool open) |
| virtual void | setOpenError(bool error) |
Description détaillée
Cette classe ne doit pas être utilisée directement. Utilisez plutôt QSqlDatabase.
Si vous souhaitez créer vos propres pilotes SQL, vous pouvez sous-classer cette classe et réimplémenter ses fonctions virtuelles pures et les fonctions virtuelles dont vous avez besoin. Voir Comment écrire votre propre pilote de base de données pour plus d'informations.
Voir également QSqlDatabase et QSqlResult.
Documentation sur les types de membres
enum QSqlDriver::DriverFeature
Cette énumération contient une liste de fonctionnalités qu'un pilote peut prendre en charge. Utilisez hasFeature() pour demander si une fonctionnalité est prise en charge ou non. Certaines fonctionnalités dépendent du serveur de base de données et ne peuvent donc être correctement déterminées que lorsque la connexion à la base de données a été ouverte avec succès à l'aide de QSqlDatabase::open().
| Constante | Valeur | Description |
|---|---|---|
QSqlDriver::Transactions | 0 | Si le pilote prend en charge les transactions SQL. |
QSqlDriver::QuerySize | 1 | Si la base de données est capable d'indiquer la taille d'une requête. Notez que certaines bases de données ne prennent pas en charge le renvoi de la taille (c'est-à-dire le nombre de lignes renvoyées) d'une requête, auquel cas QSqlQuery::size() renverra -1. |
QSqlDriver::BLOB | 2 | Si le pilote prend en charge les champs Binary Large Object. |
QSqlDriver::Unicode | 3 | Si le pilote prend en charge les chaînes Unicode si le serveur de base de données le fait. |
QSqlDriver::PreparedQueries | 4 | Si le pilote prend en charge l'exécution de requêtes préparées. |
QSqlDriver::NamedPlaceholders | 5 | Si le pilote prend en charge l'utilisation d'espaces réservés nommés. |
QSqlDriver::PositionalPlaceholders | 6 | Si le pilote prend en charge l'utilisation d'espaces réservés positionnels. |
QSqlDriver::LastInsertId | 7 | Si le pilote prend en charge le renvoi de l'identifiant de la dernière ligne touchée. |
QSqlDriver::BatchOperations | 8 | Si le pilote prend en charge les opérations en lots, voir QSqlQuery::execBatch() |
QSqlDriver::SimpleLocking | 9 | Si le pilote interdit un verrou d'écriture sur une table alors que d'autres requêtes ont un verrou de lecture sur cette table. |
QSqlDriver::LowPrecisionNumbers | 10 | Si le pilote permet de récupérer des valeurs numériques avec une faible précision. |
QSqlDriver::EventNotifications | 11 | Si le pilote prend en charge les notifications d'événements de la base de données. |
QSqlDriver::FinishQuery | 12 | Si le pilote peut effectuer un nettoyage de bas niveau des ressources lorsque QSqlQuery::finish() est appelé. |
QSqlDriver::MultipleResultSets | 13 | Le pilote peut-il accéder à plusieurs ensembles de résultats renvoyés par des instructions ou des procédures stockées mises en lots ? |
QSqlDriver::CancelQuery | 14 | Si le pilote permet d'annuler une requête en cours d'exécution. |
Pour plus d'informations sur les fonctionnalités prises en charge, consultez la documentation du piloteQt SQL .
Voir également hasFeature().
enum QSqlDriver::IdentifierType
Cette énumération contient une liste des types d'identificateurs SQL.
| Constante | Valeur | Description |
|---|---|---|
QSqlDriver::FieldName | 0 | Nom d'un champ SQL |
QSqlDriver::TableName | 1 | Un nom de table SQL |
enum QSqlDriver::NotificationSource
Cette énumération contient une liste des sources de notification SQL.
| Constante | Valeur | Description de la source de notification |
|---|---|---|
QSqlDriver::UnknownSource | 0 | La source de notification est inconnue |
QSqlDriver::SelfSource | 1 | La source de notification est cette connexion |
QSqlDriver::OtherSource | 2 | La source de la notification est une autre connexion |
enum QSqlDriver::StatementType
Cette énumération contient une liste de types d'instructions SQL (ou de clauses) que le pilote peut créer.
| Constante | Valeur | Description |
|---|---|---|
QSqlDriver::WhereStatement | 0 | Une instruction SQL WHERE (par exemple, WHERE f = 5). |
QSqlDriver::SelectStatement | 1 | Une instruction SQL SELECT (par exemple, SELECT f FROM t). |
QSqlDriver::UpdateStatement | 2 | Une déclaration SQL UPDATE (par exemple, UPDATE TABLE t set f = 1). |
QSqlDriver::InsertStatement | 3 | Une déclaration SQL INSERT (par exemple, INSERT INTO t (f) values (1)). |
QSqlDriver::DeleteStatement | 4 | Une instruction SQL DELETE (par exemple, DELETE FROM t). |
Voir également sqlStatement().
Documentation sur les propriétés
[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
Cette propriété définit la politique de précision pour la connexion à la base de données.
Note : La définition de la politique de précision n'affecte pas les requêtes en cours.
Cette propriété a été introduite dans Qt 6.8.
Fonctions d'accès :
| QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
| void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
Voir aussi QSql::NumericalPrecisionPolicy, QSqlQuery::numericalPrecisionPolicy, et QSqlDatabase::numericalPrecisionPolicy.
Documentation sur les fonctions membres
[explicit] QSqlDriver::QSqlDriver(QObject *parent = nullptr)
Construit un nouveau pilote avec l'adresse parent.
[virtual noexcept] QSqlDriver::~QSqlDriver()
Détruit l'objet et libère les ressources allouées.
[virtual] bool QSqlDriver::beginTransaction()
Cette fonction est appelée pour commencer une transaction. Si elle réussit, elle renvoie true, sinon elle renvoie false. L'implémentation par défaut ne fait rien et renvoie false.
Voir également commitTransaction() et rollbackTransaction().
[pure virtual] void QSqlDriver::close()
Les classes dérivées doivent réimplémenter cette fonction virtuelle pure afin de fermer la connexion à la base de données. Retourne true en cas de succès, false en cas d'échec.
Voir aussi open() et setOpen().
[virtual] bool QSqlDriver::commitTransaction()
Cette fonction est appelée pour valider une transaction. Si elle réussit, elle renvoie true, sinon elle renvoie false. L'implémentation par défaut ne fait rien et renvoie false.
Voir également beginTransaction() et rollbackTransaction().
[since 6.9] QString QSqlDriver::connectionName() const
Renvoie le nom de la connexion à la base de données par laquelle le pilote a été créé avec QSqlDatabase::addDatabase()
Cette fonction a été introduite dans Qt 6.9.
[pure virtual] QSqlResult *QSqlDriver::createResult() const
Crée un résultat SQL vide dans la base de données. Les classes dérivées doivent réimplémenter cette fonction et renvoyer à l'appelant un objet QSqlResult adapté à leur base de données.
[virtual] QString QSqlDriver::escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const
Renvoie l'adresse identifier échappée conformément aux règles de la base de données. identifier peut être un nom de table ou un nom de champ, en fonction de type.
L'implémentation par défaut ne fait rien.
Voir aussi isIdentifierEscaped().
[virtual] QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings = false) const
Renvoie une représentation sous forme de chaîne de caractères de la valeur field pour la base de données. Cette représentation est utilisée, par exemple, lors de la construction d'instructions INSERT et UPDATE.
L'implémentation par défaut renvoie la valeur formatée sous forme de chaîne selon les règles suivantes :
- Si field est une donnée de caractère, la valeur est renvoyée entre guillemets simples, ce qui est approprié pour de nombreuses bases de données SQL. Tous les caractères guillemets simples intégrés sont échappés (remplacés par deux caractères guillemets simples). Si trimStrings est vrai (faux par défaut), tous les espaces blancs de fin de champ sont supprimés.
- Si field est une date/heure, la valeur est formatée au format ISO et placée entre guillemets simples. Si les données relatives à la date et à l'heure ne sont pas valides, "NULL" est renvoyé.
- Si field est une donnée bytearray et que le pilote peut éditer des champs binaires, la valeur est formatée sous la forme d'une chaîne hexadécimale.
- Pour tout autre type de champ, la fonction toString() est appelée sur sa valeur et le résultat est renvoyé.
Voir aussi QVariant::toString().
[virtual] QVariant QSqlDriver::handle() const
Renvoie l'identifiant de base de données de bas niveau enveloppé dans un QVariant ou une variante invalide s'il n'y a pas d'identifiant.
Attention : Utilisez ceci avec la plus grande prudence et seulement si vous savez ce que vous faites.
Avertissement : L'identifiant retourné ici peut devenir un pointeur périmé si la connexion est modifiée (par exemple, si vous fermez la connexion).
Attention : L'identifiant peut être NULL si la connexion n'est pas encore ouverte.
L'identifiant retourné ici dépend de la base de données, vous devez demander le nom du type de la variante avant d'y accéder.
Cet exemple récupère l'identifiant d'une connexion à sqlite :
QSqlDatabase db = QSqlDatabase::database(); QVariant v = db.driver()->handle(); if (v.isValid() && (qstrcmp(v.typeName(), "sqlite3*") == 0)) { // v.data() returns a pointer to the handle sqlite3 *handle = *static_cast<sqlite3 **>(v.data()); if (handle) { // ... } }
Cet extrait renvoie l'identifiant pour PostgreSQL ou MySQL :
if (qstrcmp(v.typeName(), "PGconn*") == 0) { PGconn *handle = *static_cast<PGconn **>(v.data()); if (handle) { // ... } } if (qstrcmp(v.typeName(), "MYSQL*") == 0) { MYSQL *handle = *static_cast<MYSQL **>(v.data()); if (handle) { // ... } }
Voir aussi QSqlResult::handle().
[pure virtual] bool QSqlDriver::hasFeature(QSqlDriver::DriverFeature feature) const
Renvoie true si le pilote prend en charge la fonctionnalité feature; sinon, renvoie false.
Notez que certaines bases de données doivent être open() avant que cela puisse être déterminé.
Voir également DriverFeature.
[virtual] bool QSqlDriver::isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const
Renvoie si identifier est échappé conformément aux règles de la base de données. identifier peut être un nom de table ou un nom de champ, en fonction de type.
Réimplémentez cette fonction si vous souhaitez fournir votre propre implémentation dans votre sous-classe QSqlDriver,
Voir aussi stripDelimiters() et escapeIdentifier().
[virtual] bool QSqlDriver::isOpen() const
Renvoie true si la connexion à la base de données est ouverte, sinon renvoie false.
bool QSqlDriver::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.
QSqlError QSqlDriver::lastError() const
Renvoie un objet QSqlError qui contient des informations sur la dernière erreur survenue dans la base de données.
Voir aussi setLastError().
[virtual, since 6.0] int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const
Renvoie la longueur maximale de l'identifiant type en fonction des paramètres de la base de données. Renvoie INT_MAX par défaut s'il n'y a pas de longueur maximale pour la base de données.
Cette fonction a été introduite dans Qt 6.0.
[signal] void QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)
Ce signal est émis lorsque la base de données affiche une notification d'événement à laquelle le pilote s'est abonné. name identifie la notification d'événement, source indique la source du signal, payload contient les données supplémentaires éventuellement fournies avec la notification.
Voir aussi subscribeToNotification().
QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const
Renvoie la politique de précision numérique.
Note : fonction Getter pour la propriété numericalPrecisionPolicy.
Voir également setNumericalPrecisionPolicy().
[pure virtual] bool QSqlDriver::open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString())
Les classes dérivées doivent réimplémenter cette fonction virtuelle pure pour ouvrir une connexion à la base de données db, en utilisant le nom d'utilisateur user, le mot de passe password, l'hôte host, le port port et les options de connexion options.
La fonction doit renvoyer true en cas de succès et false en cas d'échec.
Voir aussi setOpen().
[virtual] QSqlIndex QSqlDriver::primaryIndex(const QString &tableName) const
Renvoie l'index primaire de la table tableName. Renvoie une adresse QSqlIndex vide si la table n'a pas d'index primaire. L'implémentation par défaut renvoie un index vide.
[virtual] QSqlRecord QSqlDriver::record(const QString &tableName) const
Renvoie un site QSqlRecord contenant les noms des champs de la table tableName. Si cette table n'existe pas, un enregistrement vide est renvoyé. L'implémentation par défaut renvoie un enregistrement vide.
[virtual] bool QSqlDriver::rollbackTransaction()
Cette fonction est appelée pour annuler une transaction. Si elle réussit, elle renvoie true, sinon elle renvoie false. L'implémentation par défaut ne fait rien et renvoie false.
Voir également beginTransaction() et commitTransaction().
[virtual protected] void QSqlDriver::setLastError(const QSqlError &error)
Cette fonction est utilisée pour définir la valeur de la dernière erreur, error, survenue dans la base de données.
Voir également lastError().
void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
Remplace numericalPrecisionPolicy par precisionPolicy.
Note : Fonction de définition de la propriété numericalPrecisionPolicy.
Voir aussi numericalPrecisionPolicy().
[virtual protected] void QSqlDriver::setOpen(bool open)
Cette fonction définit l'état d'ouverture de la base de données à open. Les classes dérivées peuvent utiliser cette fonction pour signaler l'état de open().
Voir également open() et setOpenError().
[virtual protected] void QSqlDriver::setOpenError(bool error)
Cette fonction définit l'état d'erreur d'ouverture de la base de données à error. Les classes dérivées peuvent utiliser cette fonction pour signaler l'état de open(). Notez que si error est vrai, l'état ouvert de la base de données est défini comme fermé (c'est-à-dire que isOpen() renvoie false).
Voir également isOpenError(), open() et setOpen().
[virtual] QString QSqlDriver::sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
Renvoie une instruction SQL de type type pour la table tableName avec les valeurs de rec. Si preparedStatement est vrai, la chaîne contiendra des caractères génériques au lieu de valeurs.
L'indicateur généré dans chaque champ de rec détermine si le champ est inclus dans l'instruction générée.
Cette méthode peut être utilisée pour manipuler des tables sans avoir à se soucier des dialectes SQL dépendant de la base de données. Pour les instructions non préparées, les valeurs seront correctement échappées.
Dans l'instruction WHERE, chaque champ non nul de rec spécifie une condition de filtre d'égalité avec la valeur du champ ou, s'il est préparé, un espace réservé. Toutefois, qu'il soit préparé ou non, un champ nul spécifie la condition IS NULL et n'introduit jamais d'espace réservé. L'application ne doit pas tenter de lier des données pour le champ null pendant l'exécution. Le champ doit être défini avec une valeur non nulle si un espace réservé est souhaité. En outre, étant donné que les champs non nuls spécifient des conditions d'égalité et que SQL NULL n'est égal à rien, même pas à lui-même, il n'est généralement pas utile de lier un champ null à un espace réservé.
[virtual] QString QSqlDriver::stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const
Renvoie l'adresse identifier en supprimant les délimiteurs de début et de fin. identifier peut être un nom de table ou un nom de champ, en fonction de type. Si identifier n'a pas de délimiteurs de début et de fin, identifier est renvoyé sans modification.
Réimplémentez cette fonction si vous souhaitez fournir votre propre implémentation dans votre sous-classe QSqlDriver,
Voir aussi isIdentifierEscaped().
[virtual] bool QSqlDriver::subscribeToNotification(const QString &name)
Cette fonction est appelée pour s'abonner aux notifications d'événements de la base de données. name identifie la notification d'événement.
En cas de succès, elle renvoie true, sinon elle renvoie false.
La base de données doit être ouverte lorsque cette fonction est appelée. Lorsque la base de données est fermée par l'appel de close(), toutes les notifications d'événements souscrites sont automatiquement désabonnées. Notez que l'appel de open() sur une base de données déjà ouverte peut implicitement provoquer l'appel de close(), ce qui entraînera la désinscription du pilote de toutes les notifications d'événements.
Lorsqu'une notification d'événement identifiée par name est envoyée par la base de données, le signal notification() est émis.
Réimplémentez cette fonction si vous souhaitez prendre en charge les notifications d'événements dans votre propre sous-classe QSqlDriver,
Voir aussi unsubscribeFromNotification(), subscribedToNotifications() et QSqlDriver::hasFeature().
[virtual] QStringList QSqlDriver::subscribedToNotifications() const
Renvoie une liste des noms des notifications d'événements auxquelles on est actuellement abonné.
Réimplémentez cette fonction si vous souhaitez prendre en charge les notifications d'événements dans votre propre sous-classe QSqlDriver,
Voir aussi subscribeToNotification() et unsubscribeFromNotification().
[virtual] QStringList QSqlDriver::tables(QSql::TableType tableType) const
Renvoie une liste des noms des tables de la base de données. L'implémentation par défaut renvoie une liste vide.
L'argument tableType décrit les types de tables à renvoyer. Pour des raisons de compatibilité binaire, la chaîne contient la valeur de l'enum QSql::TableTypes sous forme de texte. Une chaîne vide doit être traitée comme QSql::Tables pour des raisons de compatibilité ascendante.
[virtual] bool QSqlDriver::unsubscribeFromNotification(const QString &name)
Cette fonction est appelée pour se désabonner des notifications d'événements de la base de données. name identifie la notification d'événement.
Si elle réussit, elle renvoie true, sinon elle renvoie false.
La base de données doit être ouverte lorsque cette fonction est appelée. Toutes les notifications d'événements souscrites sont automatiquement désabonnées lorsque la fonction close() est appelée.
Après l'appel de cette fonction, le signal notification() n'est plus émis lorsqu'une notification d'événement identifiée par name est envoyée par la base de données.
Réimplémentez cette fonction si vous souhaitez fournir un support de notification d'événement dans votre propre sous-classe QSqlDriver,
Voir aussi subscribeToNotification() et subscribedToNotifications().
© 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.