Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cooler_

[Resolvido] [Tutorial] Usando SQLite com Linguagem C e C++

Recommended Posts

vamos trabalhar com

Banco de dados em “linguagem C” usando o SQLite vamos dar uma revisada

neste banco como não vejo muitos artigos brasileiros falando do mesmo.

aqueles que não gostam de estudar algoritmos com linguagem C, vão adorar

pois usando SQL podemos dar simples comandos para dar SORT e fazer buscas

de forma rápida sem pensar muito e atingir nosso objetivo fora que fica muito

mais organizado os dados usando SQLite…

Imagem Postada

O que é SQLite ?

 

SQLite é uma biblioteca C que implementa um banco de dados SQL embutido ou seja

SQLite é o servidor. A biblioteca SQLite lê e escreve diretamente para o arquivo

do banco de dados no disco.

 

Por que vamos usar SQLite?

 

SQLite foi escolhido para este artigo por não necessitar de

configurações complicadas e por sua instalação ser rapida e limpa…

Suporta bases de dados acima de 2 terabytes,O Banco de Dados é guardado em um único arquivo

e Sem dependências externas e outros motivos,É facil exportar dados,por ser rapido…

 

Como instalar ?

 

caso use windows ou queira instalar direto do tarball http://www.sqlite.org

linux debianos em geral “apt-get install sqlite3 libsqlite3-dev(biblioteca do C) sqlite3-doc(caso queira ler as doc)”

Slackers installpkg sqlite3_bla_bla.tgz,chapeis vermelhos e azuis “yum install sqlite”,Daemons,puffers

procure nos ports. caso use windows instale o cygwin e por ele o GCC…

 

Quem usa SQLite ?

Firefox,adobe,symbianOS,amarok entre outros…

 

Algumas características do SQLite:

 

. Software livre/domínio público e Multiplataforma;

. Mecanismo de armazenamento seguro com transações ACID;

. Não necessita de instalação, configuração ou administração;

. Implementa a maioria do SQL92;

. O Banco de Dados é guardado em um único arquivo;

. Suporta bases de dados acima de 2 terabytes;

. Sem dependências externas.

 

antes de continuar treine comandos SQL no SQLite crie tabelas etc…

 

Imagem Postada

vamos iniciar com o Rock and Roll

 

Por que vamos usar SQLite com linguagem C ?

 

para fácilitar nossa vida para guardar dados de forma inteligente poder executar comandos SQL usando regex

entre outras milhares de utilidades,tendo tudo em mãos vamos ao primeiro exemplo de uso,antes de me perguntar

 

o que é isso tio Cooler_ ?

Imagem Postada

 

te falo

“Menino ta tudo comentado o código linha por linha então só ler e aprender”

 

// exemplo bu Antonio(Cooler)
// http://botecoUnix.com.br
#include <stdio.h>
// lib do SQLite
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
 
int main(int argc, char** args) {
 char *sql,nome[MAX],*end;
 int retval,i;
 int q_cnt = 5,q_size = 150,ind = 0;
  char **queries = malloc(sizeof(char) * q_cnt * q_size);
// definindo ponteiros
 sqlite3_stmt *stmt;
 sqlite3 *handle;
// abrindo seu banco, antes de rodar o programa crie um banco com SQLite
 retval = sqlite3_open("agenda.sqlite3",&handle);
// caso de erro na conexão vai mostrar msg
 if(retval) { printf("Erro no banco\n"); return -1; }
// caso nao tenha dado erro continua
 printf("Deu certo\n");
// pega entrada do usuário
printf("digite um nome para adicionar no banco\n");
 getchar();
 fgets(nome, MAX, stdin);
 i = strlen(nome)-1;
  if(nome[i] == '\n') {
      nome[i] = '\0';
  }
 
// vai adicionar no banco na tabela agenda no campo nome o nome digitado pelo usuario
 sql = (char *)malloc( sizeof(char) * q_size );
 strcpy(sql, "INSERT INTO agenda VALUES('" );
 strcat(sql,nome);
// vai aidionar no banco o numero de tell 43432222
 strcat(sql,"', '43432222')");
// em suma he uma query soh INSERT INTO agenda Values('STDIN(entrada do user)', 'numero_definido')
 
// executa nosso comando no banco 
 retval = sqlite3_exec(handle,sql,0,0,0);
// fecha a conexão
 sqlite3_close(handle);
 return 0;
}

para compilar isso ai de o comando

gcc seuprograma.c -o seuprograma -l sqlite3 -std=c99; ./seuprograma

se deu certo no seu banco chamado “agenda.sqlite3″ na tabela agenda vai ter um campo

