Arbeit 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

Arbeiten mit Datenbanken in C++: PostgreSQL und MongoDB



Moderne C++-Anwendungen kommen selten ohne Interaktion mit Datenbanken aus. Unabhängig davon, ob Sie einen hochbelasteten Server, ein Analysesystem oder eingebettete Software entwickeln, ist die Fähigkeit, mit relationalen (PostgreSQL) und dokumentenorientierten (MongoDB) DBMS zu arbeiten, eine zwingende Fähigkeit. In diesem Artikel behandeln wir die Verbindung, die Ausführung von Abfragen und die Fehlerbehandlung für beide Systeme anhand praktischer Beispiele.



1. Vorbereitung der Umgebung und Auswahl der Bibliotheken



Für die Arbeit mit PostgreSQL in C++ ist die Bibliothek libpqxx der De-facto-Standard. Für MongoDB ist es der offizielle Treiber mongocxx (basierend auf libmongoc).



Installation von libpqxx (Linux / macOS)

# Ubuntu / Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx


Installation von mongocxx (Linux / macOS)

# Erfordert vorherige Installation von libmongoc und boostsudo apt-get install libmongoc-1.0-0 libbson-1.0 libmongocxx-dev

# macOSbrew install mongo-cxx-driver


Für Windows verwenden Sie vcpkg oder laden Sie vorkompilierte Builds aus den offiziellen Repositories herunter.



2. Arbeiten mit PostgreSQL über libpqxx



Die Bibliothek libpqxx bietet eine bequeme C++-Schnittstelle über dem C-Treiber libpq. Die Hauptklassen sind: connection, work (Transaktion), result.



Verbindung zur Datenbank

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

int main() { try { // Verbindungszeichenfolge: "dbname=test user=postgres password=secret hostaddr=127.0.0.1 port=5432" pqxx::connection conn("dbname=testdb user=myuser password=mypass hostaddr=localhost"); if (conn.is_open()) { std::cout << "Connected to PostgreSQL: " << conn.dbname() << std::endl; } } catch (const std::exception &e) { std::cerr << "Connection error: " << e.what() << std::endl; return 1; } return 0;}


Ausführen von Abfragen (CRUD)

void createTable(pqxx::connection &conn) {    pqxx::work txn(conn);    txn.exec("CREATE TABLE IF NOT EXISTS users ("             "id SERIAL PRIMARY KEY,"             "name VARCHAR(100) NOT NULL,"             "email VARCHAR(255) UNIQUE,"             "age INT"             ")");    txn.commit();}

void insertUser(pqxx::connection &conn, const std::string &name, const std::string &email, int age) { pqxx::work txn(conn); // Verwendung parametrisierter Abfragen zum Schutz vor SQL-Injection txn.exec_params("INSERT INTO users (name, email, age) VALUES ($1, $2, $3)", name, email, age); txn.commit(); std::cout << "User inserted." << std::endl;}

void selectUsers(pqxx::connection &conn) { pqxx::nontransaction txn(conn); pqxx::result result = txn.exec("SELECT id, name, email, age FROM users"); for (auto row : result) { std::cout << "ID: " << row["id"].as<int>() << ", Name: " << row["name"].as<std::string>() << ", Email: " << row["email"].as<std::string>() << ", Age: " << row["age"].as<int>() << std::endl; }}


Fehlerbehandlung

Umfassen Sie alle Operationen mit try-catch. libpqxx wirft Ausnahmen der Klassen pqxx::sql_error, pqxx::broken_connection und andere.



3. Arbeiten mit MongoDB über mongocxx



Der Treiber mongocxx verwendet modernes C++17. Die Hauptentitäten sind: client, database, collection, document (über bsoncxx).



Verbindung und Abrufen einer Collection

#include <ios                

Blogs

Buchempfehlungen