Arbeiten mit Datenbanken in C++: PostgreSQL und MongoDB

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 Datenbanken an C++ anbinden



Moderne C++-Anwendungen kommen selten ohne dauerhafte Datenspeicherung aus. Ob es sich um einen Spieleserver, ein Telemetriesystem oder ein hochlastiges Backend handelt – Sie benötigen eine Interaktion mit einem DBMS. Auf dem Markt dominieren zwei grundlegend unterschiedliche Ansätze: relationale (SQL) und dokumentenorientierte (NoSQL) Datenbanken.



In diesem Artikel werden wir uns ansehen, wie man mit PostgreSQL (über die Bibliothek libpqxx) und MongoDB (über den offiziellen C++-Treiber mongo-cxx-driver) arbeitet. Sie erfahren, wie Sie eine Verbindung einrichten, CRUD-Operationen durchführen und Fehler behandeln.



1. PostgreSQL und C++: Der relationale Ansatz



PostgreSQL ist ein leistungsstarkes objektrelationales DBMS mit hervorragender Unterstützung für Transaktionen und komplexe Abfragen. Für C++ wird die Bibliothek libpqxx empfohlen – ein moderner, typsicherer Wrapper um libpq.



1.1 Installation von libpqxx

Die Installation hängt von Ihrem Betriebssystem ab:

  • Ubuntu/Debian: sudo apt install libpqxx-dev
  • macOS (Homebrew): brew install libpqxx
  • Windows (vcpkg): vcpkg install libpqxx


1.2 Verbindung und Ausführung von Abfragen

Betrachten wir ein minimales Programm zum Verbinden mit der Datenbank, Erstellen einer Tabelle und Einfügen von Daten:



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

int main() { try { // Verbindung zur Datenbank pqxx::connection conn("dbname=testdb user=postgres password=secret hostaddr=127.0.0.1 port=5432"); if (conn.is_open()) { std::cout << "Connected to PostgreSQL: " << conn.dbname() << std::endl; }

// Transaktion erstellen pqxx::work txn(conn);

// Tabelle erstellen txn.exec("CREATE TABLE IF NOT EXISTS users (" "id SERIAL PRIMARY KEY," "name VARCHAR(100) NOT NULL," "email VARCHAR(255) UNIQUE NOT NULL" ");");

// Daten einfügen (mit Parametrisierung für Sicherheit) txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Alice", "alice@example.com");

// Transaktion bestätigen txn.commit();

std::cout << "Data inserted successfully." << std::endl;

} catch (const std::exception &e) { std::cerr << "Error: " << e.what() << std::endl; return 1; } return 0;}


1.3 Daten lesen

Verwenden Sie für Datenabfragen Iteratoren über das Abfrageergebnis:



pqxx::work txn(conn);pqxx::result result = txn.exec("SELECT id, name, email FROM users;");

for (auto row : result) { int id = row["id"].as<int>(); std::string name = row["name"].as<std::string>(); std::string email = row["email"].as<std::string>(); std::cout << id << ": " << name << " <" << email << ">" << std::endl;}


2. MongoDB und C++: Der dokumentenorientierte Ansatz



MongoDB speichert Daten im BSON-Format (binäres JSON). Für C++ wird der offizielle Treiber mongo-cxx-driver verwendet, der auf der Bibliothek libmongoc basiert.



2.1 Installation von mongo-cxx-driver

  • Ubuntu: sudo apt install libmongoc-1.0-0 libbson-1.0-0 libmongocxx-dev
  • macOS: brew install mongo-cxx-driver
  • Build aus dem Quellcode: Erfordert cmake, libmongoc und libbson.


2.2 Verbindung und CRUD-Operationen

Beispiel für die Verbindung zu einer lokalen MongoDB-Instanz und das Einfügen eines Dokuments:



#include <iostream>#include <bsoncxx/b                

Blogs

Buchempfehlungen