Travailler 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

Introduction : Pourquoi connecter des bases de données à C++



Les applications modernes en C++ se passent rarement d'un stockage permanent de données. Qu'il s'agisse d'un serveur de jeu, d'un système de télémétrie ou d'un backend à forte charge, vous aurez besoin d'interagir avec un SGBD. Deux approches fondamentalement différentes dominent le marché : les bases de données relationnelles (SQL) et les bases de données orientées documents (NoSQL).



Dans cet article, nous allons voir comment travailler avec PostgreSQL (via la bibliothèque libpqxx) et MongoDB (via le pilote C++ officiel mongo-cxx-driver). Vous apprendrez à configurer la connexion, à effectuer des opérations CRUD et à gérer les erreurs.



1. PostgreSQL et C++ : l'approche relationnelle



PostgreSQL est un SGBD objet-relationnel puissant avec un excellent support des transactions et des requêtes complexes. Pour C++, il est recommandé d'utiliser la bibliothèque libpqxx, une enveloppe moderne et type-safe au-dessus de libpq.



1.1 Installation de libpqxx

L'installation dépend de votre système d'exploitation :

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


1.2 Connexion et exécution de requêtes

Considérons un programme minimal pour se connecter à la base de données, créer une table et insérer des données :



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

int main() { try { // Connexion à la base de données 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; }

// Création d'une transaction pqxx::work txn(conn);

// Création de la table txn.exec("CREATE TABLE IF NOT EXISTS users (" "id SERIAL PRIMARY KEY," "name VARCHAR(100) NOT NULL," "email VARCHAR(255) UNIQUE NOT NULL" ");");

// Insertion de données (avec paramétrage pour la sécurité) txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Alice", "alice@example.com");

// Validation de la transaction 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 Lecture des données

Pour la sélection de données, utilisez les itérateurs sur le résultat de la requête :



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 et C++ : l'approche orientée documents



MongoDB stocke les données au format BSON (JSON binaire). Pour C++, on utilise le pilote officiel mongo-cxx-driver, construit sur la bibliothèque libmongoc.



2.1 Installation de mongo-cxx-driver

  • Ubuntu : sudo apt install libmongoc-1.0-0 libbson-1.0-0 libmongocxx-dev
  • macOS : brew install mongo-cxx-driver
  • Compilation à partir des sources : Nécessite cmake, libmongoc et libbson.


2.2 Connexion et opérations CRUD

Exemple de connexion à une instance MongoDB locale et d'insertion d'un document :



#include <iostream>#include <bsoncxx/b                

Blogs

Book Recommendations