Trabalho com bancos de dados em C++: PostgreSQL e MongoDB na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que um desenvolvedor C++ precisa de bancos de dados?

C++ é uma das linguagens de programação de sistemas mais poderosas. No entanto, mesmo em projetos de alta carga, raramente é possível prescindir do armazenamento de dados. Seja um servidor de jogos, uma aplicação financeira ou um sistema IoT — você precisará de um armazenamento confiável. Neste artigo, abordaremos duas abordagens populares: o SGBD relacional PostgreSQL e o orientado a documentos MongoDB. Você aprenderá como conectá-los a um projeto em C++, realizar operações básicas e evitar erros típicos.



1. PostgreSQL em C++: o clássico dos bancos de dados relacionais

PostgreSQL é um SGBD maduro e confiável, com excelente suporte a transações e consultas complexas. Para trabalhar com ele a partir do C++, a biblioteca mais utilizada é a libpqxx — um wrapper oficial em C++ sobre a libpq.



Instalação e conexão

Instale a libpqxx através do gerenciador de pacotes ou compile a partir do código fonte:

# Ubuntu/Debiansudo apt-get install libpqxx-dev

# macOS (Homebrew)brew install libpqxx

No CMakeLists.txt, adicione:

find_package(PQXX REQUIRED)target_link_libraries(your_project pqxx::pqxx)


Conexão ao banco e um SELECT simples

Vamos considerar um exemplo mínimo — obter uma lista de usuários:

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

int main() { try { // String de conexão: "host=... dbname=... user=... password=..." pqxx::connection conn("host=localhost dbname=testdb user=admin password=secret"); pqxx::work txn(conn);

// Executa a consulta pqxx::result result = txn.exec("SELECT id, name, email FROM users LIMIT 10");

for (auto row : result) { std::cout << "ID: " << row[0].as<int>() << ", Nome: " << row[1].as<std::string>() << ", Email: " << row[2].as<std::string>() << std::endl; }

txn.commit(); // Finaliza a transação } catch (const std::exception &e) { std::cerr << "Erro: " << e.what() << std::endl; return 1; } return 0;}

Observe: todas as operações estão envolvidas em um bloco try-catch — a libpqxx gera exceções em qualquer falha.



Consultas parametrizadas (segurança)

Nunca concatene strings para substituir valores — isso abre caminho para injeções de SQL. Use expressões preparadas:

pqxx::work txn(conn);// Preparaçãoconn.prepare("insert_user", "INSERT INTO users (name, email) VALUES ($1, $2)");

// Execução com parâmetrostxn.exec_prepared("insert_user", "João Silva", "joao@example.com");txn.commit();


2. MongoDB em C++: flexibilidade NoSQL

MongoDB armazena dados no formato BSON (JSON binário) e é ideal para tarefas onde o esquema de dados pode mudar. O driver oficial para C++ é o mongocxx (sobre o mongoc).



Instalação do driver mongocxx

A compilação a partir do código fonte é a maneira mais confiável. Breve instrução:

# Instale as dependências: libmongoc, libbson, cmakegit clone https://github.com/mongodb/mongo-cxx-driver.gitcd mongo-cxx-driver/buildcmake .. -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=ONmake -j4sudo make install

No CMakeLists.txt:

find_package(libmongocxx REQUIRED)target_link_libraries(your_project mongocxx::mongocxx)


Conexão e inserção de documento

#include <iostream>#include <bsoncxx/json.hpp>#include <mongocxx/client.hpp>#include <mongocxx/instance.hpp>#include <mongocxx/uri.hpp>

int main() { // Inicialização do driver (uma vez por aplicação) mongocxx::instance inst{};

// Con

Blogs

Book Recommendations