iMasters Fóruns: [Resolvido] [Tutorial] Usando SQLite com Linguagem C e C++ - iMasters Fóruns

Ir para o conteúdo

Curso de HTML5 - Teoria e Prática na digitalks

O curso tem como objetivo dar ao aluno uma visão geral de HTML 5, CSS 3 e JavaScript abordando os principais conceitos para a construção de websites e "webapps". Ao final do curso o aluno estará habilitado a construir sites dinâmicos e responsivos, e "webapps" para smartphones através do uso de tecnologias HTML5, CSS3 e JavaScript.

Faça sua inscrição agora. Membros da comunidade iMasters ganham um super desconto!


Bom uso da área


Atenção:
Este sub-fórum é destinado apenas para postagem de códigos fontes para auxiliar os demais membros.
Não é permitido a abertura de tópicos com dúvidas. Para isso, use o Fórum de C/C++.
Página 1 de 1
  • Novo tópico
  • Fechado

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

  • Grupo: Membros
  • Posts: 16
  • Cadastrado: 16 Fev 2010 - 16:39
  • Sexo:Masculino
  • Localização:Guaratinguetá SP
  • Interesses:programação,segurança de sistemas em Linux e *Unix
    Bancos de dados

#1 Postou 16 fevereiro 2010 - 18:30

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.google.../files/agenda.c

Dúvidas pessoal ?


Compartilhar este tópico:


Página 1 de 1
  • Novo tópico
  • Fechado

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)