====== Datenbanken ====== Qt unterstützt verschiedene Datenbanktreiber: ^ Qt-Treiber ^ Datenbank ^ | [[QDB2|QDB2]] | IBM DB2 | | [[QIBASE|QIBASE]] | Borland InterBase | | [[QMYSQL|QMYSQL]] | MySQL | | [[QOCI|QOCI]] | Oracle | | [[QODBC|QODBC]] | Open Database Connectivity (ODBC) | | [[QPSQL|QPSQL]] | PostgreSQL | | [[QSQLITE2|QSQLITE2]] | SQLite Version 2 | | [[QSQLITE|QSQLITE]] | SQLite Version 3 | | [[QTDS|QTDS]] | Sybase | ===== SQL-Queries ausführen ===== Um Queries auf eine Datenbank auszuführen, muss ein ''QSqlQuery''-Objekt für die jeweilige Datenbank erstellt werden. Wird dem Konstruktor von ''QSqlQuery'' kein ''QSqlDatabase''-Objekt als Parameter übergeben, wird die Standard-Datenbank der Anwendung verwendet. Der Methode ''exec()'' kann dann der Query-String (im Syntax des jeweiligen Treibers) übergeben werden. War der Query erfolgreich wird ''true'' zurückgegeben, ansonsten ''false''. FIXME std-db setzen QString queryString( "CREATE TABLE users (id INTEGER PRIMARY KEY, firstName TEXT, lastName TEXT, email TEXT)" ); QSqlQuery query; bool ret = query.exec( queryString ); ===== Ergebnisse von SELECT-Abfragen ===== Für das Speichern von SELECT eignet sich ein ''QHash'' mit den Spaltennamen als Schlüssel. Dabei muss das ''QSqlQuery''-Objekt, das den Query ausgeführt hat die Methode ''next()'' aufrufen, um den ersten Datensatz zur Verfügung zu stellen. ''next()'' gibt so lange ''true'' zurück, wie Datensätze vorhanden sind. Für eine einzelne Ergebniszeile (z.B. Abfrage auf den Primary Key) sieht der Code folgendermaßen aus: QHash properties; query.next(); QSqlRecord record = query.record(); for( int i = 0; i < record.count(); i++ ) properties[record.fieldName( i )] = record.value( i ); // Verwendung des Hashs Für mehrere wird natürlich eine Schleife verwendet: QHash properties; while( query.next() ) { QSqlRecord record = query.record(); for( int i = 0; i < record.count(); i++ ) properties[record.fieldName( i )] = record.value( i ); // Verwendung des Hashs properties.clear(); } Dabei können die Ergebnisse auch in einer Liste gespeichert werden: QList > results; QHash properties; while( query.next() ) { QSqlRecord record = query.record(); for( int i = 0; i < record.count(); i++ ) properties[record.fieldName( i )] = record.value( i ); results.push_back( properties ); properties.clear(); } // Verwendung der Ergebnisse