Connexion a une bd sqlite

Soyez le premier à donner votre avis sur cette source.

Vue 15 763 fois - Téléchargée 1 821 fois

Description

Ce code permet de connecter a une base de donne SQLite (une bd light rapide et tres securise ) et permet la creation de la bd "freak.db" s'il n'existe pas et ajoute une table et quelque information.
S'il le db est trouver dans le repertoire il retirer les donnes de la table MEMBERS et les afficher grace a une fonction recursif dans ce cas s'est la fonction :
static int callback(void *NotUsed, int argc, char **argv, char **azColName) ;

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sqlite3.h>
#include "sqldb.h"

#define DBNAME      "./freak.db"

/* Creation de la table */
#define  SQLTABLE         "CREATE TABLE MEMBERS \
(ID INTEGER NOT NULL PRIMARY KEY ,NAME char(20) NOT NULL, \
PASSWORD varchar(32) NOT NULL, ACTIVE BOOLEAN, IP LONG ) ;"

#define  SQLINSERT        "INSERT INTO MEMBERS VALUES(%d,'%s','%s',%d,%d) ;"
#define  SQLRETR          "SELECT * FROM MEMBERS WHERE ID = %d ;"

int main(int argc, char *argv[])
{
  sqlite3     *db;
  int        res;
  char       *err=0;

  puts("Creating/Openning DB..");
         
  if(exists_file(DBNAME)==false) {
        res=sqlite3_open(DBNAME,&db); //creer la base de donner
  if(res){
           fprintf(stderr,"cannot create db:\n%s\n",sqlite3_errmsg(db));
           sqlite3_close(db);
           exit(EXIT_FAILURE); //error
           }                             

create_first_table(db,err); // creation de la table MEMBERS dans la bd dreak.db

}
else {
     /**
     ouvrir le bd en mode lecture 

  • /
res=sqlite3_open(DBNAME,&db); if(res){ fprintf(stderr,"cannot open db:\n%s\n",sqlite3_errmsg(db)); sqlite3_close(db); exit(EXIT_FAILURE); //error } puts("insertion"); insert_data(db,err,16,"alex","MD5(\"hello\")",1,1681651412); /* insertion des donnes insert_data(db,err,18,"james","hello",0,127001); puts("Selection des donnes"); retr_data(db,err,18); // selection des donnes } sqlite3_close(db); system("PAUSE"); return 0; } /******************************************************************************/ bool create_first_table(sqlite3 *db,char *err) { int res=sqlite3_exec(db,SQLTABLE,callback,0,&err); if(res!=SQLITE_OK) { fprintf(stderr,"Table creatiorn error:\n%s\n",err); sqlite3_free(err); return false; }else { puts("TABLE CREATED..."); sqlite3_free(err); } return true; } /******************************************************************************/ bool insert_data(sqlite3 *db,char *err,int id,char *name,char *pass,int tf,long ip) { int res; const siz=200*sizeof(char)+1; char *sql=(char *)malloc(siz); if(sql==NULL) return false; snprintf(sql,siz,SQLINSERT,id,name,pass,tf,ip); res=sqlite3_exec(db,sql,NULL,0,&err); //INSERT NO CALLBACK NEEDED if(res!=SQLITE_OK) { fprintf(stderr,"insertion error:\n%s\n",err); sqlite3_free(err); free(sql); return false; }else { puts("DATA INSERTED..."); sqlite3_free(err); } free(sql); return true; } /******************************************************************************/ void retr_data(sqlite3 *db,char *err,int id) { int res; const siz=200*sizeof(char)+1; char *sql=(char *)malloc(siz); if(sql==NULL) return ; snprintf(sql,siz,SQLRETR,id); res=sqlite3_exec(db,sql,callback,0,&err); if(res!=SQLITE_OK) { fprintf(stderr,"query error:\n%s\n",err); sqlite3_free(err); }else { puts("DATA RETR..."); sqlite3_free(err); } free(sql); } /******************************************************************************/ /* Fonction recursif pour retirer les donnes */ static int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } /******************************************************************************/ /* Verification de l'existance d'un fichier dans le disque */ bool exists_file( char *filen ) { struct stat fst; if ( stat( filen, &fst) == -1 ) return false; /* file doesnt exist! */ return true; }

Conclusion :


Marche impec sous linux windows bsd ... si vous disposer de la bibliotheque sqlite3 que vous pouvez obtenir sur www.sqlite.org

Codes Sources

A voir également

Ajouter un commentaire Commentaires
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
20 mars 2007 à 16:26
la fonction de callback est appelée par la fonction sqlite_exec pour chaque ligne du résultat pour le traiter/stocker/mettre en forme/... selon les besoins du développeur :)

belle introduction à sqlite, dommage qu'il n'y ait pas plus de commentaires
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 20
2 mars 2007 à 21:51
Ta fonction callback() me semble être une fonction de rappel (d'où son nom 'callback'), je ne vois par contre pas trace ici de la moindre récursivité (ce qui est fort heureux d'ailleurs).

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.