Introducción al trabajo con bases de datos en C++
\n\nLas 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\nEl 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\nPostgreSQL en C++: enfoque relacional
\n\nPostgreSQL 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\nInstalación de libpqxx
\n\nEn Linux (Ubuntu/Debian), la instalación se realiza con un solo comando:
\n\nsudo apt-get install libpqxx-dev\n\nPara Windows, puede usar vcpkg:
\n\nvcpkg install libpqxx\n\nConexión y ejecución de consultas
\n\nVeamos 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\nLectura de datos (SELECT)
\n\nPara la selección de datos, use el iterador de resultados:
\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\nImportante: Utilice siempre consultas parametrizadas para protegerse contra la inyección SQL:
\n\ntxn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2)",\n "Alexéi", "alex@example.com");\n\nMongoDB en C++: enfoque orientado a documentos
\n\nMongoDB es una base de datos NoSQL que almacena datos en formato BSON (JSON binario). Para C++, existe el controlador oficial mongocxx.
\n\nInstalación de mongocxx
\n\nInstalación en Linux (requiere instalar previamente MongoDB C Driver):
\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\nConexión y operaciones CRUD
\n\nEl siguiente código demuestra la conexión a