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 & 描述
1sqlite3_open(const char *filename, sqlite3 **ppDb)

该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。

如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

2sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。

在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。

sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。

3sqlite3_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