Trabajo con bases de datos en C++: PostgreSQL y MongoDB

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con bases de datos en C++: PostgreSQL y MongoDB



Las aplicaciones modernas en C++ rara vez prescinden de la interacción con bases de datos. Ya sea que esté desarrollando un servidor de alta carga, un sistema de análisis o software embebido, saber trabajar con sistemas de gestión de bases de datos relacionales (PostgreSQL) y orientados a documentos (MongoDB) es una habilidad obligatoria. En este artículo, analizaremos la conexión, ejecución de consultas y manejo de errores para ambos sistemas con ejemplos prácticos.



1. Preparación del entorno y selección de librerías



Para trabajar con PostgreSQL en C++, el estándar de facto es la librería libpqxx. Para MongoDB, el driver oficial es mongocxx (basado en libmongoc).



Instalación de libpqxx (Linux / macOS)

# Ubuntu / Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx


Instalación de mongocxx (Linux / macOS)

# Requiere instalar previamente libmongoc y boostsudo apt-get install libmongoc-1.0-0 libbson-1.0 libmongocxx-dev

# macOSbrew install mongo-cxx-driver


Para Windows use vcpkg o descargue compilaciones precompiladas desde los repositorios oficiales.



2. Trabajo con PostgreSQL mediante libpqxx



La librería libpqxx proporciona una interfaz C++ conveniente sobre el driver C libpq. Las clases principales son: connection, work (transacción), result.



Conexión a la base de datos

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

int main() { try { // Cadena de conexión: "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;}


Ejecución de consultas (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); // Usamos consulta parametrizada para protección contra inyección 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; }}


Manejo de errores

Envuelva todas las operaciones en try-catch. libpqxx genera excepciones de las clases pqxx::sql_error, pqxx::broken_connection y otras.



3. Trabajo con MongoDB mediante mongocxx



El driver mongocxx utiliza C++17 moderno. Las entidades principales son: client, database, collection, document (a través de bsoncxx).



Conexión y obtención de la colección

#include <ios                

Blogs

Book Recommendations