SQLite - C / C ++
installer
Dans le programme C / C ++ avant d'utiliser SQLite, nous devons nous assurer qu'il ya la bibliothèque SQLite sur la machine. Vous pouvez consulter la section d'installation SQLite pour le processus d'installation.
C / C ++ interface API
Ce qui suit sont les importants programmes d'interface ++ / SQLite C & C pour répondre à vos besoins en utilisant la base de données SQLite en C / C ++. Si vous avez besoin de plus de détails, s'il vous plaît voir la documentation officielle de SQLite.
序号 | API & 描述 |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb) 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。 如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。 sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。 |
3 | sqlite3_close(sqlite3*) 该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。 如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。 |
Connectez-vous à la base de données
Le code C extrait suivant montre comment se connecter à une base de données existante. Si la base de données n'existe pas, il est créé, et enfin retourne un 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, "Impossible d'ouvrir la base de données:% s \ n", sqlite3_errmsg (db)); exit (0); } Else { fprintf (stderr, "base de données ouverte \ succès n"); } sqlite3_close (db); }
Maintenant, nous allons compiler et exécuter le programme ci - dessus, créez notretest.db de base de données dans le répertoire courant.Vous pouvez modifier le chemin si nécessaire.
$ Gcc test.c -l sqlite3 $. / A.out base de données ouvert avec succès
Si vous souhaitez utiliser le C ++ code source peut être compilé en conformité avec le code suivant montre:
$ G ++ test.c -l sqlite3
Ici, la bibliothèque de nos liens de programme pour le programme C pour fournir les fonctions nécessaires. Cela va créer un test.db de fichier de base de données dans votre répertoire, vous obtiendrez les résultats suivants:
-rwxr-xr-x. racine 1 racine 7383 8 mai 02h06 a.out -rw-r - r-- 1 root root 323 8 mai 02h05 test.c. -rw-r - r-- 1 root root 0 8 mai 02h06 test.db.
Créer une table
Le code C extrait suivant sera utilisé pour créer une table dans la base de données créée précédemment:
#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 & lt; argc; i ++) { printf ( "=% s \ n% s", 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; / * Ouvrir la base de données * / rc = sqlite3_open ( "test.db", & db); if (rc) { fprintf (stderr, "Impossible d'ouvrir la base de données:% s \ n", sqlite3_errmsg (db)); exit (0); } Else { fprintf (stdout, "base de données ouverte \ succès n"); } / * Création d'instruction SQL * / sql = "CREATE TABLE COMPANY (" \ "ID INT PRIMARY KEY NOT NULL," \ "NAME TEXT NOT NULL," \ "INT NOT NULL AGE," \ "CHAR ADRESSE (50)," \ "REAL SALAIRE);"; / * Exécute instruction SQL * / rc = sqlite3_exec (db, sql, rappel, 0, & zErrMsg); if (rc! = SQLITE_OK) { fprintf (stderr, "Erreur de SQL:% s \ n", zErrMsg); sqlite3_free (zErrMsg); } Else { fprintf (stdout, "Table créée avec succès \ n"); } sqlite3_close (db); return 0; }
Lorsque le programme ci-dessus est compilé et exécuté, il crée la table de l'entreprise dans test.db fichier, la liste finale des fichiers comme suit:
-rwxr-xr-x. racine 1 racine 9567 8 mai 02h31 a.out -rw-r - r-- 1 root root 1207 8 mai 02h31 test.c. -rw-r - r-- 1 root root 3072 8 mai 02h31 test.db.
opération INSERT
Le code C extrait suivant montre comment créer des enregistrements dans la table de société créée 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 & lt; argc; i ++) { printf ( "=% s \ n% s", 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; / * Ouvrir la base de données * / rc = sqlite3_open ( "test.db", & db); if (rc) { fprintf (stderr, "Impossible d'ouvrir la base de données:% s \ n", sqlite3_errmsg (db)); exit (0); } Else { fprintf (stderr, "base de données ouverte \ succès n"); } / * Création d'instruction SQL * / sql = "INSERT INTO COMPANY (ID, nom, âge, adresse, SALAIRE)" \ "VALUES (1, 'Paul', 32, 'California', 20000.00);" \ "INSERT INTO COMPANY (ID, nom, âge, adresse, SALAIRE)" \ "VALUES (2, 'Allen', 25, 'Texas', 15000.00);" \ "INSERT INTO COMPANY (ID, nom, âge, adresse, SALAIRE)" \ "VALUES (3, 'Teddy', 23,« Norvège », 20000.00);" \ "INSERT INTO COMPANY (ID, nom, âge, adresse, SALAIRE)" \ "VALEURS (4, 'Mark', 25, 'Rich-Mond', 65000.00);"; / * Exécute instruction SQL * / rc = sqlite3_exec (db, sql, rappel, 0, & zErrMsg); if (rc! = SQLITE_OK) { fprintf (stderr, "Erreur de SQL:% s \ n", zErrMsg); sqlite3_free (zErrMsg); } Else { fprintf (stdout, "Les documents créés avec succès \ n"); } sqlite3_close (db); return 0; }
Lorsque le programme ci-dessus est compilé et exécuté, il va créer dans le tableau de la société pour un enregistrement donné, et affiche les deux lignes suivantes:
base de données ouvert avec succès Dossiers créé avec succès
opérations SELECT
Avant de commencer à expliquer des exemples documentés, laissez-nous d'abord comprendre certains des détails de la fonction de rappel, qui sera notre exemple à utiliser. Ce rappel fournit les résultats obtenus à partir d'une méthode d'instruction SELECT. Il est déclaré comme suit:
typedef int (* sqlite3_callback) ( void *, / * Données fournies dans le quatrième argument du sqlite3_exec () * / int, / * Le nombre de colonnes dans la rangée * / char **, / * Un tableau de chaînes représentant les champs dans la ligne * / char ** / * Un tableau de chaînes représentant les noms de colonnes * / );
Si le rappel ci-dessus comme le troisième paramètre dans la procédure sqlite_exec (), puis SQLite SQL pour chaque enregistrement dans les paramètres de chaque processus d'exécution de l'instruction SELECT appelle la fonction de rappel.
Le code C extrait suivant montre comment obtenir de la table de société créée plus tôt et affiche l'enregistrement:
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback (vides de données *, int argc, char ** argv, char ** azColName) { int i; fprintf (stderr, "% s:", (const char *) données); for (i = 0; i & lt; argc; i ++) { printf ( "=% s \ n% s", 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; données const char * = "Fonction de rappel appelée"; / * Ouvrir la base de données * / rc = sqlite3_open ( "test.db", & db); if (rc) { fprintf (stderr, "Impossible d'ouvrir la base de données:% s \ n", sqlite3_errmsg (db)); exit (0); } Else { fprintf (stderr, "base de données ouverte \ succès n"); } / * Création d'instruction SQL * / sql = "SELECT * from COMPANY"; / * Exécute instruction SQL * / rc = sqlite3_exec (db, sql, rappel, (void *) données, et zErrMsg); if (rc! = SQLITE_OK) { fprintf (stderr, "Erreur de SQL:% s \ n", zErrMsg); sqlite3_free (zErrMsg); } Else { fprintf (stdout, "Opération effectuée avec succès \ n"); } sqlite3_close (db); return 0; }
Lorsque le programme ci-dessus est compilé et exécuté, il produit le résultat suivant:
base de données ouvert avec succès Fonction de rappel appelée: ID = 1 NAME = Paul AGE = 32 ADDRESS = Californie SALAIRE = 20000.0 Fonction de rappel appelée: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALAIRE = 15000.0 Fonction de rappel appelée: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norvège SALAIRE = 20000.0 Fonction de rappel appelée: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALAIRE = 65000,0 Opération effectuée avec succès
opération UPDATE
Le code C extrait suivant montre comment utiliser l'instruction UPDATE pour mettre à jour tous les dossiers, puis obtenir à partir du tableau de l'entreprise et afficher l'enregistrement mis à jour:
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback (vides de données *, int argc, char ** argv, char ** azColName) { int i; fprintf (stderr, "% s:", (const char *) données); for (i = 0; i & lt; argc; i ++) { printf ( "=% s \ n% s", 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; données const char * = "Fonction de rappel appelée"; / * Ouvrir la base de données * / rc = sqlite3_open ( "test.db", & db); if (rc) { fprintf (stderr, "Impossible d'ouvrir la base de données:% s \ n", sqlite3_errmsg (db)); exit (0); } Else { fprintf (stderr, "base de données ouverte \ succès n"); } / * Création d'instruction SQL fusionnée * / sql = "UPDATE COMPANY défini SALAIRE = 25000.00 où ID = 1;" \ "SELECT * de COMPANY"; / * Exécute instruction SQL * / rc = sqlite3_exec (db, sql, rappel, (void *) données, et zErrMsg); if (rc! = SQLITE_OK) { fprintf (stderr, "Erreur de SQL:% s \ n", zErrMsg); sqlite3_free (zErrMsg); } Else { fprintf (stdout, "Opération effectuée avec succès \ n"); } sqlite3_close (db); return 0; }
Lorsque le programme ci-dessus est compilé et exécuté, il produit le résultat suivant:
base de données ouvert avec succès Fonction de rappel appelée: ID = 1 NAME = Paul AGE = 32 ADDRESS = Californie SALAIRE = 25000,0 Fonction de rappel appelée: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALAIRE = 15000.0 Fonction de rappel appelée: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norvège SALAIRE = 20000.0 Fonction de rappel appelée: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALAIRE = 65000,0 Opération effectuée avec succès
opération DELETE
Le code C extrait suivant montre comment utiliser l'instruction DELETE supprime tous les enregistrements, puis repris dans le tableau de l'entreprise et affiche l'enregistrement restant:
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback (vides de données *, int argc, char ** argv, char ** azColName) { int i; fprintf (stderr, "% s:", (const char *) données); for (i = 0; i <argc; i ++) { printf ( "=% s \ n% s", 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; données const char * = "Fonction de rappel appelée"; / * Ouvrir la base de données * / rc = sqlite3_open ( "test.db", & db); if (rc) { fprintf (stderr, "Impossible d'ouvrir la base de données:% s \ n", sqlite3_errmsg (db)); exit (0); } Else { fprintf (stderr, "base de données ouverte \ succès n"); } / * Création d'instruction SQL fusionnée * / sql = "DELETE d'entreprise où ID = 2;" \ "SELECT * de COMPANY"; / * Exécute instruction SQL * / rc = sqlite3_exec (db, sql, rappel, (void *) données, et zErrMsg); if (rc! = SQLITE_OK) { fprintf (stderr, "Erreur de SQL:% s \ n", zErrMsg); sqlite3_free (zErrMsg); } Else { fprintf (stdout, "Opération effectuée avec succès \ n"); } sqlite3_close (db); return 0; }
Lorsque le programme ci-dessus est compilé et exécuté, il produit le résultat suivant:
base de données ouvert avec succès Fonction de rappel appelée: ID = 1 NAME = Paul AGE = 32 ADDRESS = Californie SALAIRE = 20000.0 Fonction de rappel appelée: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norvège SALAIRE = 20000.0 Fonction de rappel appelée: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALAIRE = 65000,0 Opération effectuée avec succès