QSqlDriver Class

Die Klasse QSqlDriver ist eine abstrakte Basisklasse für den Zugriff auf bestimmte SQL-Datenbanken. Mehr...

Kopfzeile: #include <QSqlDriver>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Vererbungen: QObject

Öffentliche Typen

enum DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries, …, CancelQuery }
enum IdentifierType { FieldName, TableName }
enum NotificationSource { UnknownSource, SelfSource, OtherSource }
enum StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement }

Eigenschaften

Öffentliche Funktionen

QSqlDriver(QObject *parent = nullptr)
virtual ~QSqlDriver()
virtual bool beginTransaction()
virtual void close() = 0
virtual bool commitTransaction()
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)

Signale

void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

Geschützte Funktionen

virtual void setLastError(const QSqlError &error)
virtual void setOpen(bool open)
virtual void setOpenError(bool error)

Detaillierte Beschreibung

Diese Klasse sollte nicht direkt verwendet werden. Verwenden Sie stattdessen QSqlDatabase.

Wenn Sie Ihre eigenen SQL-Treiber erstellen wollen, können Sie diese Klasse unterklassifizieren und ihre rein virtuellen Funktionen und die von Ihnen benötigten virtuellen Funktionen neu implementieren. Weitere Informationen finden Sie unter Wie Sie Ihren eigenen Datenbanktreiber schreiben.

Siehe auch QSqlDatabase und QSqlResult.

Dokumentation der Mitgliedstypen

enum QSqlDriver::DriverFeature

Diese Aufzählung enthält eine Liste von Funktionen, die ein Treiber unterstützen kann. Verwenden Sie hasFeature(), um abzufragen, ob ein Merkmal unterstützt wird oder nicht. Einige Funktionen hängen vom Datenbankserver ab, so dass sie erst dann richtig bestimmt werden können, wenn die Datenbankverbindung erfolgreich mit QSqlDatabase::open() geöffnet wurde.

KonstanteWertBeschreibung
QSqlDriver::Transactions0Ob der Treiber SQL-Transaktionen unterstützt.
QSqlDriver::QuerySize1Ob die Datenbank in der Lage ist, die Größe einer Abfrage zu melden. Beachten Sie, dass einige Datenbanken die Rückgabe der Größe (d. h. der Anzahl der zurückgegebenen Zeilen) einer Abfrage nicht unterstützen; in diesem Fall gibt QSqlQuery::size() -1 zurück.
QSqlDriver::BLOB2Ob der Treiber Binary Large Object Felder unterstützt.
QSqlDriver::Unicode3Ob der Treiber Unicode-Strings unterstützt, wenn der Datenbankserver dies tut.
QSqlDriver::PreparedQueries4Ob der Treiber die vorbereitete Ausführung von Abfragen unterstützt.
QSqlDriver::NamedPlaceholders5Ob der Treiber die Verwendung von benannten Platzhaltern unterstützt.
QSqlDriver::PositionalPlaceholders6Ob der Treiber die Verwendung von Positionsplatzhaltern unterstützt.
QSqlDriver::LastInsertId7Ob der Treiber die Rückgabe der Id der zuletzt berührten Zeile unterstützt.
QSqlDriver::BatchOperations8Ob der Treiber Stapeloperationen unterstützt, siehe QSqlQuery::execBatch()
QSqlDriver::SimpleLocking9ob der Treiber eine Schreibsperre für eine Tabelle nicht zulässt, während andere Abfragen eine Lesesperre für sie haben.
QSqlDriver::LowPrecisionNumbers10Ob der Treiber das Abrufen von numerischen Werten mit geringer Genauigkeit erlaubt.
QSqlDriver::EventNotifications11Ob der Treiber Datenbankereignisbenachrichtigungen unterstützt.
QSqlDriver::FinishQuery12Ob der Treiber eine Low-Level-Ressourcenbereinigung durchführen kann, wenn QSqlQuery::finish() aufgerufen wird.
QSqlDriver::MultipleResultSets13Ob der Treiber auf mehrere Ergebnismengen zugreifen kann, die von gestapelten Anweisungen oder gespeicherten Prozeduren zurückgegeben werden.
QSqlDriver::CancelQuery14Ob der Treiber das Abbrechen einer laufenden Abfrage erlaubt.

