Latest web development tutorials

SQLite - C / C ++

installare

Nel programma / C ++ C prima dell'uso SQLite, bisogna garantire che vi sia la libreria SQLite sulla macchina. È possibile visualizzare la sezione di installazione SQLite per il processo di installazione.

C / C ++ API di interfaccia

Di seguito sono l'importante programma di interfaccia ++ / SQLite C & C per soddisfare le vostre esigenze utilizzando database SQLite in C / C ++. Se avete bisogno di ulteriori informazioni, si prega di consultare la documentazione ufficiale 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 禁止关闭的错误消息。

Connettersi al database

Il seguente codice C frammento di mostra come connettersi a un database esistente. Se il database non esiste, viene creato, e, infine, restituisce un oggetto di database.

#include <stdio.h>
#include <sqlite3.h>

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;

   rc = sqlite3_open ( "test.db", e db);

   if (rc) {
      fprintf (stderr, "Impossibile aprire il database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "database aperto \ successo n");
   }
   sqlite3_close (db);
}

Ora, cerchiamo di compilare ed eseguire il programma di cui sopra, creiamo la nostratest.db database nella directory corrente.È possibile modificare il percorso in base alle esigenze.

$ Gcc test.c -l sqlite3
$. / A.out
database aperto con successo

Se si desidera utilizzare il codice sorgente C ++ può essere compilato secondo il codice seguente:

$ G ++ test.c -l sqlite3

Qui, i nostri link del programma sqlite3 libreria per il programma C per fornire le funzioni necessarie. Questo creerà un file di database test.db nella directory, si ottengono i seguenti risultati:

-rwxr-xr-x. 1 root root 7383 8 Maggio 02:06 a.out
-rw-r - r-- 1 root root 323 8 maggio 02:05 test.c.
-rw-r - r-- 1 root root 0 8 maggio 02:06 test.db.

Creare una tabella

Il seguente codice C frammento di sarà utilizzato per creare una tabella nel database creato in precedenza:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

