viernes, 6 de marzo de 2015

Tutorial Sqlite3 con C/C++ en Español

Hola, estube curisiando un poco sobre sqlite3 en c y la verdad es que su documentacion es un desastre por lo que a mi respecta claro...

La verdad es que me costo encontrar informacion sobre su uso y por ese motivo quiero compartirlo aqui.




Primero que nada vamos a instalar sqlite3, yo estoy trabajando en ubuntu, linux.
Abrimos un terminal y ejecutamos

apt-get install sqlite3 sqlite3-dev

y con este comando ya estamos listos para empezar.

Creamos un archivo llamado datos.db y ejecutamos en el terminal
sqlite3 datos.db

Ahora vamos a crear una tabla

create table datos (
    nombre char(25),
    apellido char(25)
);

Y a programar en c y continuo explicando con comentarios :D

#include <stdio.h> //Printf
#include <sqlite3.h> // Funciones sqlite3

int main(){
    sqlite3 *db; //Creamos el puntero a la base de datos
    sqlite3_stmt *pStmt; //Esta variable se encarga de iterar los datos obtenidos
    int rc = 0;
  
    if(sqlite3_open("datos.db", &db) != SQLITE_OK){ //Abrimos la base de datos
        //Comprobamos que la conexion fue exitosa si no es asi terminamos la ejecucion
        return 0;
    }
  
    rc = sqlite3_exec(db, "insert into datos values ('Pedro', 'Fashuu'), ('Fran', 'Sinatra');",0,0,0); //Ejecutamos una sentencia, en este caso ingresamos dos datos
    if(rc != SQLITE_OK){//Comprobamos ubo algun error al ejecutar la sentencia
  
        printf("\nError al insertar datos en la db");
        printf("\n[ERROR] %s", sqlite3_errmsg(db)); // Mostramos el error
  
    }
  
    /* Ahora vamos a ver los resultados */
  
    rc = sqlite3_prepare_v2(db, "SELECT rowid,* FROM datos;", -1, &pStmt, NULL); //Preparamos la sentencia a ejecutar
    if(rc != SQLITE_OK){//Comprobamos ubo algun error al ejecutar la sentencia  
        printf("\nError al obtener datos de la db");
        printf("\n[ERROR] %s", sqlite3_errmsg(db)); // Mostramos el error
  
    }else{
        while(SQLITE_ROW == sqlite3_step(pStmt)){ //sqlite3_step devuelve los resultados y sqlite_row comprueba que aya otro valos para iterar
          
            /* Aqui nos encontramos con varias funciones.
            En este ejemplo solo utilizaremos
            sqlite3_column_int - Devuelve el valos numerico obtenido en la columna
            sqlite3_column_text - Devuelve el valos textual obtenido en la columna */
          
            printf("\nID: %d", sqlite3_column_int(pStmt, 0)); // Indicamos que obtenga el valor numerico de la columna 1, que seria rowid
            printf("\nNombre: %s", sqlite3_column_text(pStmt,1)); //
            printf("\nApellido: %s", sqlite3_column_text(pStmt,2)); //
        }
    }
    printf("\n");
    sqlite3_close(db);//Finalizamos la base de datos
    return 0;
}
PastelBIN: http://pastebin.com/6jSmnXqz
Guardamos el archivo como test.cpp

Finalmente compilamos ejecutando

g++ test.cpp -o test -lsqlite3

Y Listo, se que no fue muy bien explicado pero es muy rebuscado... Espero que les pueda servir de ejemplo. Cualquier cosa consulten, Saludos!



No hay comentarios:

Publicar un comentario