1. Interfaz SQLite


1.1 abierto

SQLITE_API int sqlite3_open(  const char *filename,   /* Database filename (UTF-8) */  sqlite3 **ppDb          /* OUT: SQLite db handle */);


1.2 ejecutivo

SQLITE_API int sqlite3_exec(  sqlite3*,                                  /* An open database */  const char *sql,                           /* SQL to be evaluated */  int (*callback)(void*,int,char**,char**),  /* Callback function */  void *,                                    /* 1st argument to callback */  char **errmsg                              /* Error msg written here */);

1.3 cerrar

SQLITE_API int sqlite3_close(sqlite3*);


2. La función de devolución de llamada en exec

Este artículo habla principalmente sobre la interfaz exec y la devolución de llamada en SQLite. Veamos primero los parámetros en exec:

  • sqlite3* El identificador devuelto por la base de datos abierta por la función de apertura;

  • const char *sql es la instrucción SQL;

  • función de devolución de llamada int(*callback)(void*,int,char**,char**), generalmente utilizada para recibir datos consultados por una declaración SQL;

  • void *, este parámetro se usa como el primer parámetro en la función de devolución de llamada;

  • char **errmsg Si hay un error durante la ejecución, se escribirá aquí.

int callback(void* data, int argc, char** argv, char** azColName)

Por ejemplo, ahora tengo una base de datos como se muestra a continuación:

imagen

En primer lugar, la devolución de llamada no solo llama a la función de devolución de llamada una vez que se ejecuta exec, sino que se determina de acuerdo con el resultado de la consulta. Si el resultado que satisface la declaración SQL tiene 100 filas, la función de devolución de llamada se llamará 100 veces, y cada función de devolución de llamada se usa para obtener una fila de registros, que también se puede ver en las siguientes rutinas de prueba.

Como se muestra en la tabla anterior, quiero consultar el registro cuyo ID es 1. El primer parámetro de la función de devolución de llamada es el parámetro pasado por el usuario, es decir, el cuarto parámetro de la función exec, y el segundo parámetro es cuántos campos hay en el resultado de la consulta (columna), el número es 4 en la tabla anterior, el tercer parámetro es el valor del campo, a saber (1, Robin, 96.0, 28), y el cuarto parámetro es el campo name, es decir (ID, Name, Grade, Age), solo se puede obtener una fila de datos a través de estos tres parámetros. Luego, los datos obtenidos se pasan a través del primer parámetro.

3. Código de rutina

El siguiente código es para consultar todos los registros en el gráfico anterior e imprimir los datos.

#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("typedef.db", &db); if (rc) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); exit(0); } else { fprintf(stderr, "Opened database successfully\n"); }
/* Create SQL statement */ sql = "SELECT * from typedef";
/* 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;}

El resultado de la ejecución es el siguiente:

imagen

Fuente: typedef
Consejos amables:

Debido a los cambios recientes en las reglas de inserción de la plataforma pública de WeChat, muchos lectores informaron que no vieron los artículos actualizados a tiempo. De acuerdo con las últimas reglas, se recomienda hacer clic en "lectura recomendada, compartir, colección", etc. para convertirse en lectores frecuentes.

Lectura recomendada:

Haga clic en [Mirando] para agregar muslos de pollo al editor

imagen