Maison > développement back-end > C++ > le corps du texte

SQL utilisant C/C++ et SQLite

WBOY
Libérer: 2023-09-19 19:49:02
avant
756 Les gens l'ont consulté

SQL utilisant C/C++ et SQLite

Dans cette section, vous apprendrez à utiliser SQLite dans les programmes C/C++.

Installation

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.

API d'interface C/C++

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)
Copier après la connexion
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)
Copier après la connexion
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< /em> 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*)
Copier après la connexion
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.

Connexion à une base de donné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.

Exemple de code

#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&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}
Copier après la connexion

Sortie

$gcc test.c -l sqlite3
$./a.out
Opened database successfully
Copier après la connexion

Créer une table

L'extrait de code C suivant sera utilisé pour créer une table dans la base de données précédemment créée -

Exemple de code

#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&#39;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;
}
Copier après la connexion

Sortie (vérifier l'état du fichier de base de données) :

-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
Copier après la connexion

Opération d'insertion

L'extrait de code C suivant montre comment créer un enregistrement dans la table COMPANY créée dans l'exemple ci-dessus –

Exemple de code

#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&#39;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, &#39;Paul&#39;, 32, &#39;California&#39;, 20000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
      "VALUES (2, &#39;Allen&#39;, 25, &#39;Texas&#39;, 15000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (3, &#39;Teddy&#39;, 23, &#39;Norway&#39;, 20000.00 );" \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (4, &#39;Mark&#39;, 25, &#39;Rich-Mond &#39;, 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;
}
Copier après la connexion

Sortie

Opened database successfully
Records created successfully
Copier après la connexion

Opération SELECT

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 */
);
Copier après la connexion

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 –

Sample Code

#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&#39;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;
}
Copier après la connexion

Output

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
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal