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: 68.097 ]

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 = "teste@localhost";
      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 = "teste@localhost";
   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

Acessando PostgreSQL com C

Acessando PostgreSQL com C - Cursores

Instalando o CMS Drupal 4.7

Leitura recomendada

Usando MySQL na linguagem C

Acessando PostgreSQL com C - Cursores

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts