PostgresSQL

Como conectar uma aplicação C++ a uma base de dados PostgreSQL usando Visual Studio e a biblioteca libpqxx (a interface C++ oficial para PostgreSQL).

1. Pré-requisitos

  • PostgreSQL instalado no Windows.
  • Visual Studio (2017, 2019 ou 2022).
  • libpqxx (biblioteca C++ para PostgreSQL) e dependências do libpq.
  • Variáveis de ambiente e caminhos devidamente configurados.

2. Instalação da libpqxx e dependências

Passo 1: Descarregue e instale o PostgreSQL

  • Instale o PostgreSQL pelo instalador oficial para Windows.
  • Anote o diretório de instalação (ex: C:\Program Files\PostgreSQL\16).

Passo 2: Descarregue a libpqxx

  • Baixe o código-fonte da libpqxx ou procure por binários prontos.
  • Se necessário, compile a libpqxx para Windows usando CMake e Visual Studio, seguindo as instruções do repositório.

Passo 3: Copie arquivos necessários

  • Inclua os diretórios de cabeçalhos da libpqxx e do PostgreSQL\include.
  • Inclua os diretórios de bibliotecas do libpqxx e do PostgreSQL\lib.
  • Certifique-se de que as DLLs (libpq.dll, libpqxx.dll se houver) estejam na pasta do executável ou em um diretório do PATH.

3. Configuração do Projeto no Visual Studio

  1. Crie um novo projeto C++ vazio.
  2. No menu do projeto, em Propriedades:
    • C/C++ > Geral > Diretórios de Inclusão Adicionais:
      Adicione os caminhos para os headers do PostgreSQL e da libpqxx.
    • Linker > Geral > Diretórios de Biblioteca Adicionais:
      Adicione os caminhos para os arquivos .lib do PostgreSQL e da libpqxx.
    • Linker > Entrada > Dependências Adicionais:
      Adicione libpqxx.lib e libpq.lib.

4. Exemplo Básico de Código para Conexão

#include <iostream>
#include <pqxx/pqxx> // Inclua o cabeçalho principal da libpqxx

int main() {
try {
// Substitua os parâmetros de conexão conforme seu ambiente
pqxx::connection c("user=utiizador password=senha host=localhost port=5432 dbname=nome_base_dados");
if (c.is_open()) {
std::cout << "Conexão estabelecida com sucesso!" << std::endl;
} else {
std::cout << "Falha ao conectar." << std::endl;
return 1;
}

// Inicia uma transação
pqxx::work w(c);

// Cria uma tabela (se desejar)
w.exec("CREATE TABLE IF NOT EXISTS exemplo (id SERIAL PRIMARY KEY, nome VARCHAR(50));");

// Insere um registro
w.exec("INSERT INTO exemplo (nome) VALUES ('Teste');");

// Consulta registros
pqxx::result r = w.exec("SELECT id, nome FROM exemplo;");
for (const auto& row : r) {
std::cout << "id: " << row[0].as<int>() << ", nome: " << row[1].as<std::string>() << std::endl;
}

// Confirma as alterações
w.commit();

c.disconnect();
} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
return 1;
}
return 0;
}
  • Substitua os dados de conexão (user, password, host, dbname) pelos seus.
  • O método w.commit() é essencial para gravar alterações na base de dados.

5. Compilação e Execução

  • Compile o projeto normalmente pelo Visual Studio.
  • Certifique-se de que as DLLs (libpq.dll e dependências) estejam acessíveis pelo executável.

6. Observações e Dicas

  • Se receber erros de linkagem, confira se os caminhos das bibliotecas e headers estão corretos.
  • A libpqxx facilita operações modernas em C++ e é recomendada para novos projetos.
  • Para mais exemplos, consulte a documentação oficial da libpqxx.