Latest web development tutorials

SQLite - C / C ++

instalar

En el programa en C / C ++ antes de usar SQLite, tenemos que asegurarnos de que no es la biblioteca SQLite en la máquina. Puede consultar la sección de instalación de SQLite para el proceso de instalación.

C / C ++ API de interfaz

El siguiente es el programa de interfaz ++ / SQLite C & C importantes para satisfacer sus necesidades utilizando la base de datos SQLite en programas de C / C ++. Si necesita más detalles, consulte la documentación oficial 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 禁止关闭的错误消息。

Conectarse a la base de datos

El siguiente fragmento de código C muestra cómo conectarse a una base de datos existente. Si no existe la base de datos, se crea, y finalmente devuelve un objeto de base de datos.

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

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

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

   si (RC) {
      fprintf (stderr, "No se puede abrir la base de datos:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "base de datos abierta con éxito \ n");
   }
   sqlite3_close (db);
}

Ahora, vamos a compilar y ejecutar el programa anterior, crear nuestrotest.db base de datos en el directorio actual.Puede cambiar la ruta, según sea necesario.

$ Gcc test.c -l sqlite3
$. / A.out
la base de datos abierto con éxito

Si desea utilizar el código fuente en C ++ puede compilarse de acuerdo con el código siguiente:

$ G ++ test.c -l sqlite3

Aquí, nuestros biblioteca de enlaces del programa SQLite3 para el programa C, para proporcionar las funciones necesarias. Esto creará un archivo de base de test.db en su directorio, obtendrá los siguientes resultados:

-rwxr-xr-x. raíz 1 de mayo de 7383 de la raíz 8 02:06 a.out
-rw-r - r-- 1 root root 323 de mayo de 8 2:05 test.c.
-rw-r - r-- 1 root root Mayo 0 8 02:06 test.db.

Crear una tabla

El siguiente fragmento de código C se utiliza para crear una tabla en la base de datos creada anteriormente:

#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 =% s \ n", azColName [i], argv [i] argv [i]:? "NULO");
   }
   printf ( "\ n");
   return 0;
}

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

   / * Abrir base de datos * /
   rc = sqlite3_open ( "test.db", y db);
   si (RC) {
      fprintf (stderr, "No se puede abrir la base de datos:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stdout, "base de datos abierta con éxito \ n");
   }

   / * Crear instrucción SQL * /
   sql = "CREAR EMPRESA TABLA (" \
         "Identificación INT clave principal no NULL," \
         "NOMBRE DE TEXTO NO NULO", \
         "La edad no INT NULL," \
         "CHAR DIRECCIÓN (50)," \
         "REAL SALARIO);";

   / * Ejecutar instrucción SQL * /
   rc = sqlite3_exec (db, sql, devolución de llamada, 0, y zErrMsg);
   si (rc! = SQLITE_OK) {
   fprintf (stderr, "Error de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Tabla creado correctamente \ n");
   }
   sqlite3_close (db);
   return 0;
}

Cuando el programa anterior se compila y ejecuta, se crea la tabla EMPRESA en test.db archivo, la lista final de los archivos de la siguiente manera:

-rwxr-xr-x. raíz 1 de mayo de 9567 de la raíz 8 02:31 a.out
-rw-r - r-- 1 root root 1207 de mayo de 8 2:31 test.c.
-rw-r - r-- 1 root root 3072 de mayo de 8 2:31 test.db.

operación INSERT

El siguiente fragmento de código C muestra cómo crear registros de la tabla empresa creada anteriormente:

#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 =% s \ n", azColName [i], argv [i] argv [i]:? "NULO");
   }
   printf ( "\ n");
   return 0;
}

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

   / * Abrir base de datos * /
   rc = sqlite3_open ( "test.db", y db);
   si (RC) {
      fprintf (stderr, "No se puede abrir la base de datos:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "base de datos abierta con éxito \ n");
   }

   / * Crear instrucción SQL * /
   sql = "INSERT INTO EMPRESA (ID, NOMBRE, edad, dirección, SALARIO)" \
         "VALUES (1, 'Paul', 32, 'California', 20000.00);" \
         "INSERT INTO EMPRESA (ID, NOMBRE, edad, dirección, SALARIO)" \
         "VALUES (2, 'Allen', 25 ', Texas, 15000.00);" \
         "INSERT INTO EMPRESA (ID, NOMBRE, edad, dirección, SALARIO)" \
         "VALUES (3, 'Teddy', 23,« Noruega », 20000.00);" \
         "INSERT INTO EMPRESA (ID, NOMBRE, edad, dirección, SALARIO)" \
         "VALORES (4, 'Marcos', 25 ', Rich-Mond', 65000.00);";

   / * Ejecutar instrucción SQL * /
   rc = sqlite3_exec (db, sql, devolución de llamada, 0, y zErrMsg);
   si (rc! = SQLITE_OK) {
      fprintf (stderr, "Error de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Los registros creados con éxito \ n");
   }
   sqlite3_close (db);
   return 0;
}

Cuando el programa anterior se compila y ejecuta, se creará en la tabla de la compañía para un registro dado, y muestra las dos líneas siguientes:

la base de datos abierto con éxito
Registros creado con éxito

operaciones SELECT

Antes de empezar explicando ejemplos documentados, debemos primero entender algunos de los detalles de la función de devolución de llamada, que será nuestro ejemplo de su uso. Esta devolución de llamada proporciona los resultados obtenidos a partir de un método de instrucción SELECT. Se declara como sigue:

