Connexion a une bd sqlite

Soyez le premier à donner votre avis sur cette source.

Vue 15 140 fois - Téléchargée 1 748 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
Messages postés
70
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 mars 2007

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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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.