Weitere Informationen über unterstützte Funktionen finden Sie in der Dokumentation des TreibersQt SQL .

Siehe auch hasFeature().

enum QSqlDriver::IdentifierType

Diese Aufzählung enthält eine Liste von SQL-Bezeichnertypen.

KonstanteWertBeschreibung
QSqlDriver::FieldName0Ein SQL-Feldname
QSqlDriver::TableName1Ein SQL-Tabellenname

enum QSqlDriver::NotificationSource

Diese Aufzählung enthält eine Liste von SQL-Benachrichtigungsquellen.

KonstanteWertBeschreibung
QSqlDriver::UnknownSource0Die Benachrichtigungsquelle ist unbekannt
QSqlDriver::SelfSource1Die Benachrichtigungsquelle ist diese Verbindung
QSqlDriver::OtherSource2Die Benachrichtigungsquelle ist eine andere Verbindung

enum QSqlDriver::StatementType

Diese Aufzählung enthält eine Liste der Typen von SQL-Anweisungen (oder Klauseln), die der Treiber erstellen kann.

KonstanteWertBeschreibung
QSqlDriver::WhereStatement0Eine SQL WHERE -Anweisung (z. B. WHERE f = 5).
QSqlDriver::SelectStatement1Eine SQL SELECT -Anweisung (z. B. SELECT f FROM t).
QSqlDriver::UpdateStatement2Eine SQL UPDATE -Anweisung (z. B. UPDATE TABLE t set f = 1).
QSqlDriver::InsertStatement3Eine SQL INSERT Anweisung (z.B., INSERT INTO t (f) values (1)).
QSqlDriver::DeleteStatement4Eine SQL DELETE -Anweisung (z. B. DELETE FROM t).

Siehe auch sqlStatement().

Dokumentation der Eigenschaften

[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy

Diese Eigenschaft enthält die Genauigkeitsrichtlinie für die Datenbankverbindung.

Hinweis: Die Einstellung der Präzisionsrichtlinie hat keinen Einfluss auf die derzeit aktiven Abfragen.

Diese Eigenschaft wurde in Qt 6.8 eingeführt.

Zugriffsfunktionen:

QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

Siehe auch QSql::NumericalPrecisionPolicy, QSqlQuery::numericalPrecisionPolicy, und QSqlDatabase::numericalPrecisionPolicy.

Dokumentation der Mitgliedsfunktionen

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

Konstruiert einen neuen Treiber mit dem angegebenen parent.

[virtual noexcept] QSqlDriver::~QSqlDriver()

Zerstört das Objekt und gibt alle zugewiesenen Ressourcen frei.

[virtual] bool QSqlDriver::beginTransaction()

Diese Funktion wird aufgerufen, um eine Transaktion zu beginnen. Bei Erfolg gibt sie true zurück, andernfalls false. Die Standardimplementierung tut nichts und gibt false zurück.

Siehe auch commitTransaction() und rollbackTransaction().

[pure virtual] void QSqlDriver::close()

Abgeleitete Klassen müssen diese rein virtuelle Funktion reimplementieren, um die Datenbankverbindung zu schließen. Rückgabe true bei Erfolg, false bei Fehlschlag.

Siehe auch open() und setOpen().

[virtual] bool QSqlDriver::commitTransaction()

Diese Funktion wird aufgerufen, um eine Transaktion zu bestätigen. Bei Erfolg gibt sie true zurück, andernfalls false. Die Standardimplementierung tut nichts und gibt false zurück.

Siehe auch beginTransaction() und rollbackTransaction().

[pure virtual] QSqlResult *QSqlDriver::createResult() const

Erzeugt ein leeres SQL-Ergebnis in der Datenbank. Abgeleitete Klassen müssen diese Funktion neu implementieren und ein für ihre Datenbank geeignetes QSqlResult Objekt an den Aufrufer zurückgeben.

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

Gibt den identifier zurück, der gemäß den Datenbankregeln escaped wurde. identifier kann entweder ein Tabellenname oder ein Feldname sein, abhängig von type.

Die Standardimplementierung tut nichts.

Siehe auch isIdentifierEscaped().

[virtual] QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings = false) const