static int richiamata (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   for (i = 0; i & lt; 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;

   / * Aprire banca dati * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Impossibile aprire il database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stdout, "database aperto \ successo n");
   }

   / * Crea istruzione SQL * /
   sql = "CREATE TABLE COMPANY (" \
         "PRIMARY KEY ID INT NOT NULL," \
         "NOME TESTO NOT NULL," \
         "AGE INT NOT NULL," \
         "INDIRIZZO CHAR (50)," \
         "STIPENDIO REAL);";

   / * Eseguire SQL * /
   rc = sqlite3_exec (db, sql, richiamata, 0, e zErrMsg);
   if (rc! = SQLITE_OK) {
   fprintf (stderr, "Errore SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Tabella creato con successo \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando il programma di cui sopra è compilato ed eseguito, crea tavolo azienda nel test.db di file, la lista definitiva dei file come segue:

-rwxr-xr-x. 1 root root 9567 8 Maggio 02:31 a.out
-rw-r - r-- 1 root root 1207 8 Maggio 02:31 test.c.
-rw-r - r-- 1 root root 3072 8 Maggio 02:31 test.db.

operazione INSERT

Il seguente codice C frammento di mostra come creare record nella tabella società creata in precedenza:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

static int richiamata (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   for (i = 0; i & lt; 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;

   / * Aprire banca dati * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Impossibile aprire il database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "database aperto \ successo n");
   }

   / * Crea istruzione SQL * /
   sql = "INSERT INTO COMPANY (ID, nome, età, indirizzo, STIPENDIO)" \
         "VALORI (1, 'Paul', 32, 'California', 20000.00);" \
         "INSERT INTO COMPANY (ID, nome, età, indirizzo, STIPENDIO)" \
         "VALORI (2, 'Allen', 25, 'Texas', 15000.00);" \
         "INSERT INTO COMPANY (ID, nome, età, indirizzo, STIPENDIO)" \
         "VALORI (3, 'Teddy', 23 ', la Norvegia', 20000.00);" \
         "INSERT INTO COMPANY (ID, nome, età, indirizzo, STIPENDIO)" \
         "VALORI (4, 'Mark', 25 ', Rich-Mond', 65000.00);";

   / * Eseguire SQL * /
   rc = sqlite3_exec (db, sql, richiamata, 0, e zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Errore SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Records creati con successo \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando il programma di cui sopra è compilato ed eseguito, creerà nella tabella Società per un determinato record, e visualizza le seguenti due righe:

database aperto con successo
Record creati con successo

operazioni SELECT

Prima di iniziare spiegando esempi documentati, dobbiamo prima capire alcuni dei dettagli della funzione di callback, che sarà il nostro esempio da utilizzare. Questo callback fornisce i risultati ottenuti da un metodo SELECT. Si è dichiarato come segue:

typedef int (* sqlite3_callback) (
void *, / * Dati forniti nel 4 ° argomento di sqlite3_exec () * /
int, / * Il numero di colonne in fila * /
char **, / * Un array di stringhe che rappresentano campi della riga * /
char ** / * Un array di stringhe che rappresentano i nomi delle colonne * /
);

Se la richiamata sopra come terzo parametro nella procedura sqlite_exec (), quindi SQLite SQL per ogni record all'interno dei parametri di ogni processo di esecuzione istruzione SELECT chiama la funzione di callback.

Il seguente codice C frammento di mostra come ottenere dal tavolo azienda ha creato in precedenza e visualizza il record:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

int statico callback (void * data, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) dati);
   for (i = 0; i & lt; 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;
   dati const char * = "funzione Callback chiamata";

   / * Aprire banca dati * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Impossibile aprire il database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "database aperto \ successo n");
   }

   / * Crea istruzione SQL * /
   sql = "SELECT * da azienda";

   / * Eseguire SQL * /
   rc = sqlite3_exec (db, sql, richiamata, (void *) i dati, e zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Errore SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operazione eseguita con successo \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando il programma di cui sopra è compilato ed eseguito, produce il seguente risultato:

database aperto con successo
funzione di callback chiamata: ID = 1
NAME = Paul
AGE = 32
INDIRIZZO = California
STIPENDIO = 20000.0

funzione di callback chiamata: ID = 2
NAME = Allen
AGE = 25
INDIRIZZO = Texas
STIPENDIO = 15000.0

funzione di callback chiamata: ID = 3
NAME = Teddy
AGE = 23
INDIRIZZO = Norvegia
STIPENDIO = 20000.0

funzione di callback chiamata: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
STIPENDIO = 65.000,0

Operazione eseguita con successo

operazione UPDATE

Il seguente codice C frammento di mostra come utilizzare l'istruzione UPDATE per aggiornare tutti i record, quindi ottenere da tavolo COMPANY e visualizzare il record aggiornato:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int statico callback (void * data, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) dati);
   for (i = 0; i & lt; 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;
   dati const char * = "funzione Callback chiamata";

   / * Aprire banca dati * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Impossibile aprire il database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "database aperto \ successo n");
   }

   / * Crea istruzione SQL fusione * /
   sql = "UPDATE COMPANY salario = 25000.00 dove ID = 1;" \
         "SELECT * da azienda";

   / * Eseguire SQL * /
   rc = sqlite3_exec (db, sql, richiamata, (void *) i dati, e zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Errore SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operazione eseguita con successo \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando il programma di cui sopra è compilato ed eseguito, produce il seguente risultato:

database aperto con successo
funzione di callback chiamata: ID = 1
NAME = Paul
AGE = 32
INDIRIZZO = California
STIPENDIO = 25000.0

funzione di callback chiamata: ID = 2
NAME = Allen
AGE = 25
INDIRIZZO = Texas
STIPENDIO = 15000.0

funzione di callback chiamata: ID = 3
NAME = Teddy
AGE = 23
INDIRIZZO = Norvegia
STIPENDIO = 20000.0

funzione di callback chiamata: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
STIPENDIO = 65.000,0

Operazione eseguita con successo

un'operazione DELETE

Il seguente codice C frammento di mostra come utilizzare l'istruzione DELETE elimina tutti i record, e poi ripreso dalla tabella COMPANY e visualizza la registrazione rimanente:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int statico callback (void * data, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) dati);
   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;
   dati const char * = "funzione Callback chiamata";

   / * Aprire banca dati * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Impossibile aprire il database:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "database aperto \ successo n");
   }

   / * Crea istruzione SQL fusione * /
   sql = "DELETE da azienda dove ID = 2;" \
         "SELECT * da azienda";

   / * Eseguire SQL * /
   rc = sqlite3_exec (db, sql, richiamata, (void *) i dati, e zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Errore SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operazione eseguita con successo \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando il programma di cui sopra è compilato ed eseguito, produce il seguente risultato:

database aperto con successo
funzione di callback chiamata: ID = 1
NAME = Paul
AGE = 32
INDIRIZZO = California
STIPENDIO = 20000.0

funzione di callback chiamata: ID = 3
NAME = Teddy
AGE = 23
INDIRIZZO = Norvegia
STIPENDIO = 20000.0

funzione di callback chiamata: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
STIPENDIO = 65.000,0

Operazione eseguita con successo