QSqlDatabase Class
Die Klasse QSqlDatabase verwaltet eine Verbindung zu einer Datenbank. Mehr...
Kopfzeile: | #include <QSqlDatabase> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
qmake: | QT += sql |
- Liste aller Mitglieder, einschließlich vererbter Mitglieder
- Veraltete Mitglieder
- QSqlDatabase ist Teil von Database Classes.
Eigenschaften
(since 6.8)
numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
Öffentliche Funktionen
QSqlDatabase() | |
QSqlDatabase(const QSqlDatabase &other) | |
~QSqlDatabase() | |
void | close() |
bool | commit() |
QString | connectOptions() const |
QString | connectionName() const |
QString | databaseName() const |
QSqlDriver * | driver() const |
QString | driverName() const |
QString | hostName() const |
bool | isOpen() const |
bool | isOpenError() const |
bool | isValid() const |
QSqlError | lastError() const |
(since 6.8) bool | moveToThread(QThread *targetThread) |
QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
bool | open() |
bool | open(const QString &user, const QString &password) |
QString | password() const |
int | port() const |
QSqlIndex | primaryIndex(const QString &tablename) const |
QSqlRecord | record(const QString &tablename) const |
bool | rollback() |
void | setConnectOptions(const QString &options = QString()) |
void | setDatabaseName(const QString &name) |
void | setHostName(const QString &host) |
void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
void | setPassword(const QString &password) |
void | setPort(int port) |
void | setUserName(const QString &name) |
QStringList | tables(QSql::TableType type = QSql::Tables) const |
(since 6.8) QThread * | thread() const |
bool | transaction() |
QString | userName() const |
QSqlDatabase & | operator=(const QSqlDatabase &other) |
Statische öffentliche Mitglieder
QSqlDatabase | addDatabase(const QString &type, const QString &connectionName = QLatin1StringView(defaultConnection)) |
QSqlDatabase | addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1StringView(defaultConnection)) |
QSqlDatabase | cloneDatabase(const QSqlDatabase &other, const QString &connectionName) |
QSqlDatabase | cloneDatabase(const QString &other, const QString &connectionName) |
QStringList | connectionNames() |
bool | contains(const QString &connectionName = QLatin1StringView(defaultConnection)) |
QSqlDatabase | database(const QString &connectionName = QLatin1StringView(defaultConnection), bool open = true) |
QStringList | drivers() |
bool | isDriverAvailable(const QString &name) |
void | registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator) |
void | removeDatabase(const QString &connectionName) |
Geschützte Funktionen
QSqlDatabase(QSqlDriver *driver) | |
QSqlDatabase(const QString &type) |
Detaillierte Beschreibung
Die Klasse QSqlDatabase bietet eine Schnittstelle für den Zugriff auf eine Datenbank über eine Verbindung. Eine Instanz von QSqlDatabase stellt die Verbindung dar. Die Verbindung ermöglicht den Zugriff auf die Datenbank über einen der unterstützten Datenbanktreiber, die von QSqlDriver abgeleitet sind. Alternativ können Sie Ihren eigenen Datenbanktreiber von QSqlDriver ableiten. Weitere Informationen finden Sie unter Wie Sie Ihren eigenen Datenbanktreiber schreiben. Auf eine QSqlDatabase-Instanz darf nur von dem Thread zugegriffen werden, in dem sie erstellt wurde. Daher müssen Sie darauf achten, dass Sie sie im richtigen Kontext erstellen. Alternativ können Sie den Kontext auch mit QSqlDatabase::moveToThread() ändern.
Erstellen Sie eine Verbindung (d.h. eine Instanz von QSqlDatabase), indem Sie eine der statischen addDatabase()-Funktionen aufrufen, wobei Sie den zu verwendenden Treiber oder den Typ des Treibers (je nach Datenbanktyp) und einen Verbindungsnamen angeben. Eine Verbindung ist durch ihren eigenen Namen bekannt, nicht durch den Namen der Datenbank, mit der sie verbunden ist. Sie können mehrere Verbindungen zu einer Datenbank haben. QSqlDatabase unterstützt auch das Konzept einer Standardverbindung, die eine unbenannte Verbindung ist. Um die Standardverbindung zu erstellen, übergeben Sie beim Aufruf von addDatabase() nicht das Argument Verbindungsname. Anschließend wird die Standardverbindung angenommen, wenn Sie eine statische Mitgliedsfunktion aufrufen, ohne den Verbindungsnamen anzugeben. Das folgende Snippet zeigt, wie man eine Standardverbindung zu einer PostgreSQL-Datenbank erstellt und öffnet:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("acidalia"); db.setDatabaseName("customdb"); db.setUserName("mojito"); db.setPassword("J0a1m8"); bool ok = db.open();
Nachdem das QSqlDatabase-Objekt erstellt wurde, setzen Sie die Verbindungsparameter mit setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() und setConnectOptions(). Rufen Sie dann open() auf, um die physische Verbindung zur Datenbank zu aktivieren. Die Verbindung ist erst nutzbar, wenn Sie sie öffnen.
Die oben definierte Verbindung wird die Standardverbindung sein, da wir addDatabase() keinen Verbindungsnamen gegeben haben. Anschließend können Sie die Standardverbindung erhalten, indem Sie database() ohne das Argument des Verbindungsnamens aufrufen:
QSqlDatabase db = QSqlDatabase::database();
QSqlDatabase ist eine Werteklasse. Änderungen, die an einer Datenbankverbindung über eine Instanz von QSqlDatabase vorgenommen werden, wirken sich auf andere Instanzen von QSqlDatabase aus, die dieselbe Verbindung darstellen. Verwenden Sie cloneDatabase(), um eine unabhängige Datenbankverbindung basierend auf einer bestehenden zu erstellen.
Warnung: Es wird dringend empfohlen, dass Sie keine Kopie der QSqlDatabase als Mitglied einer Klasse behalten, da dies verhindert, dass die Instanz beim Beenden korrekt bereinigt wird. Wenn Sie auf eine bestehende QSqlDatabase zugreifen müssen, sollten Sie dies mit database() tun. Wenn Sie sich für eine QSqlDatabase Member-Variable entschieden haben, muss diese gelöscht werden, bevor die QCoreApplication Instanz gelöscht wird, da dies sonst zu undefiniertem Verhalten führen kann.
Wenn Sie mehrere Datenbankverbindungen erstellen, geben Sie für jede einen eindeutigen Verbindungsnamen an, wenn Sie addDatabase() aufrufen. Verwenden Sie database() mit einem Verbindungsnamen, um diese Verbindung zu erhalten. Verwenden Sie removeDatabase() mit einem Verbindungsnamen, um eine Verbindung zu entfernen. QSqlDatabase gibt eine Warnung aus, wenn Sie versuchen, eine Verbindung zu entfernen, die von anderen QSqlDatabase Objekten referenziert wird. Verwenden Sie contains(), um zu sehen, ob ein bestimmter Verbindungsname in der Liste der Verbindungen enthalten ist.
Einige Hilfsmethoden: | |
---|---|
tables() | gibt die Liste der Tabellen zurück |
primaryIndex() | gibt den Primärindex einer Tabelle zurück |
record() | gibt Metainformationen über die Felder einer Tabelle zurück |
transaction() | Startet eine Transaktion |
commit() | speichert und schließt eine Transaktion ab |
rollback() | bricht eine Transaktion ab |
hasFeature() | prüft, ob ein Treiber Transaktionen unterstützt |
lastError() | gibt Informationen über den letzten Fehler zurück |
drivers() | gibt die Namen der verfügbaren SQL-Treiber zurück |
isDriverAvailable() | prüft, ob ein bestimmter Treiber verfügbar ist |
registerSqlDriver() | registriert einen benutzerdefinierten Treiber |
Hinweis: Wenn Sie Transaktionen verwenden, müssen Sie die Transaktion starten, bevor Sie Ihre Abfrage erstellen.
Siehe auch QSqlDriver, QSqlQuery, Qt SQL, und Threads und das SQL-Modul.
Dokumentation der Eigenschaft
[since 6.8]
numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
Diese Eigenschaft enthält die Standardrichtlinie für die numerische Genauigkeit, die von Abfragen verwendet wird, die mit dieser Datenbankverbindung erstellt werden.
Hinweis: Treiber, die das Abrufen von numerischen Werten mit geringer Genauigkeit nicht unterstützen, ignorieren die Präzisionsrichtlinie. Sie können QSqlDriver::hasFeature() verwenden, um herauszufinden, ob ein Treiber diese Funktion unterstützt.
Hinweis: Die Einstellung der Standard-Präzisionsrichtlinie auf precisionPolicy hat keine Auswirkungen auf aktuell aktive 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 QSqlDriver::numericalPrecisionPolicy.
Dokumentation der Mitgliedsfunktionen
QSqlDatabase::QSqlDatabase()
Erzeugt ein leeres, ungültiges QSqlDatabase-Objekt. Verwenden Sie addDatabase(), removeDatabase() und database(), um gültige QSqlDatabase-Objekte zu erhalten.
[explicit protected]
QSqlDatabase::QSqlDatabase(QSqlDriver *driver)
Dies ist eine überladene Funktion.
Erstellt eine Datenbankverbindung unter Verwendung der angegebenen driver.
[explicit protected]
QSqlDatabase::QSqlDatabase(const QString &type)
Dies ist eine überladene Funktion.
Erzeugt eine QSqlDatabase-Verbindung, die den von type angegebenen Treiber verwendet. Wenn type nicht erkannt wird, hat die Datenbankverbindung keine Funktionalität.
Die derzeit verfügbaren Treiber-Typen sind:
Treiber Typ | Beschreibung |
---|---|
QDB2 | IBM DB2 |
QIBASE | Borland InterBase-Treiber |
QMYSQL | MySQL-Treiber |
QOCI | Oracle Call Interface Treiber |
QODBC | ODBC-Treiber (beinhaltet Microsoft SQL Server) |
QPSQL | PostgreSQL-Treiber |
QSQLITE | SQLite Version 3 oder höher |
QMIMER | Mimer SQL 11 oder höher |
Zusätzliche Treiber von Drittanbietern, einschließlich Ihrer eigenen benutzerdefinierten Treiber, können dynamisch geladen werden.
Siehe auch SQL-Datenbank-Treiber, registerSqlDriver() und drivers().
QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)
Erzeugt eine Kopie von other.
[noexcept]
QSqlDatabase::~QSqlDatabase()
Zerstört das Objekt und gibt alle zugewiesenen Ressourcen frei.
Hinweis: Wenn die letzte Verbindung zerstört wird, ruft der Destruktor implizit close() auf, um die Datenbankverbindung freizugeben.
Siehe auch close().
[static]
QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1StringView(defaultConnection))
Fügt eine Datenbank zur Liste der Datenbankverbindungen mit dem Treiber type und dem Verbindungsnamen connectionName hinzu. Wenn bereits eine Datenbankverbindung mit dem Namen connectionName besteht, wird diese Verbindung entfernt.
Die Datenbankverbindung wird durch connectionName referenziert. Die neu hinzugefügte Datenbankverbindung wird zurückgegeben.
Wenn type nicht verfügbar ist oder nicht geladen werden konnte, gibt isValid() false
zurück.
Wenn connectionName nicht angegeben wird, wird die neue Verbindung zur Standardverbindung für die Anwendung, und nachfolgende Aufrufe von database() ohne das Argument für den Verbindungsnamen geben die Standardverbindung zurück. Wenn hier eine connectionName angegeben wird, verwenden Sie database(connectionName), um die Verbindung abzurufen.
Warnung: Wenn Sie eine Verbindung mit demselben Namen wie eine bestehende Verbindung hinzufügen, ersetzt die neue Verbindung die alte. Wenn Sie diese Funktion mehr als einmal aufrufen, ohne connectionName anzugeben, wird die Standardverbindung durch die ersetzte Verbindung ersetzt.
Bevor Sie die Verbindung verwenden, muss sie initialisiert werden. Rufen Sie z. B. einige oder alle der Funktionen setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort() und setConnectOptions() und schließlich open() auf.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch database(), removeDatabase(), und Threads und das SQL-Modul.
[static]
QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1StringView(defaultConnection))
Dies ist eine überladene Funktion.
Diese Überladung ist nützlich, wenn Sie eine Datenbankverbindung mit einer driver erstellen wollen, die Sie selbst instanziiert haben. Das kann Ihr eigener Datenbanktreiber sein, oder Sie müssen einfach einen der Qt-Treiber selbst instanziieren. Wenn Sie dies tun, sollten Sie den Treibercode in Ihre Anwendung einbinden. Zum Beispiel können Sie eine PostgreSQL-Verbindung mit Ihrem eigenen QPSQL-Treiber wie folgt erstellen:
PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield"); QPSQLDriver *drv = new QPSQLDriver(con); QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection QSqlQuery query; query.exec("SELECT NAME, ID FROM STAFF");
Der obige Code richtet eine PostgreSQL-Verbindung ein und instanziiert ein QPSQLDriver-Objekt. Anschließend wird addDatabase() aufgerufen, um die Verbindung zu den bekannten Verbindungen hinzuzufügen, so dass sie von den Qt SQL Klassen verwendet werden kann. Wenn ein Treiber mit einem Verbindungshandle (oder einer Reihe von Handles) instanziiert wird, nimmt Qt an, dass Sie die Datenbankverbindung bereits geöffnet haben.
Hinweis: Wir nehmen an, dass qtdir
das Verzeichnis ist, in dem Qt installiert ist. Dies zieht den Code ein, der benötigt wird, um die PostgreSQL-Client-Bibliothek zu verwenden und ein QPSQLDriver-Objekt zu instanzieren, vorausgesetzt, Sie haben die PostgreSQL-Header irgendwo in Ihrem Include-Suchpfad.
Denken Sie daran, dass Sie Ihre Anwendung mit der Datenbank-Client-Bibliothek linken müssen. Stellen Sie sicher, dass sich die Client-Bibliothek im Suchpfad Ihres Linkers befindet, und fügen Sie Zeilen wie diese in Ihre .pro
Datei ein:
unix:LIBS += -lpq win32:LIBS += libpqdll.lib
Die beschriebene Methode funktioniert für alle mitgelieferten Treiber. Der einzige Unterschied liegt in den Argumenten des Treiberkonstruktors. Hier ist eine Tabelle mit den in Qt enthaltenen Treibern, ihren Quellcode-Dateien und ihren Konstruktor-Argumenten:
Treiber | Klassenname | Konstruktor-Argumente | Datei zum Einbinden |
---|---|---|---|
QPSQL | QPSQLDriver | PGconn *Verbindung | qsql_psql.cpp |
QMYSQL | QMYSQLTreiber | MYSQL *Verbindung | qsql_mysql.cpp |
QOCI | QOCIDriver | OCIEnv *Umgebung, OCISvcCtx *serviceContext | qsql_oci.cpp |
QODBC | QODBCDriver | SQLHANDLE Umgebung, SQLHANDLE Verbindung | qsql_odbc.cpp |
QDB2 | QDB2 | SQLHANDLE-Umgebung, SQLHANDLE-Verbindung | qsql_db2.cpp |
QSQLITE | QSQLiteDriver | sqlite *Verbindung | qsql_sqlite.cpp |
QMIMER | QMimerSQLDriver | MimerSession *Verbindung | qsql_mimer.cpp |
QIBASE | QIBaseDriver | isc_db_handle Verbindung | qsql_ibase.cpp |
Warnung: Das Hinzufügen einer Datenbankverbindung mit demselben Verbindungsnamen wie eine bestehende Verbindung führt dazu, dass die bestehende Verbindung durch die neue ersetzt wird.
Warnung: Das SQL-Framework übernimmt das Eigentum an der driver. Sie darf nicht gelöscht werden. Um die Verbindung zu entfernen, verwenden Sie removeDatabase().
Siehe auch drivers().
[static]
QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
Klont die Datenbankverbindung other und speichert sie als connectionName. Alle Einstellungen der ursprünglichen Datenbank, z. B. databaseName(), hostName() usw., werden übernommen. Führt nichts aus, wenn other eine ungültige Datenbank ist. Gibt die neu erstellte Datenbankverbindung zurück.
Hinweis: Die neue Verbindung wurde noch nicht geöffnet. Bevor Sie die neue Verbindung verwenden, müssen Sie open() aufrufen.
Hinweis: Diese Funktion ist reentrant.
[static]
QSqlDatabase QSqlDatabase::cloneDatabase(const QString &other, const QString &connectionName)
Dies ist eine überladene Funktion.
Klont die Datenbankverbindung other und speichert sie als connectionName. Alle Einstellungen der ursprünglichen Datenbank, z.B. databaseName(), hostName(), usw., werden übernommen. Führt nichts aus, wenn other eine ungültige Datenbank ist. Gibt die neu erstellte Datenbankverbindung zurück.
Hinweis: Die neue Verbindung wurde noch nicht geöffnet. Bevor Sie die neue Verbindung verwenden, müssen Sie open() aufrufen.
Diese Überladung ist nützlich, wenn die Datenbank in einem anderen Thread auf die Datenbank geklont wird, die von der durch other dargestellten Datenbank verwendet wird.
void QSqlDatabase::close()
Schließt die Datenbankverbindung, gibt alle erworbenen Ressourcen frei und macht alle vorhandenen QSqlQuery Objekte ungültig, die mit der Datenbank verwendet werden.
Dies betrifft auch Kopien dieses QSqlDatabase Objekts.
Siehe auch removeDatabase().
bool QSqlDatabase::commit()
Übergibt eine Transaktion an die Datenbank, wenn der Treiber Transaktionen unterstützt und eine transaction() gestartet wurde. Gibt true
zurück, wenn der Vorgang erfolgreich war. Andernfalls gibt er false
zurück.
Hinweis: Bei einigen Datenbanken schlägt die Übertragung fehl und gibt false
zurück, wenn eine active query die Datenbank für eine SELECT
verwendet. Stellen Sie die Abfrage inactive, bevor Sie die Übertragung durchführen.
Rufen Sie lastError() auf, um Informationen über Fehler zu erhalten.
Siehe auch QSqlQuery::isActive(), QSqlDriver::hasFeature(), und rollback().
QString QSqlDatabase::connectOptions() const
Gibt die Zeichenkette für die Verbindungsoptionen zurück, die für diese Verbindung verwendet wird. Die Zeichenkette kann leer sein.
Siehe auch setConnectOptions().
QString QSqlDatabase::connectionName() const
Gibt den Verbindungsnamen zurück, der leer sein kann.
Hinweis: Der Verbindungsname ist nicht die database name.
Siehe auch addDatabase().
[static]
QStringList QSqlDatabase::connectionNames()
Gibt eine Liste mit den Namen aller Verbindungen zurück.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch contains(), database(), und Threads und das SQL-Modul.
[static]
bool QSqlDatabase::contains(const QString &connectionName = QLatin1StringView(defaultConnection))
Gibt true
zurück, wenn die Liste der Datenbankverbindungen connectionName enthält; andernfalls wird false
zurückgegeben.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch connectionNames(), database(), und Threads und das SQL-Modul.
[static]
QSqlDatabase QSqlDatabase::database(const QString &connectionName = QLatin1StringView(defaultConnection), bool open = true)
Gibt die Datenbankverbindung mit dem Namen connectionName zurück. Die Datenbankverbindung muss zuvor mit addDatabase() hinzugefügt worden sein. Wenn open wahr ist (die Vorgabe) und die Datenbankverbindung noch nicht geöffnet ist, wird sie jetzt geöffnet. Wenn keine connectionName angegeben ist, wird die Standardverbindung verwendet. Wenn connectionName nicht in der Liste der Datenbanken vorhanden ist, wird eine ungültige Verbindung zurückgegeben.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch isOpen() und Threads und das SQL-Modul.
QString QSqlDatabase::databaseName() const
Gibt den Datenbanknamen der Verbindung zurück, der leer sein kann.
Hinweis: Der Datenbankname ist nicht der Name der Verbindung.
Siehe auch setDatabaseName().
QSqlDriver *QSqlDatabase::driver() const
Gibt den Datenbanktreiber zurück, der für den Zugriff auf die Datenbankverbindung verwendet wird.
Siehe auch addDatabase() und drivers().
QString QSqlDatabase::driverName() const
Gibt den Treibernamen der Verbindung zurück.
Siehe auch addDatabase() und driver().
[static]
QStringList QSqlDatabase::drivers()
Gibt eine Liste aller verfügbaren Datenbanktreiber zurück.
Siehe auch registerSqlDriver().
QString QSqlDatabase::hostName() const
Gibt den Hostnamen der Verbindung zurück; er kann leer sein.
Siehe auch setHostName().
[static]
bool QSqlDatabase::isDriverAvailable(const QString &name)
Gibt true
zurück, wenn ein Treiber namens name verfügbar ist; andernfalls wird false
zurückgegeben.
Siehe auch drivers().
bool QSqlDatabase::isOpen() const
Gibt true
zurück, wenn die Datenbankverbindung derzeit geöffnet ist; andernfalls wird false
zurückgegeben.
bool QSqlDatabase::isOpenError() const
Gibt true
zurück, wenn ein Fehler beim Öffnen der Datenbankverbindung aufgetreten ist; andernfalls false
. Fehlerinformationen können mit der Funktion lastError() abgefragt werden.
bool QSqlDatabase::isValid() const
Gibt true
zurück, wenn QSqlDatabase einen gültigen Treiber hat.
Beispiel:
QSqlDatabase db;qDebug() << db.isValid(); // Returns false db = QSqlDatabase::database("sales");qDebug() << db.isValid(); // Returns \c true if "sales" connection exists QSqlDatabase::removeDatabase("sales");qDebug() << db.isValid(); // Returns false
QSqlError QSqlDatabase::lastError() const
Liefert Informationen über den letzten Fehler, der in der Datenbank aufgetreten ist.
Fehler, die in Verbindung mit einer einzelnen Abfrage auftreten, werden von QSqlQuery::lastError() gemeldet.
Siehe auch QSqlError und QSqlQuery::lastError().
[since 6.8]
bool QSqlDatabase::moveToThread(QThread *targetThread)
Ändert die Thread-Affinität für QSqlDatabase und den zugehörigen Treiber. Diese Funktion gibt true
zurück, wenn die Funktion erfolgreich ist. Die Ereignisverarbeitung wird in der targetThread fortgesetzt.
Während dieses Vorgangs müssen Sie sicherstellen, dass es keine QSqlQuery gibt, die an diese Instanz gebunden ist, andernfalls wird die QSqlDatabase nicht in den gegebenen Thread verschoben und die Funktion gibt false
zurück.
Da der zugehörige Treiber von QObject abgeleitet ist, gelten alle Einschränkungen für das Verschieben eines QObject in einen anderen Thread auch für diese Funktion.
Diese Funktion wurde in Qt 6.8 eingeführt.
Siehe auch QObject::moveToThread() und Threads und das SQL Modul.
QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const
Gibt die numericalPrecisionPolicy zurück.
Hinweis: Getter-Funktion für die Eigenschaft numericalPrecisionPolicy.
Siehe auch setNumericalPrecisionPolicy().
bool QSqlDatabase::open()
Öffnet die Datenbankverbindung unter Verwendung der aktuellen Verbindungswerte. Gibt bei Erfolg true
zurück, andernfalls false
. Fehlerinformationen können mit lastError() abgerufen werden.
Siehe auch lastError(), setDatabaseName(), setUserName(), setPassword(), setHostName(), setPort(), und setConnectOptions().
bool QSqlDatabase::open(const QString &user, const QString &password)
Dies ist eine überladene Funktion.
Öffnet die Datenbankverbindung mit dem angegebenen user Namen und password. Gibt bei Erfolg true
zurück, andernfalls false
. Fehlerinformationen können mit der Funktion lastError() abgefragt werden.
Diese Funktion speichert das ihr übergebene Passwort nicht. Stattdessen wird das Kennwort direkt an den Treiber zum Öffnen der Verbindung übergeben und dann verworfen.
Siehe auch lastError().
QString QSqlDatabase::password() const
Gibt das Kennwort der Verbindung zurück. Es wird eine leere Zeichenkette zurückgegeben, wenn das Kennwort nicht mit setPassword() festgelegt wurde, wenn das Kennwort beim Aufruf von open() angegeben wurde oder wenn kein Kennwort verwendet wurde.
Siehe auch setPassword().
int QSqlDatabase::port() const
Gibt die Portnummer der Verbindung zurück. Der Wert ist undefiniert, wenn die Portnummer nicht festgelegt wurde.
Siehe auch setPort().
QSqlIndex QSqlDatabase::primaryIndex(const QString &tablename) const
Gibt den Primärindex für die Tabelle tablename zurück. Wenn kein Primärindex existiert, wird ein leeres QSqlIndex zurückgegeben.
Hinweis: Einige Treiber, wie der QPSQL-Treiber, verlangen möglicherweise, dass Sie tablename in Kleinbuchstaben übergeben, wenn die Tabelle bei der Erstellung nicht in Anführungszeichen gesetzt wurde. Weitere Informationen finden Sie in der Dokumentation des TreibersQt SQL .
Siehe auch tables() und record().
QSqlRecord QSqlDatabase::record(const QString &tablename) const
Gibt eine QSqlRecord zurück, die mit den Namen aller Felder in der Tabelle (oder Ansicht) namens tablename gefüllt ist. Die Reihenfolge, in der die Felder im Datensatz erscheinen, ist undefiniert. Wenn keine solche Tabelle (oder Ansicht) existiert, wird ein leerer Datensatz zurückgegeben.
Hinweis: Einige Treiber, wie z.B. der QPSQL-Treiber, können verlangen, dass Sie tablename in Kleinbuchstaben übergeben, wenn die Tabelle bei der Erstellung nicht in Anführungszeichen gesetzt wurde. Weitere Informationen finden Sie in der Dokumentation des TreibersQt SQL .
[static]
void QSqlDatabase::registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)
Diese Funktion registriert einen neuen SQL-Treiber namens name innerhalb des SQL-Frameworks. Dies ist nützlich, wenn Sie einen eigenen SQL-Treiber haben und diesen nicht als Plugin kompilieren wollen.
Beispiel:
QSqlDatabase::registerSqlDriver("MYDRIVER", new QSqlDriverCreator<QSqlDriver>); QVERIFY(QSqlDatabase::drivers().contains("MYDRIVER")); QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER"); QVERIFY(db.isValid());
QSqlDatabase übernimmt den Besitz des Zeigers creator, so dass Sie ihn nicht selbst löschen dürfen.
Siehe auch drivers().
[static]
void QSqlDatabase::removeDatabase(const QString &connectionName)
Entfernt die Datenbankverbindung connectionName aus der Liste der Datenbankverbindungen.
Warnung: Es sollten keine Abfragen auf der Datenbankverbindung offen sein, wenn diese Funktion aufgerufen wird, da es sonst zu einem Ressourcenleck kommen kann.
Beispiel:
// WRONG QSqlDatabase db = QSqlDatabase::database("sales"); QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); QSqlDatabase::removeDatabase("sales"); // will output a warning // "db" is now a dangling invalid database connection, // "query" contains an invalid result set
Der korrekte Weg, dies zu tun:
{ QSqlDatabase db = QSqlDatabase::database("sales"); QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); } // Both "db" and "query" are destroyed because they are out of scope QSqlDatabase::removeDatabase("sales"); // correct
Um die Standardverbindung zu entfernen, die möglicherweise mit einem Aufruf von addDatabase() ohne Angabe eines Verbindungsnamens erstellt wurde, können Sie den Standardverbindungsnamen abrufen, indem Sie connectionName() für die von database() zurückgegebene Datenbank aufrufen. Beachten Sie, dass eine ungültige Datenbank zurückgegeben wird, wenn keine Standarddatenbank erstellt wurde.
Hinweis: Diese Funktion ist thread-sicher.
Siehe auch database(), connectionName(), und Threads und das SQL-Modul.
bool QSqlDatabase::rollback()
Führt eine Transaktion in der Datenbank zurück, wenn der Treiber Transaktionen unterstützt und eine transaction() gestartet wurde. Gibt true
zurück, wenn der Vorgang erfolgreich war. Andernfalls gibt es false
zurück.
Hinweis: Bei einigen Datenbanken schlägt das Rollback fehl und gibt false
zurück, wenn eine active query die Datenbank für eine SELECT
verwendet. Stellen Sie die Abfrage inactive, bevor Sie das Rollback durchführen.
Rufen Sie lastError() auf, um Informationen über Fehler zu erhalten.
Siehe auch QSqlQuery::isActive(), QSqlDriver::hasFeature(), und commit().
void QSqlDatabase::setConnectOptions(const QString &options = QString())
Setzt datenbankspezifische options. Dies muss geschehen, bevor die Verbindung geöffnet wird, sonst hat es keine Wirkung. Eine andere Möglichkeit ist, die Verbindung zu schließen, QSqlDatabase::setConnectOptions() aufzurufen und open() die Verbindung erneut zu öffnen.
Das Format des Strings options ist eine durch Semikolon getrennte Liste von Optionsnamen oder Option=Wert-Paaren. Die Optionen hängen vom verwendeten Datenbank-Client ab und werden für jedes Plugin auf der Seite SQL-Datenbanktreiber beschrieben.
Beispiele:
db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the server if (!db.open()) { db.setConnectOptions(); // clears the connect option string // ... } // ... // PostgreSQL connection db.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connections if (!db.open()) { db.setConnectOptions(); // clear options // ... } // ... // ODBC connection db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC options if (!db.open()) { db.setConnectOptions(); // don't try to set this option // ... } }
Weitere Informationen zu den verschiedenen Optionen finden Sie in der Dokumentation der Client-Bibliothek.
Siehe auch connectOptions().
void QSqlDatabase::setDatabaseName(const QString &name)
Setzt den Datenbanknamen der Verbindung auf name. Um Wirkung zu zeigen, muss der Datenbankname gesetzt werden , bevor die Verbindung opened aufgerufen wird. Alternativ dazu können Sie close() die Verbindung herstellen, den Datenbanknamen setzen und open() erneut aufrufen.
Hinweis: Der Datenbankname ist nicht der Verbindungsname. Der Verbindungsname muss zur Zeit der Erstellung des Verbindungsobjekts an addDatabase() übergeben werden.
Wenn der angegebene Datenbankname nicht existiert, wird der QSQLITE-Treiber die Datei für Sie erstellen, es sei denn, die Option QSQLITE_OPEN_READONLY ist gesetzt.
Zusätzlich kann name auf ":memory:"
gesetzt werden, wodurch eine temporäre Datenbank erstellt wird, die nur für die Lebensdauer der Anwendung verfügbar ist.
Für den QOCI (Oracle)-Treiber ist der Datenbankname der TNS-Dienstname.
Für den QODBC-Treiber kann name entweder ein DSN, ein DSN-Dateiname (in diesem Fall muss die Datei die Erweiterung .dsn
haben) oder ein Verbindungsstring sein.
Microsoft Access-Benutzer können beispielsweise die folgende Verbindungszeichenfolge verwenden, um eine .mdb
-Datei direkt zu öffnen, ohne einen DSN-Eintrag im ODBC-Manager erstellen zu müssen:
// ... QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=myaccessfile.mdb"); if (db.open()) { // success! } // ...
Es gibt keinen Standardwert.
Siehe auch databaseName(), setUserName(), setPassword(), setHostName(), setPort(), setConnectOptions(), und open().
void QSqlDatabase::setHostName(const QString &host)
Setzt den Hostnamen der Verbindung auf host. Um Wirkung zu zeigen, muss der Hostname gesetzt werden , bevor die Verbindung opened aufgerufen wird. Alternativ dazu können Sie close() die Verbindung herstellen, den Hostnamen setzen und open() erneut aufrufen.
Es gibt keinen Standardwert.
Siehe auch hostName(), setUserName(), setPassword(), setDatabaseName(), setPort(), setConnectOptions(), und open().
void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
Setzt numericalPrecisionPolicy auf precisionPolicy.
Hinweis: Setter-Funktion für die Eigenschaft numericalPrecisionPolicy.
Siehe auch numericalPrecisionPolicy().
void QSqlDatabase::setPassword(const QString &password)
Setzt das Kennwort der Verbindung auf password. Um wirksam zu sein, muss das Kennwort gesetzt werden , bevor die Verbindung opened aufgerufen wird. Alternativ können Sie close() die Verbindung herstellen, das Kennwort festlegen und open() erneut aufrufen.
Es gibt keinen Standardwert.
Achtung! Diese Funktion speichert das Passwort im Klartext in Qt. Verwenden Sie den Aufruf open(), der ein Passwort als Parameter annimmt, um dieses Verhalten zu vermeiden.
Siehe auch password(), setUserName(), setDatabaseName(), setHostName(), setPort(), setConnectOptions(), und open().
void QSqlDatabase::setPort(int port)
Setzt die Portnummer der Verbindung auf port. Um wirksam zu sein, muss die Portnummer gesetzt werden , bevor die Verbindung opened aufgerufen wird. Alternativ können Sie close() die Verbindung herstellen, die Anschlussnummer festlegen und open() erneut aufrufen.
Es gibt keinen Standardwert.
Siehe auch port(), setUserName(), setPassword(), setHostName(), setDatabaseName(), setConnectOptions(), und open().
void QSqlDatabase::setUserName(const QString &name)
Setzt den Benutzernamen der Verbindung auf name. Um wirksam zu sein, muss der Benutzername gesetzt werden , bevor die Verbindung opened aufgerufen wird. Alternativ dazu können Sie close() die Verbindung herstellen, den Benutzernamen setzen und open() erneut aufrufen.
Es gibt keinen Standardwert.
Siehe auch userName(), setDatabaseName(), setPassword(), setHostName(), setPort(), setConnectOptions(), und open().
QStringList QSqlDatabase::tables(QSql::TableType type = QSql::Tables) const
Gibt eine Liste der Datenbanktabellen, Systemtabellen und Views zurück, wie durch den Parameter type angegeben.
Siehe auch primaryIndex() und record().
[since 6.8]
QThread *QSqlDatabase::thread() const
Gibt einen Zeiger auf die zugehörige QThread Instanz zurück.
Diese Funktion wurde in Qt 6.8 eingeführt.
bool QSqlDatabase::transaction()
Beginnt eine Transaktion in der Datenbank, wenn der Treiber Transaktionen unterstützt. Gibt true
zurück, wenn der Vorgang erfolgreich war. Andernfalls gibt es false
zurück.
Siehe auch QSqlDriver::hasFeature(), commit(), und rollback().
QString QSqlDatabase::userName() const
Gibt den Benutzernamen der Verbindung zurück; er kann leer sein.
Siehe auch setUserName().
QSqlDatabase &QSqlDatabase::operator=(const QSqlDatabase &other)
Weist diesem Objekt other zu.
© 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.