Travail avec les bases de données en C++ : PostgreSQL et MongoDB

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec les bases de données en C++ : PostgreSQL et MongoDB



Les applications modernes en C++ ne se passent que rarement d'interaction avec les bases de données. Que vous développiez un serveur à forte charge, un système d'analyse ou un logiciel embarqué, savoir travailler avec des SGBD relationnels (PostgreSQL) et orientés documents (MongoDB) est une compétence obligatoire. Dans cet article, nous aborderons la connexion, l'exécution de requêtes et la gestion des erreurs pour les deux systèmes à l'aide d'exemples pratiques.



1. Préparation de l'environnement et choix des bibliothèques



Pour travailler avec PostgreSQL en C++, la bibliothèque de facto est libpqxx. Pour MongoDB, le pilote officiel est mongocxx (basé sur libmongoc).



Installation de libpqxx (Linux / macOS)

# Ubuntu / Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx


Installation de mongocxx (Linux / macOS)

# Nécessite d'installer préalablement libmongoc et boostsudo apt-get install libmongoc-1.0-0 libbson-1.0 libmongocxx-dev

# macOSbrew install mongo-cxx-driver


Pour Windows, utilisez vcpkg ou téléchargez des builds précompilés depuis les dépôts officiels.



2. Travailler avec PostgreSQL via libpqxx



La bibliothèque libpqxx fournit une interface C++ pratique au-dessus du pilote C libpq. Les classes principales sont : connection, work (transaction), result.



Connexion à la base de données

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

int main() { try { // Chaîne de connexion : "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;}


Exécution de requêtes (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); // Utilisation d'une requête paramétrée pour se protéger des injections SQL 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; }}


Gestion des erreurs

Enveloppez toutes les opérations dans un try-catch. libpqxx génère des exceptions des classes pqxx::sql_error, pqxx::broken_connection et autres.



3. Travailler avec MongoDB via mongocxx



Le pilote mongocxx utilise le C++17 moderne. Les entités principales sont : client, database, collection, document (via bsoncxx).



Connexion et obtention de la collection

#include <ios                

Blogs

Book Recommendations