Maison > Article > développement back-end > SQL utilisant C/C++ et SQLite
Dans cette section, vous apprendrez à utiliser SQLite dans les programmes C/C++.
Avant de commencer à utiliser SQLite dans votre programme C/C++, vous devez vous assurer que la bibliothèque SQLite est configurée sur votre ordinateur. Vous pouvez consulter le chapitre sur l'installation de SQLite pour comprendre le processus d'installation.
Voici les routines d'interface C/C++ SQLite importantes qui peuvent répondre à vos exigences en matière d'utilisation de bases de données SQLite à partir de vos programmes C/C++. Si vous recherchez une application plus complexe, vous pouvez consulter la documentation officielle de SQLite.
Numéro de série | API et description |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb)Cette routine ouvre une connexion à un fichier de base de données SQLite et renvoie un objet de connexion à la base de données à utiliser par d'autres routines SQLite. Si le paramètre filename est NULL ou ':memory:', sqlite3_open() créera une base de données en mémoire dans la RAM qui ne durera que pendant la durée de la session. Si le nom de fichier n'est pas NULL, sqlite3_open() tente d'ouvrir le fichier de base de données en utilisant sa valeur. Si un fichier portant ce nom n'existe pas, sqlite3_open() ouvrira un nouveau fichier de base de données portant ce nom. |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)Cette routine fournit un moyen rapide et facile d'exécuter une commande SQL fournie par le paramètre sql, qui peut contenir plusieurs commandes SQL. Ici, le premier paramètre sqlite3 est un objet de base de données ouvert, sqlite_callback est un rappel où data est le premier paramètre, et errmsg sera renvoyé pour détecter toutes les erreurs générées par la routine. La routine SQLite3_exec() analyse et exécute chaque commande donnée dans l'argument sql jusqu'à ce que la fin de la chaîne soit atteinte ou qu'une erreur soit rencontrée. |
3 | sqlite3_close(sqlite3*)Cette routine ferme une connexion à la base de données qui a été précédemment ouverte en appelant sqlite3_open(). Toutes les instructions préparées liées à la connexion doivent être complétées avant de fermer la connexion. S'il y a encore des requêtes qui ne sont pas terminées, sqlite3_close() renverra SQLITE_BUSY et affichera le message d'erreur Impossible de fermer en raison d'instructions inachevées. |
L'extrait de code C suivant montre comment se connecter à une base de données existante. Si la base de données n'existe pas, créez la base de données et renvoyez enfin l'objet de base de données.
#include <stdio.h> #include <sqlite3.h> int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } sqlite3_close(db); }
$gcc test.c -l sqlite3 $./a.out Opened database successfully
L'extrait de code C suivant sera utilisé pour créer une table dans la base de données précédemment créée -
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> 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; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stdout, "Opened database successfully\n"); } /* Create SQL statement */ sql = "CREATE TABLE COMPANY(" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "AGE INT NOT NULL," \ "ADDRESS CHAR(50)," \ "SALARY REAL );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Table created successfully\n"); } sqlite3_close(db); return 0; }
-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out -rw-r--r--. 1 root root 1207 May 8 02:31 test.c -rw-r--r--. 1 root root 3072 May 8 02:31 test.db
L'extrait de code C suivant montre comment créer un enregistrement dans la table COMPANY créée dans l'exemple ci-dessus –
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> 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; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \ "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \ "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \ "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Records created successfully\n"); } sqlite3_close(db); return 0; }
Opened database successfully Records created successfully
Avant de passer à un exemple pratique d'obtention un enregistrement, jetons un coup d'œil Quelques détails sur les fonctions de rappel utilisées dans les exemples. Ce rappel fournit un moyen d'obtenir les résultats d'une instruction SELECT. Il contient l'instruction suivante :
typedef int (*sqlite3_callback)( void*, /* Data provided in the 4th argument of sqlite3_exec() */ int, /* The number of columns in row */ char**, /* An array of strings representing fields in the row */ char** /* An array of strings representing column names */ );
Si le rappel ci-dessus est fourni comme troisième paramètre dans la routine sqlite_exec(), SQLite appellera cette fonction de rappel pour chaque enregistrement traité dans chaque instruction SELECT exécutée dans le paramètre SQL.
L'extrait de code C suivant montre comment obtenir et afficher les enregistrements de la table COMPANY créée dans l'exemple ci-dessus –
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName) { int i; fprintf(stderr, "%s: ", (const char*)data); for(i = 0; i<argc; i++) { printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char* argv[]) { sqlite3 *db; char *zErrMsg = 0; int rc; char *sql; const char* data = "Callback function called"; /* Open database */ rc = sqlite3_open("test.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); return(0); } else { fprintf(stderr, "Opened database successfully\n"); } /* Create SQL statement */ sql = "SELECT * from COMPANY"; /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } else { fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); return 0; }
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 Callback function called: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!