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

Introducción: ¿Por qué conectar bases de datos a C++?



Las aplicaciones modernas en C++ rara vez prescinden del almacenamiento persistente de datos. Ya sea un servidor de juegos, un sistema de telemetría o un backend de alta carga, necesitarás interactuar con un DBMS. En el mercado dominan dos enfoques fundamentalmente diferentes: bases de datos relacionales (SQL) y orientadas a documentos (NoSQL).



En este artículo, analizaremos cómo trabajar con PostgreSQL (a través de la biblioteca libpqxx) y MongoDB (a través del controlador oficial de C++ mongo-cxx-driver). Aprenderás cómo configurar la conexión, realizar operaciones CRUD y manejar errores.



1. PostgreSQL y C++: enfoque relacional



PostgreSQL es un potente DBMS objeto-relacional con excelente soporte para transacciones y consultas complejas. Para C++, se recomienda usar la biblioteca libpqxx, un envoltorio moderno y type-safe sobre libpq.



1.1 Instalación de libpqxx

La instalación depende de tu sistema operativo:

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


1.2 Conexión y ejecución de consultas

Veamos un programa mínimo para conectarse a la base de datos, crear una tabla e insertar datos:



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

int main() { try { // Conexión a la base de datos 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; }

// Creación de transacción pqxx::work txn(conn);

// Creación de tabla txn.exec("CREATE TABLE IF NOT EXISTS users (" "id SERIAL PRIMARY KEY," "name VARCHAR(100) NOT NULL," "email VARCHAR(255) UNIQUE NOT NULL" ");");

// Inserción de datos (con parametrización para seguridad) txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Alice", "alice@example.com");

// Confirmación de transacción 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 Lectura de datos

Para recuperar datos, usa iteradores sobre el resultado de la consulta:



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 y C++: enfoque orientado a documentos



MongoDB almacena datos en formato BSON (JSON binario). Para C++, se usa el controlador oficial mongo-cxx-driver, construido sobre la biblioteca libmongoc.



2.1 Instalación de mongo-cxx-driver

  • Ubuntu: sudo apt install libmongoc-1.0-0 libbson-1.0-0 libmongocxx-dev
  • macOS: brew install mongo-cxx-driver
  • Compilación desde código fuente: Requiere cmake, libmongoc y libbson.


2.2 Conexión y operaciones CRUD

Ejemplo de conexión a una instancia local de MongoDB e inserción de un documento:



#include <iostream>#include <bsoncxx/b                

Blogs

Book Recommendations