Trabalho com bancos de dados em C++: PostgreSQL e MongoDB para iniciantes

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 banco de dados?

C++ é uma das linguagens de programação mais poderosas, usada para criar sistemas de alta carga, jogos, aplicações financeiras e software embarcado. No entanto, qualquer aplicação séria requer armazenamento de dados. É aqui que entram os sistemas de gerenciamento de banco de dados (SGBD).

Neste artigo, vamos analisar como conectar e executar operações básicas com dois SGBDs populares — o relacional PostgreSQL e o orientado a documentos MongoDB — usando C++. O material é voltado para desenvolvedores iniciantes que já conhecem os fundamentos de C++, mas ainda não trabalharam com bancos de dados. Você aprenderá como instalar as bibliotecas necessárias, escrever consultas CRUD simples e evitar erros típicos.



1. Preparação do ambiente e escolha das bibliotecas

Antes de escrever código, é necessário instalar as bibliotecas cliente para trabalhar com bancos de dados. Para C++, existem várias opções, mas vamos considerar as mais populares e estáveis:

  • Para PostgreSQL — libpqxx (wrapper oficial em C++ sobre libpq).
  • Para MongoDB — mongocxx (driver oficial em C++ da MongoDB).


Instalação do libpqxx (Ubuntu/Debian)

sudo apt-get updatesudo apt-get install libpqxx-dev

Para Windows ou macOS, use gerenciadores de pacotes vcpkg ou Homebrew.



Instalação do mongocxx

Primeiro, instale o driver base mongo-c-driver, depois o driver C++:

# Ubuntusudo apt-get install libmongoc-dev libbson-devsudo apt-get install libmongocxx-dev

Após a instalação, certifique-se de que o compilador encontra os arquivos de cabeçalho. Ao compilar, não se esqueça de especificar as flags de linkagem:

g++ -std=c++17 main.cpp -lpqxx -lpq -lmongocxx -lbson


2. Trabalhando com PostgreSQL em C++

PostgreSQL é um poderoso SGBD objeto-relacional. Usaremos a biblioteca libpqxx, que fornece uma interface C++ conveniente.



Conexão ao servidor e criação de tabela

Primeiro, vamos escrever um programa simples que se conecta a um banco de dados local e cria uma tabela de usuários:

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

int main() { try { // Conecta ao banco de dados "testdb" como usuário "postgres" pqxx::connection conn("host=localhost dbname=testdb user=postgres password=secret"); if (conn.is_open()) { std::cout << "Conexão ao PostgreSQL bem-sucedida!" << std::endl; }

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

// Consulta SQL para criar tabela txn.exec("CREATE TABLE IF NOT EXISTS users (" "id SERIAL PRIMARY KEY," "name VARCHAR(100) NOT NULL," "email VARCHAR(100) UNIQUE NOT NULL);");

txn.commit(); // Confirma as alterações std::cout << "Tabela users criada." << std::endl;

} catch (const std::exception &e) { std::cerr << "Erro: " << e.what() << std::endl; } return 0;}


Operações CRUD: inserção e leitura de dados

Vamos adicionar alguns registros e realizar uma consulta:

pqxx::work txn(conn);

// Inserção de dadostxn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Ivan Petrov", "ivan@example.com");txn.exec_params("INSERT INTO users (name, email) VALUES ($1, $2);", "Maria Smirnova", "maria@example.com");txn.commit();

// Leitura de dadospqxx::nontransaction ntxn(conn);pqxx::result result = ntxn.exec("SELECT id, name, email FROM users;");

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

Blogs

Book Recommendations