Gibt eine String-Darstellung des Wertes field für die Datenbank zurück. Dies wird z. B. bei der Erstellung von INSERT- und UPDATE-Anweisungen verwendet.

Die Standardimplementierung gibt den Wert gemäß den folgenden Regeln als String formatiert zurück:

  • Wenn es sich bei field um Zeichendaten handelt, wird der Wert in einfache Anführungszeichen eingeschlossen zurückgegeben, was für viele SQL-Datenbanken geeignet ist. Eingebettete einfache Anführungszeichen werden escaped (durch zwei einfache Anführungszeichen ersetzt). Wenn trimStrings true ist (die Vorgabe ist false), werden alle Leerzeichen am Ende des Feldes abgeschnitten.
  • Handelt es sich bei field um Datums-/Zeitangaben, wird der Wert im ISO-Format formatiert und in einfache Anführungszeichen gesetzt. Sind die Datums-/Zeitangaben ungültig, wird "NULL" zurückgegeben.
  • Handelt es sich bei field um bytearray Daten und kann der Treiber binäre Felder bearbeiten, wird der Wert als hexadezimale Zeichenfolge formatiert.
  • Bei allen anderen Feldtypen wird toString() für den Wert aufgerufen und das Ergebnis zurückgegeben.

Siehe auch QVariant::toString().

[virtual] QVariant QSqlDriver::handle() const

Gibt das Low-Level-Datenbank-Handle zurück, das in ein QVariant eingewickelt ist, oder eine ungültige Variante, wenn es kein Handle gibt.

Warnung: Verwenden Sie dies mit äußerster Vorsicht und nur, wenn Sie wissen, was Sie tun.

Warnung: Das hier zurückgegebene Handle kann zu einem veralteten Zeiger werden, wenn die Verbindung geändert wird (zum Beispiel, wenn Sie die Verbindung schließen).

Warnung: Der Handle kann NULL sein, wenn die Verbindung noch nicht geöffnet ist.

Das hier zurückgegebene Handle ist datenbankabhängig, Sie sollten den Typnamen der Variante abfragen, bevor Sie auf sie zugreifen.

Dieses Beispiel ruft das Handle für eine Verbindung zu sqlite ab:

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) {
        // ...
    }
}

Dieses Snippet gibt das Handle für PostgreSQL oder MySQL zurück:

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) {
        // ...
    }
}

Siehe auch QSqlResult::handle().

[pure virtual] bool QSqlDriver::hasFeature(QSqlDriver::DriverFeature feature) const

Gibt true zurück, wenn der Treiber die Funktion feature unterstützt; andernfalls wird false zurückgegeben.

Beachten Sie, dass einige Datenbanken open() sein müssen, bevor dies festgestellt werden kann.

Siehe auch DriverFeature.

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

Gibt zurück, ob identifier gemäß den Datenbankregeln escaped ist. identifier kann entweder ein Tabellenname oder ein Feldname sein, abhängig von type.

Reimplementieren Sie diese Funktion, wenn Sie Ihre eigene Implementierung in Ihrer QSqlDriver Unterklasse bereitstellen möchten,

Siehe auch stripDelimiters() und escapeIdentifier().

[virtual] bool QSqlDriver::isOpen() const

Gibt true zurück, wenn die Datenbankverbindung geöffnet ist; andernfalls wird false zurückgegeben.

bool QSqlDriver::isOpenError() const

Gibt true zurück, wenn beim Öffnen der Datenbankverbindung ein Fehler aufgetreten ist; andernfalls wird false zurückgegeben.

QSqlError QSqlDriver::lastError() const

Gibt ein QSqlError Objekt zurück, das Informationen über den letzten in der Datenbank aufgetretenen Fehler enthält.

Siehe auch setLastError().

[virtual, since 6.0] int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const

