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. En savoir plus...

En-tête : #include <QSqlDriver>
CMake : find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake : QT += sql
Hérite de : 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 la classe ` QSqlDatabase `.

Si vous souhaitez créer vos propres pilotes SQL, vous pouvez créer une sous-classe de cette classe et réimplémenter ses fonctions virtuelles pures ainsi que les fonctions virtuelles dont vous avez besoin. Pour plus d'informations, consultez la section « Comment écrire votre propre pilote de base de données ».

Voir également QSqlDatabase et QSqlResult.

Documentation sur les types de membres

enum QSqlDriver::DriverFeature

Cette énumération contient une liste des fonctionnalités qu’un pilote peut prendre en charge. Utilisez la fonction ` hasFeature()` pour vérifier si une fonctionnalité est prise en charge ou non. Certaines fonctionnalités dépendent du serveur de base de données ; elles ne peuvent donc être déterminées avec précision qu’une fois la connexion à la base de données établie avec succès à l’aide de la fonction ` QSqlDatabase::open()`.

ConstanteValeurDescription
QSqlDriver::Transactions0Indique si le pilote prend en charge les transactions SQL.
QSqlDriver::QuerySize1Indique si la base de données est capable de renvoyer 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 ; dans ce cas, la fonction QSqlQuery::size() renverra -1.
QSqlDriver::BLOB2Indique si le pilote prend en charge les champs Binary Large Object.
QSqlDriver::Unicode3Si le pilote prend en charge les chaînes Unicode lorsque le serveur de base de données le permet.
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 de placeholders positionnels.
QSqlDriver::LastInsertId7Si le pilote prend en charge le renvoi de l'identifiant de la dernière ligne traitée.
QSqlDriver::BatchOperations8Si le pilote prend en charge les opérations par lots, voir QSqlQuery::execBatch()
QSqlDriver::SimpleLocking9Si le pilote interdit un verrou d’écriture sur une table alors que d’autres requêtes détiennent un verrou de lecture sur celle-ci.
QSqlDriver::LowPrecisionNumbers10Si le pilote autorise la récupération de valeurs numériques avec une faible précision.
QSqlDriver::EventNotifications11Si le pilote prend en charge les notifications d’événements de base de données.
QSqlDriver::FinishQuery12Si le pilote peut effectuer un nettoyage des ressources de bas niveau lorsque la fonction QSqlQuery::finish() est appelée.
QSqlDriver::MultipleResultSets13Si le pilote peut accéder à plusieurs ensembles de résultats renvoyés par des instructions par lots ou des procédures stockées.
QSqlDriver::CancelQuery14Si le pilote autorise l'annulation d'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::FieldName0Un nom de champ SQL
QSqlDriver::TableName1Un nom de table SQL

enum QSqlDriver::NotificationSource

Cette énumération contient une liste de sources de notifications SQL.

ConstanteValeurDescription
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 des types d'instructions (ou de clauses) SQL que le pilote peut créer.

ConstanteValeurDescription
QSqlDriver::WhereStatement0Une instruction SQL d'WHERE (par exemple, WHERE f = 5).
QSqlDriver::SelectStatement1Une instruction SQL de type « SELECT » (par exemple, ` SELECT f FROM t`).
QSqlDriver::UpdateStatement2Une instruction SQL d'UPDATE (par exemple, UPDATE TABLE t set f = 1).
QSqlDriver::InsertStatement3Une instruction SQL d'INSERT s (par exemple, INSERT INTO t (f) values (1)).
QSqlDriver::DeleteStatement4Une instruction SQL d’ 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.

Remarque : la définition de la politique de précision n'affecte pas les requêtes actuellement en cours d'exécution.

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 QSqlDatabase::numericalPrecisionPolicy.

Documentation des fonctions membres

[explicit] QSqlDriver::QSqlDriver(QObject *parent = nullptr)

Crée un nouveau pilote à partir de l'parent ion fournie.

