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.

[ Hits: 70.063 ]

Por: Poleto em 01/06/2006


Conectando com o servidor de banco de dados



Para conectar-se com o banco de dados, usamos o seguinte comando:

EXEC SQL CONNECT TO destino [AS nome_da_conexão] [USER nome_do_usuário];

Onde destino pode ser definido da seguinte forma:
  • nome do banco[@host][:porta]
  • tcp:postgresql://host[:porta][/nome_do_banco]
  • unix:postgresql://host[:porta][/nome_do_banco]
  • uma string contendo qualquer uma das formas mencionadas acima
  • uma variável do tipo char contendo qualquer uma das formas mencionadas acima
  • DEFAULT

E nome_do_usuário pode ser definido como:
  • username
  • username/senha
  • username IDENTIFIED BY senha
  • username USING senha

Para o nosso artigo, iremos passar os parâmetros através de variáveis, que é o penúltimo modo listado lá em cima. Vamos então, ao código fonte:

/* INCLUDE */
#include <stdio.h>

EXEC SQL include sqlca;

/* MAIN */
int main(int argc, char **argv)
{
   EXEC SQL BEGIN DECLARE SECTION;
      const char *nome_database = "[email protected]";
      const char *szUser = "teste";
   EXEC SQL END DECLARE SECTION;

   EXEC SQL CONNECT TO :szDBName USER :szUser;

        if(sqlca.sqlcode != 0) {
      printf("Conexão com %s falhou. ", nome_database);
      return 0;
   } else {
      printf("Connection ok com %s. ", nome_database);
   }

        EXEC SQL DISCONNECT ALL;

      return 0;
}

Os pontos que devem ser observados aqui são:

EXEC SQL BEGIN DECLARE SECTION;
   const char *nome_database = "[email protected]";
   const char *szUser = "teste";
EXEC SQL END DECLARE SECTION;

Este bloco serve para declarar variáveis que serão usadas para passar ou receber valores para o banco de dados. Elas precisam ser declaradas nesta seção em especial para que o pré-processador do PostgreSQL tenha conhecimento delas.

O comando:

EXEC SQL CONNECT TO :szDBName USER :szUser;

realiza a conexão com o banco de dados. Para indicar ao pré-processador que queremos usar variáveis, devemos usar o símbolo dois-pontos (:) seguido pelo nome da variável. Note que estas variáveis devem ter sido declaradas na seção DECLARE SECTION.

Outro ponto a ser observado é a verificação da variável sqlca.sqlcode. O pré-processador declara uma variável global chamada sqlca, que tem a seguinte estrutura:

struct {
   char sqlcaid[8];
   long sqlabc;
   long sqlcode;
   struct {
      int sqlerrml;
      char sqlerrmc[70];
   } sqlerrm;
   char sqlerrp[8];
   long sqlerrd[6];
   char sqlwarn[8];
   char sqlstate[5];
} sqlca;

Esta estrutura permite uma verificação de erros e warnings (aviso, traduzido literalmente) mais detalhada sobre os comandos executados. A variável sqlcode pode assumir os seguintes valores:
  • 0 se nenhum erro ocorreu durante a execução;
  • negativo, se um warning foi gerado;
  • positivo, se uma condição não-fatal ocorreu, como por exemplo uma query que não retorna valores.

Por fim, o comando:

EXEC SQL DISCONNECT ALL;

Finaliza todas as conexões abertas pelo programa.

O programa acima simplesmente abre uma conexão com o banco de dados especificado e exibe uma mensagem dizendo se a conexão foi efetuada com sucesso ou não. Como padrão eu costumo salvar os arquivos com SQL embutido com a extensão pgc, mas qualquer outra extensão pode ser usada.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. 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

Instalando o CMS Drupal 4.7

Acessando PostgreSQL com C - Cursores

Acessando PostgreSQL com C

Leitura recomendada

Acessando PostgreSQL com C - Cursores

Usando MySQL na linguagem C

Ensaio acerca de bibliotecas de código aberto para abstração de acesso a banco de dados em linguagem C++

Acessando PostgreSQL com C

Embutindo um banco de dados SQLite em sua aplicação C++

  
Comentários
[1] Comentário enviado por marcolinux em 07/06/2006 - 17:11h

Parece que foi DEUS que mandou vc postar este artigo!

Estou justamente sofrendo aqui usando a libpq !


Parabéns pelo material.

MARCOLINUX

[2] Comentário enviado por faustojacome em 10/03/2008 - 23:43h

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

[3] Comentário enviado por benwin em 28/10/2009 - 07:28h

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!


Contribuir com comentário