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