Gibt die maximale Länge für den Bezeichner type gemäß den Datenbankeinstellungen zurück. Gibt standardmäßig INT_MAX zurück, wenn es kein Maximum für die Datenbank gibt.

Diese Funktion wurde in Qt 6.0 eingeführt.

[signal] void QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

Dieses Signal wird ausgegeben, wenn die Datenbank eine Ereignisbenachrichtigung veröffentlicht, die der Treiber abonniert hat. name identifiziert die Ereignisbenachrichtigung, source gibt die Signalquelle an, payload enthält die zusätzlichen Daten, die optional mit der Benachrichtigung geliefert werden.

Siehe auch subscribeToNotification().

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

Gibt die numericalPrecisionPolicy zurück.

Hinweis: Getter-Funktion für die Eigenschaft numericalPrecisionPolicy.

Siehe auch 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())

Abgeleitete Klassen müssen diese rein virtuelle Funktion reimplementieren, um eine Datenbankverbindung zur Datenbank db unter Verwendung des Benutzernamens user, des Passworts password, des Hosts host, des Ports port und der Verbindungsoptionen options zu öffnen.

Die Funktion muss im Erfolgsfall true und im Fehlerfall false zurückgeben.

Siehe auch setOpen().

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

Gibt den Primärindex für die Tabelle tableName zurück. Gibt einen leeren QSqlIndex zurück, wenn die Tabelle keinen primären Index hat. Die Standardimplementierung gibt einen leeren Index zurück.

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

Gibt eine QSqlRecord zurück, die mit den Namen der Felder der Tabelle tableName gefüllt ist. Wenn keine solche Tabelle existiert, wird ein leerer Datensatz zurückgegeben. Die Standardimplementierung gibt einen leeren Datensatz zurück.

[virtual] bool QSqlDriver::rollbackTransaction()

Diese Funktion wird zum Rollback einer Transaktion aufgerufen. Bei Erfolg wird true zurückgegeben, andernfalls false. Die Standardimplementierung tut nichts und gibt false zurück.

Siehe auch beginTransaction() und commitTransaction().

[virtual protected] void QSqlDriver::setLastError(const QSqlError &error)

Mit dieser Funktion wird der Wert des letzten in der Datenbank aufgetretenen Fehlers, error, gesetzt.

Siehe auch lastError().

void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

Setzt numericalPrecisionPolicy auf precisionPolicy.

Hinweis: Setter-Funktion für die Eigenschaft numericalPrecisionPolicy.

Siehe auch numericalPrecisionPolicy().

[virtual protected] void QSqlDriver::setOpen(bool open)

Diese Funktion setzt den Öffnungszustand der Datenbank auf open. Abgeleitete Klassen können diese Funktion verwenden, um den Status von open() zu melden.

Siehe auch open() und setOpenError().

[virtual protected] void QSqlDriver::setOpenError(bool error)

Diese Funktion setzt den offenen Fehlerzustand der Datenbank auf error. Abgeleitete Klassen können diese Funktion verwenden, um den Status von open() zu melden. Beachten Sie, dass wenn error wahr ist, der offene Zustand der Datenbank auf geschlossen gesetzt wird (d.h. isOpen() gibt false zurück).

Siehe auch isOpenError(), open(), und setOpen().

[virtual] QString QSqlDriver::sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const

Gibt eine SQL-Anweisung vom Typ type für die Tabelle tableName mit den Werten aus rec zurück. Wenn preparedStatement wahr ist, enthält die Zeichenkette Platzhalter anstelle von Werten.

Das generierte Flag in jedem Feld von rec bestimmt, ob das Feld in der generierten Anweisung enthalten ist.

Diese Methode kann verwendet werden, um Tabellen zu manipulieren, ohne sich um datenbankabhängige SQL-Dialekte kümmern zu müssen. Bei nicht vorbereiteten Anweisungen werden die Werte korrekt escaped.

