Trabalho com Bancos de Dados em C++: PostgreSQL e MongoDB

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 conectar bancos de dados ao C++



Aplicações modernas em C++ raramente dispensam o armazenamento persistente de dados. Seja um servidor de jogos, um sistema de telemetria ou um backend de alta carga — você precisará interagir com um SGBD. No mercado, dominam duas abordagens fundamentalmente diferentes: bancos de dados relacionais (SQL) e orientados a documentos (NoSQL).



Neste artigo, vamos abordar como trabalhar com PostgreSQL (através da biblioteca libpqxx) e MongoDB (através do driver oficial mongo-cxx-driver para C++). Você aprenderá como configurar a conexão, executar operações CRUD e tratar erros.



1. PostgreSQL e C++: abordagem relacional



PostgreSQL é um SGBD objeto-relacional poderoso, com excelente suporte a transações e consultas complexas. Para C++, recomenda-se o uso da biblioteca libpqxx — um wrapper moderno e type-safe sobre a libpq.



1.1 Instalação da libpqxx

A instalação depende do seu sistema operacional:

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


1.2 Conexão e execução de consultas

Vamos considerar um programa mínimo para conectar ao banco de dados, criar uma tabela e inserir dados:



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

int main() { try { // Conexão ao banco de dados 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; }

// Criação de transação pqxx::work txn(conn);

// Criação de tabela txn.exec("CREATE TABLE IF NOT EXISTS users (" "id SERIAL PRIMARY KEY," "name VARCHAR(100) NOT NULL," "email VARCHAR(255) UNIQUE NOT NULL" ");");

// Inserção de dados (com parametrização para segurança) txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Alice", "alice@example.com");

// Confirmação da transação 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 Leitura de dados

Para consultar dados, use iteradores sobre o resultado da 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 e C++: abordagem orientada a documentos



MongoDB armazena dados no formato BSON (JSON binário). Para C++, utiliza-se o driver oficial mongo-cxx-driver, construído sobre a biblioteca libmongoc.



2.1 Instalação do mongo-cxx-driver

  • Ubuntu: sudo apt install libmongoc-1.0-0 libbson-1.0-0 libmongocxx-dev
  • macOS: brew install mongo-cxx-driver
  • Compilação a partir do código fonte: Requer cmake, libmongoc e libbson.


2.2 Conexão e operações CRUD

Exemplo de conexão a uma instância local do MongoDB e inserção de um documento:



#include <iostream>#include <bsoncxx/b                

Blogs

Book Recommendations