Connexion a une bd sqlite

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

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.