com nome que vocẽ adicionou pelo nosso programa…

 

*-l usamos esta paradigma para definir a lib a ser usada em conjunto com nosso programa

*-std definimos o padrão C99 ou seja o padrão da linguagem C de 1999 um C ala K&R só que melhorado ou seja C++ segundo meu amigo IAK

 

este exemplo foi simples somente para adicionar um campo chamado nome em uma tabela chamada agenda

em que tenha (nome,tell),agora como seria para dar um SELECT ou seja mostrar o conteudo da tabela ? próximo

exemplo mostra uma solução

 

// Antonio (Cooler)
// http://botecoUnix.com.br
#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>
 
int main(int argc, char** args) {
//definindo vars e mem
 int retval;
 int q_cnt = 5,q_size = 150,ind = 0;
 char **queries = malloc(sizeof(char) * q_cnt * q_size);
// preparando 
 sqlite3_stmt *stmt;
 
// criando o ponteiro para conectar
 sqlite3 *handle;
 
// definindo nome do banco para conectar
 retval = sqlite3_open("agenda.sqlite3",&handle);
// condição caso de erro
 if(retval) { printf("erro na conexao com banco agenda.sqlite3\n"); return -1; }
 printf("Coexao com banco ok\n");
// definimos a query SQL para uma busca simples enquanto tiver resultado ira nos mostrar as saidas
    queries[ind++] = "SELECT * from agenda";
    retval = sqlite3_prepare_v2(handle,queries[ind-1],-1,&stmt,0);
// caso de erro
    if(retval)
    {
    printf("db selecionado com erro\n");
    return -1;
    }
 
    // le numero de colunas
    int cols = sqlite3_column_count(stmt);
   while(1)
    {
    // retorna os statos
    retval = sqlite3_step(stmt);
 
    if(retval == SQLITE_ROW)
    {
 
    // nos retornando os resultados
    for(int col=0 ; col<cols;col++)
    {
    const char *val = (const char*)sqlite3_column_text(stmt,col);
// definimos como vai ser a saida das colunas
    printf("%s = %s\t",sqlite3_column_name(stmt,col),val);
    }
    printf("\n");
    }
    else if(retval == SQLITE_DONE)
    {
    // termina
    printf("pronto\n");
    break;
    }
    else
    {
    // caso ocorra algum erro
    printf("algum erro\n");
    return -1;
    }
    }
// fecha conexão
 sqlite3_close(handle);
 return 0;
}

mesmo meta de compilar do anterior porem ele vai mostrar os dados da tabela sendo dois nome e telefone…

Imagem Postada

 

se até agora você não conseguiu compilar os programas aqui propostos é por que tem algum Bug, procure o erro

veja se você tem realmente a lib SQLite3 em “/usr/include” , caso tenha veja se tem algum erro de sintaxe…

Aqui usando um Debian lenny +GCC rodou tudo perfeitamente então baseado nisso de escolha

um “OS” decente para trabalhar…

 

agora só para finalizar nosso estudos com SQlite e linguagem C vamos fazer um programa que crie uma tabela

no seu banco com SQlite :)

 

#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>
 
int main(int argc, char** args) {
 int retval;
 int q_cnt = 5,q_size = 150,ind = 0;
 char **queries = malloc(sizeof(char) * q_cnt * q_size);
// preparando estados com ponteiro
 sqlite3_stmt *stmt;
 
// criando ponteiro leitor do banco
 sqlite3 *handle;
 
// definimos local do banco sqlite
 retval = sqlite3_open("agenda.sqlite3",&handle);
// condição caso de certo 
 if(retval) { printf("erro no banco\n"); return -1; }
 printf("OK\n");
// nossa query para executar no banco
 char create_table[100] = "CREATE TABLE users (nome varchar(30), senha varchar(12))";
// Executando a qury no banco
 retval = sqlite3_exec(handle,create_table,0,0,0);
// fechando conexão
 sqlite3_close(handle);
 return 0;
}

agora ta feliz neh

baby

bom pessoal espero ter ajudado ai programadores em C em geral ou iniciantes no mesmo a usar SQlite com C

bem, não estou postando com a mesma meta de sempre por que ando com uns problemas de saúde mas assim que eu

melhorar volto com tudo…

 

Imagem Postada

 

agora sim em Aprendeu a Usar um Banco de dados relacional em C em ta feliz HUAhAHuH :)

 

mas isso foi padrão c99, em C mesmo eu fiz um agenda usando strcat quem quiser ver

esta no BugSec gruo que faço parte baixe aqui --> http://bugsec.googlecode.com/files/agenda.c

 

Dúvidas pessoal ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.