Arbeit mit Datenbanken in C++: PostgreSQL und MongoDB in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum brauchen C++-Entwickler Datenbanken?

C++ ist eine der leistungsstärksten systemnahen Programmiersprachen. Doch selbst in hochbelasteten Projekten kommt man selten ohne Datenspeicherung aus. Ob Spieleserver, Finanzanwendung oder IoT-System – Sie benötigen eine zuverlässige Speicherlösung. In diesem Artikel betrachten wir zwei beliebte Ansätze: das relationale DBMS PostgreSQL und die dokumentenorientierte MongoDB. Sie erfahren, wie Sie diese in Ihr C++-Projekt einbinden, grundlegende Operationen durchführen und typische Fehler vermeiden.



1. PostgreSQL in C++: Klassiker der relationalen Datenbanken

PostgreSQL ist ein ausgereiftes, zuverlässiges DBMS mit hervorragender Unterstützung für Transaktionen und komplexe Abfragen. Für die Arbeit mit C++ wird meist die Bibliothek libpqxx verwendet – ein offizieller C++-Wrapper um libpq.



Installation und Einbindung

Installieren Sie libpqxx über den Paketmanager oder bauen Sie es aus den Quellen:

# Ubuntu/Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx

Fügen Sie in CMakeLists.txt hinzu:

find_package(PQXX REQUIRED)target_link_libraries(your_project pqxx::pqxx)


Verbindung zur Datenbank und einfacher SELECT

Betrachten wir ein minimales Beispiel – das Abrufen einer Benutzerliste:

#include <iostream>#include <pqxx/pqxx>

int main() { try { // Verbindungszeichenfolge: "host=... dbname=... user=... password=..." pqxx::connection conn("host=localhost dbname=testdb user=admin password=secret"); pqxx::work txn(conn);

// Abfrage ausführen pqxx::result result = txn.exec("SELECT id, name, email FROM users LIMIT 10");

for (auto row : result) { std::cout << "ID: " << row[0].as<int>() << ", Name: " << row[1].as<std::string>() << ", Email: " << row[2].as<std::string>() << std::endl; }

txn.commit(); // Transaktion abschließen } catch (const std::exception &e) { std::cerr << "Fehler: " << e.what() << std::endl; return 1; } return 0;}

Beachten Sie: Alle Operationen sind in einen try-catch-Block eingeschlossen – libpqxx wirft bei Fehlern Ausnahmen.



Parametrisierte Abfragen (Sicherheit)

Verketten Sie niemals Zeichenfolgen zur Werteeingabe – das öffnet den Weg für SQL-Injection. Verwenden Sie vorbereitete Anweisungen:

pqxx::work txn(conn);// Vorbereitungconn.prepare("insert_user", "INSERT INTO users (name, email) VALUES ($1, $2)");

// Ausführung mit Parameterntxn.exec_prepared("insert_user", "Iwan Petrow", "ivan@example.com");txn.commit();


2. MongoDB in C++: Flexibilität von NoSQL

MongoDB speichert Daten im BSON-Format (binäres JSON) und eignet sich hervorragend für Aufgaben, bei denen sich das Datenschema ändern kann. Der offizielle Treiber für C++ ist mongocxx (basiert auf mongoc).



Installation des mongocxx-Treibers

Der Bau aus den Quellen ist der zuverlässigste Weg. Kurzanleitung:

# Abhängigkeiten installieren: libmongoc, libbson, cmakegit clone https://github.com/mongodb/mongo-cxx-driver.gitcd mongo-cxx-driver/buildcmake .. -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=ONmake -j4sudo make install

In CMakeLists.txt:

find_package(libmongocxx REQUIRED)target_link_libraries(your_project mongocxx::mongocxx)


Verbindung und Einfügen eines Dokuments

#include <iostream>#include <bsoncxx/json.hpp>#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>

int main() { // Treiberinitialisierung (einmal pro Anwendung) mongocxx::instance inst{};

// Verb

Blogs

Buchempfehlungen