typedef int (* sqlite3_callback) (
void *, / * Datos proporcionados en el cuarto argumento de sqlite3_exec () * /
int, / * El número de columnas en la fila * /
char **, / * Un conjunto de cadenas que representan campos de la fila * /
char ** / * Un conjunto de cadenas que representan los nombres de columna * /
);

Si la devolución de llamada anteriormente como tercer parámetro en el procedimiento sqlite_exec (), a continuación, SQLite SQL para cada registro dentro de los parámetros de cada proceso de ejecución de la instrucción SELECT llama a la función de devolución de llamada.

El siguiente fragmento de código C muestra cómo llegar desde la mesa EMPRESA creado anteriormente y muestra el registro:

#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 *) datos);
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]:? "NULO");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 db *;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   los datos const char * = "función devolución de llamada";

   / * Abrir base de datos * /
   rc = sqlite3_open ( "test.db", y db);
   si (RC) {
      fprintf (stderr, "No se puede abrir la base de datos:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "base de datos abierta con éxito \ n");
   }

   / * Crear instrucción SQL * /
   sql = "SELECT * FROM EMPRESA";

   / * Ejecutar instrucción SQL * /
   rc = sqlite3_exec (db, sql, devolución de llamada, (void *) de datos, y zErrMsg);
   si (rc! = SQLITE_OK) {
      fprintf (stderr, "Error de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operación hacer con éxito \ n");
   }
   sqlite3_close (db);
   return 0;
}

Cuando el programa anterior se compila y ejecuta, se produce el siguiente resultado:

la base de datos abierto con éxito
función de devolución de llamada: ID = 1
NAME = Paul
EDAD = 32
DIRECCIÓN = California
SALARIO = 20000.0

función de devolución de llamada: ID = 2
NAME = Allen
EDAD = 25
DIRECCIÓN = Tejas
SALARIO = 15000.0

función de devolución de llamada: ID = 3
NAME = peluche
EDAD = 23
DIRECCIÓN = Noruega
SALARIO = 20000.0

función de devolución de llamada: ID = 4
NAME = Marcos
EDAD = 25
DIRECCIÓN = Rich-Mond
SALARIO = 65000.0

Operación hacer con éxito

operación UPDATE

El siguiente fragmento de código C muestra cómo utilizar la instrucción UPDATE para actualizar los registros, a continuación, obtener de la tabla EMPRESA y mostrar el registro actualizado:

#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 *) datos);
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]:? "NULO");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 db *;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   los datos const char * = "función devolución de llamada";

   / * Abrir base de datos * /
   rc = sqlite3_open ( "test.db", y db);
   si (RC) {
      fprintf (stderr, "No se puede abrir la base de datos:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "base de datos abierta con éxito \ n");
   }

   / * Crear instrucción SQL resultante de la concentración * /
   sql = "EMPRESA actualización del conjunto SALARIO = 25000.00 donde ID = 1;" \
         "SELECT * de la compañía";

   / * Ejecutar instrucción SQL * /
   rc = sqlite3_exec (db, sql, devolución de llamada, (void *) de datos, y zErrMsg);
   si (rc! = SQLITE_OK) {
      fprintf (stderr, "Error de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operación hacer con éxito \ n");
   }
   sqlite3_close (db);
   return 0;
}

Cuando el programa anterior se compila y ejecuta, se produce el siguiente resultado:

la base de datos abierto con éxito
función de devolución de llamada: ID = 1
NAME = Paul
EDAD = 32
DIRECCIÓN = California
SALARIO = 25000.0

función de devolución de llamada: ID = 2
NAME = Allen
EDAD = 25
DIRECCIÓN = Tejas
SALARIO = 15000.0

función de devolución de llamada: ID = 3
NAME = peluche
EDAD = 23
DIRECCIÓN = Noruega
SALARIO = 20000.0

función de devolución de llamada: ID = 4
NAME = Marcos
EDAD = 25
DIRECCIÓN = Rich-Mond
SALARIO = 65000.0

Operación hacer con éxito

operación DELETE

El siguiente fragmento de código C muestra cómo utilizar la instrucción DELETE borra cualquier registro, y luego toma de la tabla EMPRESA y muestra la grabación restante:

#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 *) datos);
   for (i = 0; i <argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]:? "NULO");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 db *;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   los datos const char * = "función devolución de llamada";

   / * Abrir base de datos * /
   rc = sqlite3_open ( "test.db", y db);
   si (RC) {
      fprintf (stderr, "No se puede abrir la base de datos:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "base de datos abierta con éxito \ n");
   }

   / * Crear instrucción SQL resultante de la concentración * /
   sql = "Borrar de la empresa donde ID = 2;" \
         "SELECT * de la compañía";

   / * Ejecutar instrucción SQL * /
   rc = sqlite3_exec (db, sql, devolución de llamada, (void *) de datos, y zErrMsg);
   si (rc! = SQLITE_OK) {
      fprintf (stderr, "Error de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operación hacer con éxito \ n");
   }
   sqlite3_close (db);
   return 0;
}

Cuando el programa anterior se compila y ejecuta, se produce el siguiente resultado:

la base de datos abierto con éxito
función de devolución de llamada: ID = 1
NAME = Paul
EDAD = 32
DIRECCIÓN = California
SALARIO = 20000.0

función de devolución de llamada: ID = 3
NAME = peluche
EDAD = 23
DIRECCIÓN = Noruega
SALARIO = 20000.0

función de devolución de llamada: ID = 4
NAME = Marcos
EDAD = 25
DIRECCIÓN = Rich-Mond
SALARIO = 65000.0

Operación hacer con éxito