Introdução ao trabalho com bancos de dados em C++
\n\nAplicativos modernos raramente dispensam o armazenamento de dados. C++ é uma linguagem de programação de sistemas poderosa, ideal para projetos de alta carga que trabalham com bancos de dados. Neste artigo, vamos abordar como se conectar a dois SGBDs populares — o relacional PostgreSQL e o orientado a documentos MongoDB — e realizar operações básicas (CRUD).
\n\nO material é voltado para iniciantes: você aprenderá quais bibliotecas são necessárias, como instalá-las e verá exemplos prontos de código. Após a leitura, você será capaz de integrar C++ com qualquer um desses bancos de dados de forma independente.
\n\nPostgreSQL em C++: abordagem relacional
\n\nPostgreSQL é um dos SGBDs relacionais de código aberto mais confiáveis. Para trabalhar com ele a partir de C++, utiliza-se a biblioteca libpqxx — um wrapper oficial sobre a biblioteca C libpq.
\n\nInstalação do libpqxx
\n\nNo Linux (Ubuntu/Debian), a instalação é feita com um único comando:
\n\nsudo apt-get install libpqxx-dev\n\nPara Windows, pode-se usar o vcpkg:
\n\nvcpkg install libpqxx\n\nConexão e execução de consulta
\n\nVamos considerar um exemplo simples: conexão ao banco de dados, criação de tabela e inserção de dados.
\n\n#include <iostream>\n#include <pqxx/pqxx>\n\nint main() {\n try {\n // Conexão ao BD (substitua os parâmetros pelos seus)\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 << "Conexão ao PostgreSQL bem-sucedida!" << std::endl;\n }\n\n // Criação de transação\n pqxx::work txn(conn);\n\n // Criação de tabela\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 // Inserção de dados\n txn.exec("INSERT INTO users (name, email) VALUES "\n "('Ivan Petrov', 'ivan@example.com'), "\n "('Maria Smirnova', 'maria@example.com')");\n\n // Confirmação da transação\n txn.commit();\n std::cout << "Dados adicionados com sucesso!" << std::endl;\n\n } catch (const std::exception &e) {\n std::cerr << "Erro: " << e.what() << std::endl;\n return 1;\n }\n return 0;\n}\n\nLeitura de dados (SELECT)
\n\nPara consultar dados, use o iterador de resultado:
\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: Sempre use consultas parametrizadas para proteção contra injeção de SQL:
\n\ntxn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2)",\n "Alexey", "alex@example.com");\n\nMongoDB em C++: abordagem orientada a documentos
\n\nMongoDB é um banco de dados NoSQL que armazena dados no formato BSON (JSON binário). Para C++, existe o driver oficial mongocxx.
\n\nInstalação do mongocxx
\n\nInstalação no Linux (requer instalação prévia do 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\nConexão e operações CRUD
\n\nO código a seguir demonstra a conexão ao