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

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 al trabajo con bases de datos en C++

\n\n

Las aplicaciones modernas rara vez prescinden del almacenamiento de datos. C++ es un potente lenguaje de programación de sistemas que es ideal para proyectos de alta carga que trabajan con bases de datos. En este artículo, analizaremos cómo conectarse a dos SGBD populares: la relacional PostgreSQL y la orientada a documentos MongoDB, y realizar operaciones básicas (CRUD).

\n\n

El material está dirigido a principiantes: aprenderá qué librerías se necesitan, cómo instalarlas y verá ejemplos de código listos para usar. Después de leerlo, podrá integrar C++ con cualquiera de estas bases de datos por su cuenta.

\n\n

PostgreSQL en C++: enfoque relacional

\n\n

PostgreSQL es uno de los SGBD relacionales de código abierto más confiables. Para trabajar con él desde C++, se utiliza la librería libpqxx, un envoltorio oficial sobre la librería C libpq.

\n\n

Instalación de libpqxx

\n\n

En Linux (Ubuntu/Debian), la instalación se realiza con un solo comando:

\n\n
sudo apt-get install libpqxx-dev
\n\n

Para Windows, puede usar vcpkg:

\n\n
vcpkg install libpqxx
\n\n

Conexión y ejecución de consultas

\n\n

Veamos un ejemplo muy simple: conexión a la base de datos, creación de una tabla e inserción de datos.

\n\n
#include <iostream>\n#include <pqxx/pqxx>\n\nint main() {\n    try {\n        // Conexión a la BD (reemplace los parámetros con los suyos)\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 << "¡Conexión a PostgreSQL exitosa!" << std::endl;\n        }\n\n        // Creación de transacción\n        pqxx::work txn(conn);\n\n        // Creación de tabla\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        // Inserción de datos\n        txn.exec("INSERT INTO users (name, email) VALUES "\n                 "('Iván Petrov', 'ivan@example.com'), "\n                 "('María Smirnova', 'maria@example.com')");\n\n        // Confirmación de la transacción\n        txn.commit();\n        std::cout << "¡Datos agregados exitosamente!" << std::endl;\n\n    } catch (const std::exception &e) {\n        std::cerr << "Error: " << e.what() << std::endl;\n        return 1;\n    }\n    return 0;\n}
\n\n

Lectura de datos (SELECT)

\n\n

Para la selección de datos, use el iterador de resultados:

\n\n
pqxx::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\n

Importante: Utilice siempre consultas parametrizadas para protegerse contra la inyección SQL:

\n\n
txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2)",\n                "Alexéi", "alex@example.com");
\n\n

MongoDB en C++: enfoque orientado a documentos

\n\n

MongoDB es una base de datos NoSQL que almacena datos en formato BSON (JSON binario). Para C++, existe el controlador oficial mongocxx.

\n\n

Instalación de mongocxx

\n\n

Instalación en Linux (requiere instalar previamente MongoDB C Driver):

\n\n
sudo 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\n

Conexión y operaciones CRUD

\n\n

El siguiente código demuestra la conexión a

Blogs

Book Recommendations