Marc Silanus

C/C++

Premier programme

Nous commencerons par le traditionnel « helloword » :

//   hellword.c
#include   <stdio.h>
int   main(void)
{
   printf("Hello World !\n   ");
   return 0;
 }

Pour compiler le programme, on utilise le compilateur gcc disponible dans système.

Syntaxe :
debarm:/root# gcc <fichier source> -o   <fichier de sortie>
Ici :
debarm:/root# gcc   helloword.c -o helloword

Exécutez le programme :

debarm:/root# ./helloword

Remarque : l’exécution se fait partir du dossier courant (./). Sil fichier à exécuter est hors du dossier courant, on saisit le chemin d’accès ( /root/helloword ).

Interfacer SQLITE et C

Les opérations sur les bases de données sont effectuées soit directement par l’utilisateur au moyen de la console sqlite3, soit au moyen d’un programme (en C, Python, script Shell, …).

Pour interfacer le gestionnaire de base de données SQLITE et le langage C, il faut inclure dans la libraire libsqlite3-dev qui donne accès aux structures, fonctions et constantes permettant les opérations sur les bases de données :

  • sqlite3_stmt : Structure qui permet de préparer l’accès au tables
  • sqlite3_open() : Ouvrir une base de données
  • sqlite3_exec() : Exécuter une requête  (première méthode)
  • sqlite3_prepare_v2() : Exécuter une requête  (deuxième méthode)
  • sqlite3_column_count() : Nombre de colonnes de la table
  • sqlite3_column_name() : Nom des colonnes de la table
  • sqlite3_column_text() : Valeurs d’un enregistrement
  • SQLITE_ROW : Constante indiquant la présence de donnée dans la ligne
  • SQLITE_DONE : Fin de la table

Consultez la documentation officielle de SQLITE : http://www.sqlite.org/cintro.html

Installez la librairie libsqlite3-dev :

debarm:~# apt-get install  libsqlite3-dev

Saisissez le programme suivant qui ajoute deux lignes à la table test créée précédemment. Compilez-le et exécutez-le.

#include<stdio.h>
#include<sqlite3.h>   // apt-get install libsqlite3-dev
#include<stdlib.h>
int   main(int argc, char** args)
{
//Créez   une variable de type int pour stocker le code de retour pour chaque appel
int   retval;
char   *query;
//   Préparer l'accès aux tables
sqlite3_stmt *stmt;
// Créer   un handle pour la connexion à base de données
sqlite3   *handle;
// Essai   de connexion à la base de données
retval =   sqlite3_open("basetest",&handle);//Si la connexion ne marche pas, handle retourne NULL
if(retval)
{
printf("Impossible de se connecter à la base de données\n");
return   -1;
}
printf("Connexion réussie\n");
query = "INSERT INTO test   VALUES('tyty','robert','Lycee Albert Camus','Paris')";
retval = sqlite3_exec(handle,query,0,0,0);
query = "INSERT INTO test   VALUES('gogo','marcel','Lycee Thiers','Marseille')";
retval = sqlite3_exec(handle,query,0,0,0);
// Lire le   contenu de la table
query = "SELECT * from test";
retval =   sqlite3_prepare_v2(handle,queries,-1,&stmt,0);
if(retval)
{
printf("Impossible de lire la table\n");
return   -1;
}
// Lire le   nombre de lignes récupérées
int cols = sqlite3_column_count(stmt);
// Ecriture de l'entête des colonnes
int col;
for(col=0 ; col<cols;col++) printf("%s \t\t |   ",sqlite3_column_name(stmt,col));
printf("\n");
//Ecriture   des données
while(1)
{
//   récupérer le status de la ligne (contient de données ou fin de table)
retval = sqlite3_step(stmt);
if(retval == SQLITE_ROW)
{
//   La ligne contient des données
int   col;
for(col=0 ; col<cols;col++)
{
// sqlite3_column_text retourne un const   void* => cast en const char*
const char *val =   (const char*)sqlite3_column_text(stmt,col);
printf("%s \t\t | ",val);
}
printf("\n");
}
else if(retval == SQLITE_DONE)
{
//   Plus de données
printf("Fin de la table\n");
break;
}
else
{
//   Erreur
printf("Erreur lors de l'accès aux données\n");
return -1;
}
}
//   Fermeture du handle pour libérer la mémoire
sqlite3_close(handle);
return 0;
}

Pour le compiler, il faut préciser au compilateur gcc d’utiliser la librairie libsqlite3-dev :

debarm:~# gcc   testsqlite.c –o  testsqlite -l  sqlite3
debarm:~# ./testsqlite

Page originale du constructeur : http://www.acmesystems.it/foxg20/doku.php?id=tutorial:c