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 |
- Liste de tous les membres, y compris les membres hérités
- QSqlDriver fait partie des classes de base 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 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()`.
| Constante | Valeur | Description |
|---|---|---|
QSqlDriver::Transactions | 0 | Indique si le pilote prend en charge les transactions SQL. |
QSqlDriver::QuerySize | 1 | Indique 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::BLOB | 2 | Indique si le pilote prend en charge les champs Binary Large Object. |
QSqlDriver::Unicode | 3 | Si le pilote prend en charge les chaînes Unicode lorsque le serveur de base de données le permet. |
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 de placeholders positionnels. |
QSqlDriver::LastInsertId | 7 | Si le pilote prend en charge le renvoi de l'identifiant de la dernière ligne traitée. |
QSqlDriver::BatchOperations | 8 | Si le pilote prend en charge les opérations par lots, voir QSqlQuery::execBatch() |
QSqlDriver::SimpleLocking | 9 | Si 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::LowPrecisionNumbers | 10 | Si le pilote autorise la récupération de valeurs numériques avec une faible précision. |
QSqlDriver::EventNotifications | 11 | Si le pilote prend en charge les notifications d’événements de base de données. |
QSqlDriver::FinishQuery | 12 | Si le pilote peut effectuer un nettoyage des ressources de bas niveau lorsque la fonction QSqlQuery::finish() est appelée. |
QSqlDriver::MultipleResultSets | 13 | Si le pilote peut accéder à plusieurs ensembles de résultats renvoyés par des instructions par lots ou des procédures stockées. |
QSqlDriver::CancelQuery | 14 | Si 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.
| Constante | Valeur | Description |
|---|---|---|
QSqlDriver::FieldName | 0 | Un nom de champ SQL |
QSqlDriver::TableName | 1 | Un nom de table SQL |
enum QSqlDriver::NotificationSource
Cette énumération contient une liste de sources de notifications SQL.
| Constante | Valeur | Description |
|---|---|---|
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 des types d'instructions (ou de clauses) SQL que le pilote peut créer.
| Constante | Valeur | Description |
|---|---|---|
QSqlDriver::WhereStatement | 0 | Une instruction SQL d'WHERE (par exemple, WHERE f = 5). |
QSqlDriver::SelectStatement | 1 | Une instruction SQL de type « SELECT » (par exemple, ` SELECT f FROM t`). |
QSqlDriver::UpdateStatement | 2 | Une instruction SQL d'UPDATE (par exemple, UPDATE TABLE t set f = 1). |
QSqlDriver::InsertStatement | 3 | Une instruction SQL d'INSERT s (par exemple, INSERT INTO t (f) values (1)). |
QSqlDriver::DeleteStatement | 4 | Une 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.