MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

So verbinden Sie C++-Programme mit MariaDB

Heute haben wir die allgemeine Verfügbarkeit von MariaDB Connector/C++ bekannt gegeben. Die Sprache C++ ist bekannt für ihre Effizienz, Vielseitigkeit und Erweiterbarkeit. Tatsächlich wird es häufig in Branchen wie Fintech und Gaming eingesetzt, wo Anwendungen vorhersehbare Parallelität und Latenz erfordern. Mit MariaDB Connector/C++ können Entwickler den neuen Connector in ihren Anwendungen verwenden, um sich nativ mit MariaDB Server vor Ort und in der Cloud auf MariaDB SkySQL zu verbinden.

In diesem Artikel stelle ich Ihnen MariaDB Connector/C++ mit einfachen Beispielen vor, die die Interaktionen zum Erstellen, Lesen, Aktualisieren und Löschen (CRUD) mit in MariaDB gespeicherten Daten demonstrieren. Genauer gesagt werde ich den Prozess zum Erstellen einer C++-Konsolenanwendung durchgehen, mit der Sie einfache Vorgänge zum Verwalten von Aufgaben ausführen können. Aber genug geredet, fangen wir an!

Herunterladen und Installieren

Um MariaDB Connector/C++ verwenden zu können, benötigen Sie Zugriff auf eine Instanz von MariaDB Server. Es gibt verschiedene Möglichkeiten, wie Sie mit MariaDB auf Ihrem lokalen Computer, vor Ort oder sogar in der Cloud beginnen können.

  1. Laden Sie den MariaDB Community Server herunter und installieren Sie ihn
    1. Direkt
    2. Ein Docker-Image verwenden
  2. MariaDB Enterprise Server herunterladen und installieren 
  3. Bereitstellung mit MariaDB SkySQL, der ultimativen MariaDB-Cloud-Datenbank

Nachdem Sie eine MariaDB Server-Instanz eingerichtet haben, können Sie den Schritten in der MariaDB Enterprise-Dokumentation folgen, um Anweisungen zum Herunterladen und Installieren von MariaDB Connector/C++ zu erhalten.

MariaDB-Server vorbereiten

In diesem Beispiel benötigen Sie eine Datenbank und eine Tabelle, bevor Sie den neuen MariaDB C++ Connector verwenden können. Verbinden Sie sich mit einem Client Ihrer Wahl mit Ihrer MariaDB-Datenbankinstanz und:

1. Erstellen Sie eine neue Datenbank und eine einzelne Tabelle, die für das Speichern der Aufgabendatensätze verantwortlich ist.

CREATE DATABASE IF NOT EXISTS todo;CREATE TABLE todo.tasks (  id INT(11) unsigned NOT NULL AUTO_INCREMENT,  description VARCHAR(500) NOT NULL,  completed BOOLEAN NOT NULL DEFAULT 0,  PRIMARY KEY (id)); 

2. Erstellen Sie einen neuen Datenbankbenutzer, den Connector/C++ verwendet, um sich mit MariaDB zu verbinden.

BENUTZER ERSTELLEN, WENN NICHT VORHANDEN app_user@localhost IDENTIFIZIERT DURCH 'Password123!'; ALLE PRIVILEGIEN AUF todo.* TO app_user@localhost GEWÄHREN;

Verbindung zum MariaDB-Server herstellen

Nachdem Sie Ihre Datenbankinstanz, Ihr Schema und Ihren Benutzer eingerichtet haben, ist es an der Zeit, in C++ einzusteigen. Alles beginnt mit dem Herstellen einer Verbindung zu MariaDB. Dazu müssen Sie natürlich die MariaDB-Connector-Header-Dateien, insbesondere conncpp.hpp, am Anfang der Datei, zu der Sie Ihren C++-Code hinzufügen, eingefügt haben.

#include 

Um eine Verbindung herzustellen, beginnen Sie mit dem Abrufen eines Driver -Objekt, das dann in Kombination mit den Konfigurationsinformationen von Java Database Connectivity (JDBC) verwendet werden kann, um eine Connection zu erhalten Objekt.

// Treiber instanziierensql::Driver* driver =sql::mariadb::get_driver_instance();// Verbindungen konfigurierenql::SQLString url("jdbc:mariadb://localhost:3306/todo");sql::Eigenschaften properties({{"user", "app_user"}, {"password", "Password123!"}});// Verbindung aufbauenstd::unique_ptr conn(driver->connect(url, properties ));

Weitere Informationen zur Verbindungsfunktion von MariaDB Connector/C++ finden Sie in unserer offiziellen Unternehmensdokumentation.

Aufgaben hinzufügen

Sobald Sie eine Connection erhalten haben Objekt, du gehst ins Rennen! Mit conn aus dem vorherigen Abschnitt können Sie jetzt SQL ausführen, indem Sie eine vorbereitete Anweisung verwenden, um Daten in MariaDB einzufügen.

// Erzeuge ein neues PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("In Aufgaben (Beschreibung) Werte einfügen (?)"));// Werte an SQL-Anweisungen bindentmnt->setString (1, Beschreibung);// Abfragen ausführenstmnt->executeQuery();

Abrufen von Aufgaben

Mit einem sehr ähnlichen Ansatz, wie im letzten Abschnitt, können Sie auch ein Statement erstellen Objekt, um alle Aufgabendatensätze in der Aufgabentabelle abzurufen und auszudrucken.

// Neues Statement erstellenstd::unique_ptr stmnt(conn->createStatement());// querysql::ResultSet ausführen *res =stmnt->executeQuery("select * from task");// Und durchlaufen print resultswhile (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", abgeschlossen =" <getBoolean(3) <<"\n";}

