PostgreSQL - Embutindo comandos SQL no seu código C
Existe uma alternativa ao uso de bibliotecas para acesso ao PostgreSQL, que é a inclusão de comandos SQL dentro do próprio código em C. Veremos neste artigo como fazer esta integração.
Introdução
O método conhecido como Embedded SQL (ou SQL embutido) é definido pelo ANSI (American National Standards Institute) e define um conjunto de padrões para que código SQL possa ser usado a partir de programas feitos em outras linguagens de programação, que no nosso caso será o C.
A implementação do PostgreSQL para este conceito é chamado de ECPG. Todo o código SQL contido no programa em C é pré-processado antes por um pré-processador do PostgreSQL, que irá fazer a tradução para código C comum, para então ser compilado por um compilador C.
Este método tem algumas vantagens com relação a outros métodos, comparando aqui com a libpq, entre elas:
E claro, nem tudo é vantagem. Entre as desvantagens deste método podemos citar:
Claro, nada é perfeito, e em todas as situações deve ser analisado qual a melhor solução a ser usada.
A implementação do PostgreSQL para este conceito é chamado de ECPG. Todo o código SQL contido no programa em C é pré-processado antes por um pré-processador do PostgreSQL, que irá fazer a tradução para código C comum, para então ser compilado por um compilador C.
Este método tem algumas vantagens com relação a outros métodos, comparando aqui com a libpq, entre elas:
- O gerenciamento de variáveis que irão receber valores retornados por queries é muito mais fácil do que na libpq.
- Toda sintaxe do SQL é verificada, o que permite que erros desse tipo sejam corrigidos antes de o programa ser de fato compilado.
- O embedded SQL é definido pelo padrão ANSI, e como o PostgreSQL segue o mais próximo o possível estes padrões, é muito mais fácil portar estes programas para outros bancos de dados.
E claro, nem tudo é vantagem. Entre as desvantagens deste método podemos citar:
- A depuração do programa pode ser mais complicada, pois o arquivo é pré-processado antes de o compilador C entrar em ação, ou seja, erros do compilador podem ser mais difíceis de encontrar.
- Deve-se saber antecipadamente a estrutura das tabelas quando for usar comandos SELECT.
Claro, nada é perfeito, e em todas as situações deve ser analisado qual a melhor solução a ser usada.
Páginas do artigo
1. Introdução2. Criando o ambiente de testes
3. Iniciando com o ECPG
4. Conectando com o servidor de banco de dados
5. Compilando os programas
6. Inserindo, atualizando e apagando dados de tabelas
7. Retornando dados de tabelas
8. Considerações Finais
Outros artigos deste autor
Leitura recomendada
Acessando PostgreSQL com C - Cursores
Comentários
Apos quebrar muito a cabeca para funcionar no Debian com o PostgreSQL e o ecpg via apt-get aqui vai a forma que consegui compilar.
gcc -g -I/usr/include/postgresql/ -o saida postgreSQL.c -L/usr/lib/postgresql/8.3/lib/ -lecpg -lpq
gcc -g -I/usr/include/postgresql/ -o saida postgreSQL.c -L/usr/lib/postgresql/8.3/lib/ -lecpg -lpq
Porque eu não posso usar variáveis no campo FROM?
EXEC SQL SELECT usuario, senha INTO :varusuario, :varsenha FROM :tabelabd WHERE usuario = :meunumerodb;
Existe alguma forma de burlar isso?
Abraço!
EXEC SQL SELECT usuario, senha INTO :varusuario, :varsenha FROM :tabelabd WHERE usuario = :meunumerodb;
Existe alguma forma de burlar isso?
Abraço!
Estou justamente sofrendo aqui usando a libpq !
Parabéns pelo material.
MARCOLINUX