cooler_ 0 Denunciar post Postado Fevereiro 16, 2010 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… 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… 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_ ? 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… 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… 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