Qt unterstützt das Qt SQL-Modul , das den Zugriff auf verschiedene SQL-Datenbankmanager wie SQLITE, MySQL, PostgreSQL in seiner kostenlosen Version und andere wie Oracle- und ODBC-kompatible Manager in seiner kostenpflichtigen Version ermöglicht. Die Treiber können jedoch heruntergeladen werden.
Die Bibliotheks-API bietet verschiedene Methoden für den Zugriff auf Datenbanken über SQL und XML. QT unterstützt verschiedene Datenbanken mit dem QtSql-Modul, das eine von der verwendeten Plattform oder dem verwendeten System unabhängige Schnittstelle für den Zugriff auf SQL-Datenbanken bietet. Diese Schnittstelle wird von einer Reihe von Klassen unterstützt, die Qt verwenden, um die Datenbankintegration mit der Benutzeroberfläche bereitzustellen.
Datenbankmodule, die Qt unterstützen, und ihre jeweiligen Treiber, die das Framework enthalten:
Treiber / Datenbank QIBASE / Firebird / Interbase QMYSQL / MySQL QOCI / Oracle DB QSQLITE / SQLite Version 3 QODBC / SQL Server QDB2 / IBM DB2
BBDD Motoren
Implementieren einer Anwendung mit SQLite und Qt
Vor der Entwicklung der Anwendung werden wir mit der SQLite-Datenbank erstellen, um die Datenbank zu verwalten. Es gibt verschiedene Tools wie Sqliteman, DB Browser für SQLite. Wir werden ein sehr praktisches Firefox-Plugin verwenden und es heißt SQLite Manager für Firefox.
Wir gehen zu den Firefox-Add-On-Seiten und suchen nach dem SQLite Manager- Plugin und installieren es.
Dieses Plugin enthält mehrere Funktionen und Features für die Verwaltung von SQLite-Datenbanken. Einige davon sind:
- Verwalten Sie jede SQLite-Datenbank.
- Verwalten Sie Tabellen, Indizes, Views und Trigger.
- Es ermöglicht Vorgänge wie das Hinzufügen, Bearbeiten, Löschen und Duplizieren von Datensätzen.
- Es erleichtert die Ausführung von SQL-Abfragen.
- Ein Dropdown-Menü dient als Hilfe bei der SQL-Syntax.
- Export von Tabellen, Ansichten und Datenbanken in das CSV-, XML- und SQL-Format.
- Es ermöglicht den Import von CSV, XML, SQL.
Wenn wir das Plugin installiert haben, können wir über das Menü von Firefox Tools> Sqlite Manager darauf zugreifen. Daraufhin wird ein Fenster geöffnet, in dem die Datenbanken verwaltet werden.
Als nächstes erstellen wir eine Datenbank und verknüpfen sie mit Qt. Gehen Sie dazu zum Menü Datenbank> Neue Datenbank und erstellen Sie die Datenbank, um einen Produktkatalog zu erstellen.
In einem Dialogfeld werden wir aufgefordert, den Namen der Datenbank, die Catalogodb sein soll, einzugeben. Klicken Sie auf die Schaltfläche OK. Daraufhin wird ein Fenster geöffnet, in dem Sie auswählen können, wo die Datenbankdaten gespeichert werden sollen Wenn wir es nicht definiert haben, können wir es erstellen.
Wie wir sehen können, wurde die gesamte Struktur der Datenbank mit der Master-Tabelle oder der Master-Tabelle erstellt, die alle Systeminformationen des Systems wie die Anmeldekonten und die Konfiguration des Systems registriert. Sie enthält auch die Tabellen, Indizes, Ansichten, Trigger.
Wir werden eine Tabelle dafür erstellen, gehen Sie zum Menü Tabelle und wählen Sie Tabelle erstellen . Es wird ein Fenster geöffnet und wir werden die Produkttabelle erstellen.
Die Datenbank ist main, dh die Haupt- Catalogodb
Die SQL-Anweisung lautet wie folgt:
CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NICHT NULL, "product" TEXT, "stock" DOUBLE, "price" DOUBLE)
Als nächstes werden wir einige Daten in den Tabellenprodukten registrieren, dazu gehen wir auf die Registerkarte Durchsuchen und Suchen, es zeigt uns eine Ansicht der Tabelle, wir gehen auf die Schaltfläche Hinzufügen und wir können beginnen, Daten einzugeben, die ID ist nicht erforderlich, um sie bereits einzugeben Damit wir es als autonumerisch konfigurieren, drücken wir am Ende OK und es zeigt uns die SQL-Anweisung, die die Daten eingibt, und wir werden sehen, dass sie sich in der Liste der Daten der Produkttabelle widerspiegelt.
Wir haben das QT-Projekt und die SQLITE-Datenbank erstellt
Öffnen Sie QT Creator, wählen Sie Neues Projekt und dann Anwendung> Qt-Widget-Anwendung und weisen Sie dem Projekt in diesem Fall Qtcatalogodb ein Verzeichnis und einen Namen zu.
Denken Sie daran, dass wir im Ausführungsverzeichnis die Catalogo.site- Datenbank haben müssen, um sie zu verknüpfen. Dann vergeben wir im nächsten Bildschirm den Namen der Hauptklasse der Projekte, die Ressourcendateien und das Bildschirmdesign. Wir können den gleichen Namen des QtCatalogodb- Projekts verwenden.
Zeigen Sie uns dann die IDE mit den für die Entwicklung unseres Projekts vorprogrammierten Basisdateien. In einem weiteren Tutorial zur Multiplattform-Programmierung in C ++ und Qt unter GNU / Linux habe ich die QT Creator-Arbeitsumgebung ausführlich erläutert.
In der Projektdatei qtcatalogodb.pro fügen wir den folgenden Code hinzu, um die SQL-Unterstützung am Ende zu aktivieren.
QT + = sql
Lassen Sie uns zuerst die Benutzeroberfläche entwerfen, die Datei qtcatalogodb.ui aufrufen und eine TableWidget- Komponente hinzufügen, mit der die Datensätze der Produkttabelle aufgelistet werden.
Dann gehen wir zur Datei qtcatalogodb.cpp , die den folgenden C ++ – Code enthält
#include "qtcatalogodb.h" #include "ui_qtcatalogodb.h" QtCatalogodb :: QtCatalogodb (QWidget * Eltern): QMainWindow (Eltern), ui (neue Ui :: QtCatalogodb) { ui-> setupUi (this); } QtCatalogodb :: ~ QtCatalogodb () { lösche ui; }
Wir müssen die Bibliothek oder den Treiber für Sqlite aufrufen, die Treiber befinden sich im Verzeichnis Qt / Tools / bin / plugin /.
Zuerst fügen wir das Plugin zum Verwalten von Datenbanken ein, verwenden ein Include und schließen es auf folgende Weise ein:
#include <QtSql / QtSql>
Wir fügen auch das Plugin zur Behandlung von Nachrichten hinzu, damit wir einen Dialog anzeigen können, um Fehler anzuzeigen:
#include <QMessageBox>
Dann rufen wir im Codeblock die Klasse auf, um SQLITE zu verwalten:
QtCatalogodb :: QtCatalogodb (QWidget * Eltern): QMainWindow (Eltern), ui (neue Ui :: QtCatalogodb) { ui-> setupUi (this); // In allen Fällen muss zuerst das QSqlDatabase-Objekt instanziiert werden, das den zu verwendenden Datenbankmanager angibt QSqlDatabase db = QSqlDatabase :: addDatabase ("QSQLITE"); // Wir öffnen die Datenbank, wenn dies fehlschlägt. Wir zeigen den Fehler an db.setDatabaseName ("Catalogodb.sqlite"); if (! db.open ()) { QmessageBox :: warning (0, "Fehler", "Ich habe keine Verbindung zur Datenbank hergestellt."); }
Sobald die Verbindung auf die oben beschriebene Weise hergestellt wurde, wird die Anwendung automatisch mit der Datenbank verknüpft. Jetzt können wir Sql-Abfragen auf einfache Weise erstellen , indem wir die QSqlQuery- Klasse instanziieren und die entsprechende SQL-Anweisung schreiben, um Operationen und Transaktionen mit der Tabelle mithilfe der QSqlQuery :: exec () -Methode auszuführen:
// Die Abfrage oder Abfrageinstanz erstellen QSqlQuery query; // Führe die SQL-Abfrage aus query.exec ("SELECT * FROM products"); }
Als nächstes beginnen wir unterhalb der SQL-Abfrage, um die Daten in der TableWidget- Komponente zu sichern
Unterhalb der SQL-Abfrage lautet der Code wie folgt:
// ivocamos die Schnittstellen ui und die Komponente, wir setzen standardmäßig 1 Zeilen ui-> tableWidget-> setRowCount (1); // Wir fügen 3 Spalten hinzu ui-> tableWidget-> setColumnCount (3); // Wir machen die erweiterbaren Spalten ui-> tableWidget-> setSizePolicy (QSizePolicy :: Expanding, QSizePolicy :: Expanding); // Wir fügen jeder Spalte einen Namen hinzu ui-> tableWidget-> setHorizontalHeaderLabels (QString ("Produkt; Bestand; Preis"). split (";")); // Wir erstellen eine Variable für die angezeigte Zeilennummer int i = 0; // wir gehen die Abfrage durch, die wir zuvor gemacht haben while (query.next ()) { // Füge in jede Spalte die entsprechenden Daten ein. Jeder Datensatz hat eine numerische Position in der Tabelle // Produkt ui-> tableWidget-> setItem (i, 0, neues QtableWidgetItem (query.value (1) .toString ())); // stock ui-> tableWidget-> setItem (i, 1, neues QTableWidgetItem (query.value (2) .toString ())); // Preis ui-> tableWidget-> setItem (i, 2, neues QTableWidgetItem (query.value (3) .toString ())); i ++; // füge eine neue Zeile in das Tabellenwidget ein ui-> tableWidget-> insertRow (i); }
Wir führen die Anwendung aus und das Ergebnis wird das folgende sein:
Der vollständige Code der Datei qtcatal ogodb.cpp lautet wie folgt:
#include "qtcatalogodb.h" #include "ui_qtcatalogodb.h" #include <QtSql / QtSql> #include <QMessageBox> QtCatalogodb :: QtCatalogodb (QWidget * Eltern): QMainWindow (Eltern), ui (neue Ui :: QtCatalogodb) { ui-> setupUi (this); QSqlDatabase db = QSqlDatabase :: addDatabase ("QSQLITE"); db.setDatabaseName ("Catalogodb.sqlite"); if (! db.open ()) { QMessageBox :: warning (0, "Fehler", "Datenbankdatei konnte nicht geöffnet werden."); } QSqlQuery query; query.exec ("SELECT * FROM products"); ui-> tableWidget-> setRowCount (1); ui-> tableWidget-> setColumnCount (3); ui-> tableWidget-> setSizePolicy (QSizePolicy :: Expanding, QSizePolicy :: Expanding); // Header Label Texte hier setzen ui-> tableWidget-> setHorizontalHeaderLabels (QString ("Produkt; Bestand; Preis"). split (";")); int i = 0; while (query.next ()) { // Fügen Sie hier Tabellenelemente hinzu ui-> tableWidget-> setItem (i, 0, neues QTableWidgetItem (query.value (1) .toString ())); ui-> tableWidget-> setItem (i, 1, neues QTableWidgetItem (query.value (2) .toString ())); ui-> tableWidget-> setItem (i, 2, neues QTableWidgetItem (query.value (3) .toString ())); i ++; ui-> tableWidget-> insertRow (i); } }