[virtual noexcept] QSqlDriver::~QSqlDriver()

Détruit l'objet et libère toutes les ressources allouées.

[virtual] bool QSqlDriver::beginTransaction()

Cette fonction est appelée pour lancer une transaction. En cas de réussite, elle renvoie « true » ; dans le cas contraire, 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. Renvoie « true » en cas de succès, « false » en cas d'échec.

Voir également open() et setOpen().

[virtual] bool QSqlDriver::commitTransaction()

Cette fonction est appelée pour valider une transaction. En cas de succès, elle renvoie « true » ; dans le cas contraire, 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 avec laquelle le pilote a été créé à l'aide de la fonction ` 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'identifier, échappée conformément aux règles de la base de données. identifier peut être soit un nom de table, soit un nom de champ, selon la valeur 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 » de la base de données. Cette fonction 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 de type caractère, la valeur est renvoyée entre guillemets simples, ce qui convient à de nombreuses bases de données SQL. Les guillemets simples intégrés sont échappés (remplacés par deux guillemets simples). Si ` trimStrings ` est vrai (la valeur par défaut est faux), tous les espaces finaux sont supprimés du champ.
  • Si ` field ` contient des données de date/heure, la valeur est mise en forme au format ISO et placée entre guillemets simples. Si les données de date/heure ne sont pas valides, la valeur « NULL » est renvoyée.
  • Si field correspond à des données de type « bytearray » et que le pilote peut modifier les champs binaires, la valeur est formatée sous forme de chaîne hexadécimale.
  • Pour tout autre type de champ, la méthode toString() est appelée sur sa valeur et le résultat obtenu est renvoyé.

Voir aussi : ` QVariant::toString()`.

[virtual] QVariant QSqlDriver::handle() const

Renvoie le descripteur de base de données de bas niveau encapsulé dans un objet ` QVariant `, ou une variante non valide s'il n'y a pas de descripteur.

Avertissement : utilisez cette fonction avec la plus grande prudence et uniquement si vous savez exactement ce que vous faites.

Avertissement : le descripteur renvoyé ici peut devenir un pointeur obsolète si la connexion est modifiée (par exemple, si vous fermez la connexion).

Avertissement : le descripteur peut être NULL si la connexion n’est pas encore ouverte.

Le descripteur renvoyé ici dépend de la base de données ; vous devez interroger le nom du type de la variante avant d'y accéder.

Cet exemple récupère le descripteur 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 de code renvoie le descripteur 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 également 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 appelées via ` open()` avant que cela puisse être déterminé.

Voir également DriverFeature.

[virtual] bool QSqlDriver::isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const

Indique si ` identifier ` est échappé conformément aux règles de la base de données. ` identifier ` peut être soit un nom de table, soit un nom de champ, selon la valeur de ` type`.

Réimplémentez cette fonction si vous souhaitez fournir votre propre implémentation dans votre sous-classe de ` QSqlDriver `,

Voir également 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 ` contenant 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 conformément aux paramètres de la base de données. Renvoie INT_MAX par défaut si aucune limite maximale n'est définie 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 publie une notification d'événement à laquelle le pilote est abonné. name identifie la notification d'événement, source indique la source du signal, payload contient les données supplémentaires éventuellement transmises avec la notification.

Voir également subscribeToNotification().

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

Renvoie la propriété `numericalPrecisionPolicy`.

Remarque : fonctiongetter pour la propriété numericalPrecisionPolicy.

Voir aussi 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 afin d'ouvrir une connexion à la base de données sur l'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 réussite et « false » en cas d'échec.

Voir également setOpen().

[virtual] QSqlIndex QSqlDriver::primaryIndex(const QString &tableName) const

Renvoie l'index primaire de la table tableName. Renvoie un objet de type ` QSqlIndex ` vide si la table ne dispose pas d'index primaire. L'implémentation par défaut renvoie un index vide.

[virtual] QSqlRecord QSqlDriver::record(const QString &tableName) const

Renvoie un objet ` 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. En cas de succès, elle renvoie « true » ; dans le cas contraire, 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 permet de 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)