In der WHERE-Anweisung spezifiziert jedes Nicht-Null-Feld von rec eine Filterbedingung der Gleichheit mit dem Feldwert, oder, falls vorbereitet, einen Platzhalter. Ob vorbereitet oder nicht, ein Null-Feld spezifiziert die Bedingung IS NULL und führt niemals einen Platzhalter ein. Die Anwendung darf während der Ausführung nicht versuchen, Daten für das Nullfeld zu binden. Das Feld muss auf einen Nicht-Null-Wert gesetzt werden, wenn ein Platzhalter gewünscht ist. Da Nicht-Null-Felder Gleichheitsbedingungen spezifizieren und SQL NULL mit nichts gleich ist, nicht einmal mit sich selbst, ist es im Allgemeinen nicht sinnvoll, eine Null an einen Platzhalter zu binden.

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

Gibt identifier zurück, wobei die führenden und nachgestellten Begrenzungszeichen entfernt werden. identifier kann entweder ein Tabellenname oder ein Feldname sein, abhängig von type. Wenn identifier keine führenden und nachgestellten Begrenzungszeichen enthält, wird identifier ohne Änderung zurückgegeben.

Reimplementieren Sie diese Funktion, wenn Sie Ihre eigene Implementierung in Ihrer QSqlDriver Unterklasse bereitstellen möchten,

Siehe auch isIdentifierEscaped().

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

Diese Funktion wird aufgerufen, um Ereignisbenachrichtigungen aus der Datenbank zu abonnieren. name identifiziert die Ereignisbenachrichtigung.

Bei Erfolg wird true zurückgegeben, andernfalls false.

Die Datenbank muss geöffnet sein, wenn diese Funktion aufgerufen wird. Wenn die Datenbank durch Aufruf von close() geschlossen wird, werden alle abonnierten Ereignisbenachrichtigungen automatisch abbestellt. Beachten Sie, dass der Aufruf von open() bei einer bereits geöffneten Datenbank implizit dazu führen kann, dass close() aufgerufen wird, was den Treiber veranlasst, sich von allen Ereignisbenachrichtigungen abzumelden.

Wenn eine durch name identifizierte Ereignisbenachrichtigung von der Datenbank gesendet wird, wird das Signal notification() ausgegeben.

Reimplementieren Sie diese Funktion, wenn Sie die Unterstützung von Ereignisbenachrichtigungen in Ihrer eigenen QSqlDriver Unterklasse anbieten wollen,

Siehe auch unsubscribeFromNotification(), subscribedToNotifications(), und QSqlDriver::hasFeature().

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

Gibt eine Liste mit den Namen der Ereignisbenachrichtigungen zurück, die derzeit abonniert sind.

Reimplementieren Sie diese Funktion, wenn Sie in Ihrer eigenen Unterklasse QSqlDriver Unterstützung für Ereignisbenachrichtigungen anbieten möchten,

Siehe auch subscribeToNotification() und unsubscribeFromNotification().

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

Gibt eine Liste mit den Namen der Tabellen in der Datenbank zurück. Die Standardimplementierung gibt eine leere Liste zurück.

Das Argument tableType beschreibt, welche Typen von Tabellen zurückgegeben werden sollen. Aus Gründen der Binärkompatibilität enthält der String den Wert des enum QSql::TableTypes als Text. Eine leere Zeichenkette sollte aus Gründen der Abwärtskompatibilität als QSql::Tables behandelt werden.

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

Diese Funktion wird aufgerufen, um sich von Ereignisbenachrichtigungen aus der Datenbank abzumelden. name identifiziert die Ereignisbenachrichtigung.

Bei Erfolg wird true zurückgegeben, andernfalls false.

Die Datenbank muss geöffnet sein, wenn diese Funktion aufgerufen wird. Alle abonnierten Ereignisbenachrichtigungen werden automatisch abbestellt, wenn die Funktion close() aufgerufen wird.

Nach dem Aufruf dieser Funktion wird das Signal notification() nicht mehr ausgegeben, wenn eine durch name identifizierte Ereignisbenachrichtigung von der Datenbank veröffentlicht wird.

Reimplementieren Sie diese Funktion, wenn Sie in Ihrer eigenen QSqlDriver Unterklasse Unterstützung für Ereignisbenachrichtigungen anbieten wollen,

Siehe auch subscribeToNotification() und subscribedToNotifications().

© 2025 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.