Introduction au travail avec les bases de données en C++
\n\nLes applications modernes ne peuvent rarement se passer de stockage de données. C++ est un langage de programmation système puissant, parfaitement adapté aux projets à forte charge travaillant avec des bases de données. Dans cet article, nous verrons comment se connecter à deux SGBD populaires — le relationnel PostgreSQL et l'orienté documents MongoDB — et effectuer des opérations de base (CRUD).
\n\nCe contenu est destiné aux débutants : vous apprendrez quelles bibliothèques sont nécessaires, comment les installer, et vous verrez des exemples de code prêts à l'emploi. Après cette lecture, vous serez capable d'intégrer C++ avec l'une ou l'autre de ces bases de données.
\n\nPostgreSQL en C++ : approche relationnelle
\n\nPostgreSQL est l'un des SGBD relationnels open source les plus fiables. Pour l'utiliser depuis C++, on utilise la bibliothèque libpqxx — un wrapper officiel autour de la bibliothèque C libpq.
\n\nInstallation de libpqxx
\n\nSous Linux (Ubuntu/Debian), l'installation se fait avec une seule commande :
\n\nsudo apt-get install libpqxx-dev\n\nPour Windows, vous pouvez utiliser vcpkg :
\n\nvcpkg install libpqxx\n\nConnexion et exécution de requêtes
\n\nVoici un exemple simple : connexion à la base de données, création d'une table et insertion de données.
\n\n#include <iostream>\n#include <pqxx/pqxx>\n\nint main() {\n try {\n // Connexion à la base de données (remplacez les paramètres par les vôtres)\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 << "Connexion à PostgreSQL réussie !" << std::endl;\n }\n\n // Création d'une transaction\n pqxx::work txn(conn);\n\n // Création de la table\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 // Insertion de données\n txn.exec("INSERT INTO users (name, email) VALUES "\n "('Ivan Petrov', 'ivan@example.com'), "\n "('Maria Smirnova', 'maria@example.com')");\n\n // Validation de la transaction\n txn.commit();\n std::cout << "Données ajoutées avec succès !" << std::endl;\n\n } catch (const std::exception &e) {\n std::cerr << "Erreur : " << e.what() << std::endl;\n return 1;\n }\n return 0;\n}\n\nLecture de données (SELECT)
\n\nPour récupérer des données, utilisez l'itérateur de résultat :
\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\nImportant : Utilisez toujours des requêtes paramétrées pour vous protéger des injections SQL :
\n\ntxn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2)",\n "Alexeï", "alex@example.com");\n\nMongoDB en C++ : approche orientée documents
\n\nMongoDB est une base de données NoSQL qui stocke les données au format BSON (JSON binaire). Pour C++, il existe un pilote officiel mongocxx.
\n\nInstallation de mongocxx
\n\nInstallation sous Linux (nécessite d'installer d'abord le pilote C de MongoDB) :
\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\nConnexion et opérations CRUD
\n\nLe code suivant montre la connexion à