Aufgaben aktualisieren

Sie können auch ein PreparedStatement verwenden und Angabe von Parametern (und Werten), um einen bestehenden Aufgabendatensatz zu lokalisieren und zu ändern.

// Erstellen Sie ein neues PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("Aktualisierungsaufgabensatz abgeschlossen =? wobei id =?"));// Werte an SQL-Anweisungen bindentmnt->setBoolean(1, abgeschlossen); stmnt->setInt(2, id);// Abfrage ausführenstmnt->executeQuery();

Aufgaben löschen

Und natürlich haben Sie auch die Möglichkeit, Daten aus MariaDB zu entfernen, indem Sie ein DELETE SQL verwenden -Anweisung mit einem PreparedStatement , um auf einen bestimmten Datensatz abzuzielen.

// Erstellen Sie ein neues PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("delete from task where id =?"));// Binden Sie Werte an SQL-Anweisungentmnt->setInt(1, id);// Execute querystmnt->executeQuery();

Alles zusammenbringen

Schließlich können Sie alles in einem eigenständigen Beispiel zusammenfassen, indem Sie den unten stehenden Code kopieren und in eine neue Datei namens tasks.cpp einfügen . Das folgende Beispiel kombiniert alle CRUD-Operationen, die ich durchlaufen habe, in einer Sammlung von Funktionen, die von main ausgeführt werden können Methode.

#include  #include #include 
// Einen Aufgabendatensatz löschen (angegeben durch id)void deleteTask(std::unique_ptr &conn, int id) { try { // Erstellen Sie ein neues PreparedStatement std::unique_ptr stmnt(conn->prepareStatement("delete from task where id =?")); // Werte an SQL-Anweisung binden stmnt->setInt(1, id); // Abfrage ausführen stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fehler beim Löschen der Aufgabe:" < PrepareStatement("Update Tasks Set Completed =? where id =?")); // Werte an SQL-Anweisung binden stmnt->setBoolean(1, abgeschlossen); stmnt->setInt(2, id); // Abfrage ausführen stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fehler beim Aktualisieren des Aufgabenstatus:" <prepareStatement("insert into task (description) Werte (?)")); // Werte an SQL-Anweisung binden stmnt->setString(1, description); // Abfrage ausführen stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Fehler beim Einfügen einer neuen Aufgabe:" <createStatement()); // Abfrage ausführen sql::ResultSet *res =stmnt->executeQuery("select * from task"); // Durchlaufen und Ergebnisse drucken while (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", abgeschlossen =" <getBoolean(3) <<"\n"; } } catch(sql::SQLException&e){ std::cerr <<"Fehler beim Auswählen von Aufgaben:" <connect(url, properties)); // Argumente verwenden, um die nächsten Ausführungsschritte zu bestimmen if (!strcmp(argv[1],"showTasks")) { showTasks(conn); } else if (!strcmp(argv[1],"addTask")) { if (argc !=3) { std::cout <<"Ungültige Argumente"; Rückgabe 1; } addTask(conn, argv[2]); } else if (!strcmp(argv[1],"updateTaskStatus")) { if (argc !=4) { std::cout <<"Ungültige Argumente"; Rückgabe 1; } updateTaskStatus(conn, atoi(argv[2]), argv[3]); } else if (!strcmp(argv[1],"deleteTask")) { if (argc !=3) { std::cout <<"Ungültige Argumente"; Rückgabe 1; } deleteTask(conn, atoi(argv[2])); } // Verbindung schließen conn->close(); } catch(sql::SQLException&e){ std::cerr <<"Fehler beim Verbinden mit der MariaDB-Plattform:" < 

Die vollständige Quelle dieser Beispielanwendung finden Sie auch hier. Die Quelle für dieses C++-Beispiel ist in einem Repository für eine Anwendung namens „TODO“ enthalten, die auch ein Web-Front-End und mehrere andere Beispielanwendungen für die Integration von MariaDB-Konnektoren in einer Vielzahl von Sprachen enthält.

Anwendung ausführen

In einer Linux-Umgebung, nachdem Sie tasks.cpp erstellt haben , können Sie mithilfe eines C++-Compilers eine ausführbare Datei namens Tasks erstellen.

$ g++ -o Aufgaben task.cpp -std=c++11 -lmariadbcpp

Mit der ausführbaren Datei können Sie verschiedene Argumentwerte angeben, um die CRUD-Operationen zu testen.

  • Einfügen eines neuen Aufgabendatensatzes durch Angabe eines Werts für die Beschreibung.
./tasks addTask ‚Eine neue Aufgabe‘
  • Alle Auftragsdatensätze ausdrucken.
./tasks showTasks
  • Aktualisieren des abgeschlossenen Werts eines Aufgabendatensatzes. Geben Sie einfach Werte für ID und Completed ein.
./tasks updateTaskStatus 1 1
  • Löschen Sie einen Aufgabendatensatz, indem Sie einen ID-Wert angeben.
./tasks deleteAufgabe 1

Nur der Anfang

Hoffentlich hat es Ihnen Spaß gemacht, zu sehen, wie einfach es ist, C++ mit MariaDB zu verwenden. Dies ist zwar eine großartige Einführung in die C++-Programmierung mit MariaDB, aber wir haben erst begonnen, an der Oberfläche dessen zu kratzen, was möglich ist!

Möchten Sie tiefer in MariaDB Connector/C++ eintauchen? Besuchen Sie unbedingt den MariaDB Developer Hub für noch mehr Inhalte zum neuen C++-Connector sowie zu vielen anderen MariaDB-Features und -Funktionen.

Suchen Sie die MariaDB Connector/C++ Enterprise-Dokumentation.