Sur cette page

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

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

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().

ConstanteValeurDescription
QSqlDriver::Transactions0Si le pilote prend en charge les transactions SQL.
QSqlDriver::QuerySize1Si 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::BLOB2Si le pilote prend en charge les champs Binary Large Object.
QSqlDriver::Unicode3Si le pilote prend en charge les chaînes Unicode si le serveur de base de données le fait.
QSqlDriver::PreparedQueries4Si le pilote prend en charge l'exécution de requêtes préparées.
QSqlDriver::NamedPlaceholders5Si le pilote prend en charge l'utilisation d'espaces réservés nommés.
QSqlDriver::PositionalPlaceholders6Si le pilote prend en charge l'utilisation d'espaces réservés positionnels.
QSqlDriver::LastInsertId7Si le pilote prend en charge le renvoi de l'identifiant de la dernière ligne touchée.
QSqlDriver::BatchOperations8Si le pilote prend en charge les opérations en lots, voir QSqlQuery::execBatch()
QSqlDriver::SimpleLocking9Si 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::LowPrecisionNumbers10Si le pilote permet de récupérer des valeurs numériques avec une faible précision.
QSqlDriver::EventNotifications11Si le pilote prend en charge les notifications d'événements de la base de données.
QSqlDriver::FinishQuery12Si le pilote peut effectuer un nettoyage de bas niveau des ressources lorsque QSqlQuery::finish() est appelé.
QSqlDriver::MultipleResultSets13Le 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::CancelQuery14Si 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.

ConstanteValeurDescription
QSqlDriver::FieldName0Nom d'un champ SQL
QSqlDriver::TableName1Un nom de table SQL

enum QSqlDriver::NotificationSource

Cette énumération contient une liste des sources de notification SQL.

ConstanteValeurDescription de la source de notification
QSqlDriver::UnknownSource0La source de notification est inconnue
QSqlDriver::SelfSource1La source de notification est cette connexion
QSqlDriver::OtherSource2La 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.

ConstanteValeurDescription
QSqlDriver::WhereStatement0Une instruction SQL WHERE (par exemple, WHERE f = 5).
QSqlDriver::SelectStatement1Une instruction SQL SELECT (par exemple, SELECT f FROM t).
QSqlDriver::UpdateStatement2Une déclaration SQL UPDATE (par exemple, UPDATE TABLE t set f = 1).
QSqlDriver::InsertStatement3Une déclaration SQL INSERT (par exemple, INSERT INTO t (f) values (1)).
QSqlDriver::DeleteStatement4Une 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.