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

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

Introduction : Pourquoi un développeur C++ a-t-il besoin de bases de données ?

C++ est l'un des langages de programmation système les plus puissants. Cependant, même dans les projets à forte charge, il est rare de se passer de la persistance des données. Qu'il s'agisse d'un serveur de jeu, d'une application financière ou d'un système IoT, vous aurez besoin d'un stockage fiable. Dans cet article, nous aborderons deux approches populaires : le SGBD relationnel PostgreSQL et le système orienté documents MongoDB. Vous apprendrez à les connecter à un projet C++, à effectuer des opérations de base et à éviter les erreurs typiques.



1. PostgreSQL en C++ : le classique des BDD relationnelles

PostgreSQL est un SGBD mature et fiable avec un excellent support des transactions et des requêtes complexes. Pour l'utiliser depuis C++, on utilise le plus souvent la bibliothèque libpqxx — le wrapper C++ officiel autour de libpq.



Installation et connexion

Installez libpqxx via le gestionnaire de paquets ou compilez-le depuis les sources :

# Ubuntu/Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx

Dans CMakeLists.txt, ajoutez :

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


Connexion à la base et SELECT simple

Voici un exemple minimal — récupération de la liste des utilisateurs :

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

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

// Exécution de la requête 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(); // Finalisation de la transaction } catch (const std::exception &e) { std::cerr << "Erreur : " << e.what() << std::endl; return 1; } return 0;}

Notez que toutes les opérations sont encapsulées dans un bloc try-catch — libpqxx génère des exceptions en cas de panne.



Requêtes paramétrées (sécurité)

Ne concaténez jamais de chaînes pour substituer des valeurs — cela ouvre la voie aux injections SQL. Utilisez des expressions préparées :

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

// Exécution avec paramètrestxn.exec_prepared("insert_user", "Ivan Petrov", "ivan@example.com");txn.commit();


2. MongoDB en C++ : la flexibilité du NoSQL

MongoDB stocke les données au format BSON (JSON binaire) et est parfait pour les cas où le schéma des données peut changer. Le pilote officiel pour C++ est mongocxx (basé sur mongoc).



Installation du pilote mongocxx

La compilation depuis les sources est la méthode la plus fiable. Instructions rapides :

# Installez les dépendances : 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

Dans CMakeLists.txt :

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


Connexion et insertion d'un document

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

int main() { // Initialisation du pilote (une fois par application) mongocxx::instance inst{};

// Con

Blogs

Book Recommendations