domingo, 21 de septiembre de 2008

Sqlite con Code::Blocks

Otra de instalaciones!
Esta vez se trata de SQLite, una librería que nos permite manejar datos desde una BBDD dentro de nuestra propia aplicación de una forma muy sencilla.

Con SQLite podemos almacenar y recuperar datos usando sentencias SQL, olvidándonos completamente de las funciones de manejo de archivos y de realizar rutinas de búsqueda de datos (esto último se agradece bastante).

En esta entrada describiré el proceso que seguí para usar SQLite desde Code::Blocks (bajo Windows XP).
He usado Code::Blocks 8.02 para el proceso, y mientras escribo este articulo la versión actual de SQLite es la 3.6.2.

Descargamos los siguientes ficheros desde la página de SQLite:
http://www.sqlite.org/
Precompiled Binaries for Windows
  • sqlite-3_6_2.zip : Esto no nos servirá para usar SQLite con Code::Blocks pero nos será muy útil para debugar, pues con esta aplicación podremos consultar y modificar nuestras bases de datos.
  • sqlitedll-3_6_2.zip : La DLL para windows, sin ella la aplicación compilada no se ejecutará. También fabricaremos la libreria .a para Mingw (el compilador que usa Code::Blocks).
Source Code
  • sqlite-amalgamation-3_6_2.zip: Aqui se encuentra el fichero sqlite3.h que deberemos incluir en nuestra aplicación.

Una vez todo descargado, el primer paso es obtener la libreria en formato .a para poder linkar con nuestro programa.
Descomprimimos el fichero sqlitedll-3_6_2.zip en un directorio y abrimos una línea de comandos.
Nos dirigimos al directorio donde descomprimimos sqlitedll-3_6_2.zip y ejecutamos:

dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a

Ahora, crea dentro de tu directorio favorito donde almacenes tus librerias llamado SQLite, y dentro suyo los directorios include y lib.
Yo tengo un directorio donde almaceno todas las librerias que uso habitualmente (C:\libs\), pero puedes omitir este paso y colocar los ficheros en los directorios de Code::Blocks:
X:\{DIRECTORIO_INSTALACION_CODEBLOCKS}\MinGW\include
X:\{DIRECTORIO_INSTALACION_CODEBLOCKS}\MinGW\lib

Bien, descomprime el fichero sqlite-amalgamation-3_6_2.zip dentro del directorio include.
El fichero libsqlite3dll.a colocalo dentro del directorio lib.

Ahora solo nos queda crear el proyecto con Code::Blocks.
Crea un nuevo proyecto,
-"Console application"
-Marca C++ como lenguaje de programación
-Indica el directorio donde guardar el proyecto.

Si NO guardaste los ficheros dentro del directorio de Code::Blocks sigue estos pasos:
-Project/Build options: En el panel de la izquierda marca el nombre del proyecto (no debe estar marcado "debug" ni "release").
-En la pestaña "Linker settings", haz click sobre el botón "Add" y busca el fichero "libsqlite3dll.a" que generamos anteriormente. Con esto Code::Blocks linkara la libreria con nuestro programa.
-En la Pestaña "Search Directories", dentro de la pestaña "Compiler" haz click sobre "Add" y selecciona el directorio "include" donde se descomprimió el fichero sqlite-amalgamation-3_6_2.zip. Así el compilador encontrará el fichero "sqlite3.h"


Si guardaste los ficheros dentro del directorio Code::Blocks:
-Project/Build options: En el panel de la izquierda marca el nombre del proyecto (no debe estar marcado "debug" ni "release").
-En la pestaña "Linker settings", en el cuadro de texto "Other linker options" escribe:
-libsqlite3dll

Bien, para probar que todo funciona correctamente copia el siguiente código y trata de compilarlo:


#include
#include
using namespace std;

int main()
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;

rc = sqlite3_open("test.db", &db);
if( rc==SQLITE_OK )
{
cout << "Yeah!";
}
sqlite3_close( db );
}

Y eso es todo, mucho más sencillo que con QT y GTK!! Así da gusto.

6 comentarios:

Unknown dijo...

Buen día.

Excelente publicación, logré hacer que me compilara, pero al intentar ejecutarla me envía el siguiente error:

"Error al inicar la aplicación porque no se encontró sqlite3.ll. La reinstalación de la aplicación puede solucionar el problema."

(Nota.- No es un error dice "sqlite3.ll")

Pensé que copiando el archivo a c:\windows\system32 ... o a la carpeta donde se encuentra el ejecutable funcionaría pero sigue marcando ese error.

...

Por otro lado, en las directivas #include tienen que agregar:

iostream
sqlite3.h

Saludos y Gracias

clinisbut dijo...

Siento no poder ayudarte, pues nunca he tenido ese error. Quizás en la lista de correo oficial de SQLite encuentres ayuda: http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Raymonde dijo...

Un par de cosas:

En el código, como ya han dicho, los includes son:

#include "iostream"
#include "sqlite3.h"

Por otro lado, a la hora de ejecutar
dlltool -D sqlite3.dll -d sqlite3.def -l libsqlite3dll.a

Es importante verificar que tenemos tanto dlltool.exe como as.exe (ambas aplicaciones de los binarios de MinGW) en el directorio system32 de windows, funcionando correctamente. Ya que sino el .a resultante no será valido debido a que dlltool invoca interiormente a as.

Por último, yo le añadiría un -k al comando, tal como sigue:

dlltool -d sqlite3.def -D sqlite3.dll -k -l libsqlite3dll.a

El error nombrado en el comentario anterior posiblemente sea debido a que la libreria linkada sea equivocadamente el .dll en lugar del .a, como debería ser.

Un saludo.

Anónimo dijo...

hola quiero usarlo en linux disto ubuntu como le hago? mi correo es tony8a87@hotmail.com
agradecere la ayuda.

GalmWing dijo...

@ antonio8a

Para poder usarlo con linux debes descargarte los archivos fuente y compilarlo tu mismo.
En la página de sqlite descarga el autoconf, será más fácil asi.

Despues colocas todo en directorio cualquiero, en tu consola te vas a ese directorio y compilas:
$./configure
$ make

Las especificaciones de cómo instalarlo tambien están en los tarball el archivo se llama INSTALL =)

roberto:D dijo...

En mi caso particular tuve que copiar el archivo, sqlite3.dll a c:\windows\system32

Tambien tuve que colocar la ruta completa de libsqlite3dll.a en Linker Options

Luego de eso funciono bien.

Gracias.