Définit la propriété numericalPrecisionPolicy sur precisionPolicy.

Remarque : fonctionde définition de la propriété numericalPrecisionPolicy.

Voir également 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 renvoyer l'état de la fonction « 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 sur « error ». Les classes dérivées peuvent utiliser cette fonction pour signaler l’état de la fonction ` open()`. Notez que si ` error ` est vrai, l’état d’ouverture de la base de données est défini sur « fermé » (c’est-à-dire que la fonction ` 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 provenant de rec. Si preparedStatement est vrai, la chaîne contiendra des espaces réservés à la place des 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 permet de manipuler des tables sans avoir à se soucier des dialectes SQL propres à chaque 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 filtrage d’égalité avec la valeur du champ ou, s’il est préparé, un espace réservé. Cependant, 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 au champ nul pendant l’exécution. Le champ doit être défini sur une valeur non nulle si l’on souhaite utiliser un espace réservé. De plus, étant donné que les champs non nuls spécifient des conditions d’égalité et que la valeur SQL NULL n’est égale à rien, pas même à elle-même, il n’est généralement pas utile d’associer une valeur nulle à un espace réservé.

[virtual] QString QSqlDriver::stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const

Renvoie la fonction ` identifier ` dont les délimiteurs de début et de fin ont été supprimés. ` identifier ` peut être soit un nom de table, soit un nom de champ, selon la valeur de ` type`. Si ` identifier ` ne comporte pas de caractères délimiteurs de début et de fin, ` identifier ` est renvoyée sans modification.

Réimplémentez cette fonction si vous souhaitez fournir votre propre implémentation dans votre sous-classe de QSqlDriver,

Voir également isIdentifierEscaped().

[virtual] bool QSqlDriver::subscribeToNotification(const QString &name)

Cette fonction est appelée pour s'abonner aux notifications d'événements provenant de la base de données. ` name ` identifie la notification d'événement.

En cas de réussite, renvoie true, sinon 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 auxquelles l'utilisateur est abonné sont automatiquement désabonnées. Notez que l'appel de ` open()`` sur une base de données déjà ouverte peut entraîner implicitement l'appel de ` close()``, ce qui provoquera le désabonnement du pilote à 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 de QSqlDriver,

Voir également unsubscribeFromNotification(), subscribedToNotifications() et QSqlDriver::hasFeature().

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

Renvoie une liste des noms des notifications d'événements auxquelles l'utilisateur est actuellement abonné.

Réimplémentez cette fonction si vous souhaitez prendre en charge les notifications d'événements dans votre propre sous-classe de ` QSqlDriver `,

Voir également ` subscribeToNotification()` et ` unsubscribeFromNotification()`.

[virtual] QStringList QSqlDriver::tables(QSql::TableType tableType) const

Renvoie une liste contenant les noms des tables de la base de données. L’implémentation par défaut renvoie une liste vide.

L'argument tableType spécifie les types de tables à renvoyer. Pour des raisons de compatibilité binaire, la chaîne contient la valeur de l'énumération 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 permet de se désabonner des notifications d'événements provenant de la base de données. L'name identifie la notification d'événement.

En cas de succès, renvoie true ; sinon, renvoie false.

La base de données doit être ouverte lors de l'appel de cette fonction. Toutes les notifications d'événements auxquelles l'utilisateur est abonné sont automatiquement désabonnées lorsque la fonction close() est appelée.

Après l’appel de cette fonction, le signal ` notification()` ne sera plus émis lorsqu’une notification d’événement identifiée par ` name ` sera diffusée par la base de données.

Réimplémentez cette fonction si vous souhaitez prendre en charge les notifications d’événements dans votre propre sous-classe de ` QSqlDriver `,

Voir également 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.