Einführung in die Arbeit mit Datenbanken in C++
\n\nModerne Anwendungen kommen selten ohne Datenspeicherung aus. C++ ist eine leistungsstarke Systemprogrammiersprache, die sich hervorragend für hochbelastete Projekte eignet, die mit Datenbanken arbeiten. In diesem Artikel werden wir untersuchen, wie man eine Verbindung zu zwei beliebten DBMS herstellt – dem relationalen PostgreSQL und dem dokumentenorientierten MongoDB – und grundlegende Operationen (CRUD) durchführt.
\n\nDas Material richtet sich an Anfänger: Sie erfahren, welche Bibliotheken benötigt werden, wie man sie installiert, und sehen fertige Codebeispiele. Nach der Lektüre können Sie C++ selbstständig mit einer dieser Datenbanken integrieren.
\n\nPostgreSQL in C++: Relationaler Ansatz
\n\nPostgreSQL ist eines der zuverlässigsten relationalen Open-Source-DBMS. Für die Arbeit damit in C++ wird die Bibliothek libpqxx verwendet – ein offizieller Wrapper um die C-Bibliothek libpq.
\n\nInstallation von libpqxx
\n\nUnter Linux (Ubuntu/Debian) erfolgt die Installation mit einem Befehl:
\n\nsudo apt-get install libpqxx-dev\n\nFür Windows kann vcpkg verwendet werden:
\n\nvcpkg install libpqxx\n\nVerbindung und Ausführung einer Abfrage
\n\nBetrachten wir ein einfaches Beispiel: Verbindung zur Datenbank, Erstellen einer Tabelle und Einfügen von Daten.
\n\n#include <iostream>\n#include <pqxx/pqxx>\n\nint main() {\n try {\n // Verbindung zur DB (Parameter durch eigene ersetzen)\n pqxx::connection conn("dbname=testdb user=postgres password=secret hostaddr=127.0.0.1 port=5432");\n \n if (conn.is_open()) {\n std::cout << "Verbindung zu PostgreSQL erfolgreich!" << std::endl;\n }\n\n // Transaktion erstellen\n pqxx::work txn(conn);\n\n // Tabelle erstellen\n txn.exec("CREATE TABLE IF NOT EXISTS users ("\n "id SERIAL PRIMARY KEY, "\n "name VARCHAR(100) NOT NULL, "\n "email VARCHAR(100) UNIQUE NOT NULL)");\n\n // Daten einfügen\n txn.exec("INSERT INTO users (name, email) VALUES "\n "('Ivan Petrov', 'ivan@example.com'), "\n "('Maria Smirnova', 'maria@example.com')");\n\n // Transaktion festschreiben\n txn.commit();\n std::cout << "Daten erfolgreich hinzugefügt!" << std::endl;\n\n } catch (const std::exception &e) {\n std::cerr << "Fehler: " << e.what() << std::endl;\n return 1;\n }\n return 0;\n}\n\nDaten lesen (SELECT)
\n\nFür die Datenabfrage verwenden Sie den Ergebnis-Iterator:
\n\npqxx::work txn(conn);\npqxx::result result = txn.exec("SELECT id, name, email FROM users");\n\nfor (const auto &row : result) {\n int id = row["id"].as<int>();\n std::string name = row["name"].as<std::string>();\n std::string email = row["email"].as<std::string>();\n std::cout << id << " | " << name << " | " << email << std::endl;\n}\n\nWichtig: Verwenden Sie immer parametrisierte Abfragen zum Schutz vor SQL-Injection:
\n\ntxn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2)",\n "Alexey", "alex@example.com");\n\nMongoDB in C++: Dokumentenorientierter Ansatz
\n\nMongoDB ist eine NoSQL-Datenbank, die Daten im BSON-Format (binäres JSON) speichert. Für C++ gibt es den offiziellen Treiber mongocxx.
\n\nInstallation von mongocxx
\n\nInstallation unter Linux (erfordert vorherige Installation des MongoDB C-Treibers):
\n\nsudo apt-get install libmongoc-dev libbson-dev\ngit clone https://github.com/mongodb/mongo-cxx-driver.git\ncd mongo-cxx-driver\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=ON\nmake -j4\nsudo make install\n\nVerbindung und CRUD-Operationen
\n\nDer folgende Code demonstriert die Verbindung zu