26
Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Embed Size (px)

Citation preview

Page 1: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Envolviendo la API de Firebird/Interbase

CoNaIISI 2013 UTN FRC

Mg. Guillermo Cherencio

Page 2: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Qué es Firebird?

http://www.firebirdsql.org Base de Datos Relacional Open Source Deriva de Interbase (Borland/Inprise) PL/SQL (funciones, stored procedures,

triggers, etc) Windows / Linux Herramientas

Page 3: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Instalación Firebird Artículo en http://www.grch.com.ar

http://www.grch.com.ar/docs/bd/tutorial/firebird/instalacion.firebird.2.5.pdf

En Debian:

$ aptitude install firebird2.5-super

$ dpkg-reconfigure firebird2.5-super Activar Servidor Usuario administrador: sysdba/masterkey Rol administrador: sysdb

Page 4: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Cómo uso Firebird?

C++ librería IBPP Java driver JDBC/JCA Jaybird PHP php_interbase.dll / php_interbase.so Python driver FDB

. . . C solo API C Firebird disponible !!

Page 5: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Por qué no usar API C?

Complejidad: Dificultad, Curva de Aprendizaje, Manual 442 pag., tipos de datos, estructuras poco abstractas, etc.

Clasificación de queries en 4 categorías Portabilidad Aislación SGBD

. . .

Page 6: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Solución: Envolver API

Proyecto sourceforge: libfb

http://sourceforge.net/projects/libfb/ Incluye libcgi +Abstracción +Aislación +Facilidad de uso +Tipos de datos simples LGPL

Page 7: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Cómo utilizar libfb?

Descargar (libfb.zip): http://sourceforge.net/projects/libfb/

Descomprimir libfb.zip:

$ unzip libfb.zip Compilar:

$ make

Page 8: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Cómo utilizar libfb? (II)

Archivo de libreria estática:

libfb.a Archivo de libreria dinámica:

libfb.so Archivo de cabecera:

libfb.h

Page 9: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Cómo utilizar libfb? (III)

Ejemplos de código:

/libfb/examples/*.c Base de Datos Firebird 2.5 de ejemplo:

/libfb/examples/isft.fdb Documentación html:

/libfb/doc/html/index.html Documentación latex:

/libfb/doc/latex

Page 10: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

¿Cómo utilizar libfb? (IV)

Compilar ejemplo de libfb/examples:

$ gcc -Wall -o fbquery1 -I <di> -L <dl> -lfb fbquery1.c

<di> directorio en donde se encuentra libfb.h <dl> directorio en donde se encuentra libfb.a

Page 11: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Instalar BD Ejemplo

Usando cuenta root En carpeta de descarga libfb.zip:

$ cp libfb/examples/isft.fdb /var/lib/firebird/2.5/data

$ chown firebird:firebird /var/lib/firebird/2.5/data/isft.fdb

Arrancar Servidor Firebird sql (start/stop):

$ /etc/init.d/firebird2.5-super start

Page 12: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Instalar BD Ejemplo

Usando cuenta root En carpeta de descarga libfb.zip:

$ cp libfb/examples/isft.fdb /var/lib/firebird/2.5/data

$ chown firebird:firebird /var/lib/firebird/2.5/data/isft.fdb

Arrancar Servidor Firebird sql (start/stop):

$ /etc/init.d/firebird2.5-super start

Page 13: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejecutar Ejemplos

Con usuario no root Utilizan BD isft.fdb Habiendo compilado en carpeta

libfb/examples:

$ ./fbquery1 Salida por consola

Page 14: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Conexión/Desconexión

fb_db_info dbinfo;

fb_pre_connect(&dbinfo, "localhost:/.../x.fdb", “sysdba”, "masterkey", "sysdb");

if (fb_do_connect(&dbinfo)) {

// se conecto ok!

// ****SU CONSULTA AQUI****

fb_do_disconnect(&dbinfo);

}

Page 15: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Consultas en libfb

SQL No SQL (nombre tabla/view/select procedure) Función callback y eventos para mayor control Resultados como lista doblemente enlazada Nodo = tupla Nodo con arreglo de punteros a los valores de

cada campo El usuario no requiere usar punteros

Page 16: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Consulta No SQL (I)

query *myquery;

char *squery = "Mitabla";

if ( (myquery=fb_do_single_query(&dbinfo, squery)) != NULL ) {

printf("Recupero %d filas\n",myquery->rows);

rquery *q = myquery->top;

// ***AQUI RECUPERO TUPLAS***

fb_free(myquery);

}

Page 17: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Recupero de tuplas (I)

...

rquery *q;

for(q = myquery->top;q;q=q->next)

printf("[%s][%s]\n",

fb_get_col(myquery,q,0),

fb_get_col(myquery,q,1));

...

Page 18: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Recupero de tuplas (II)

...

rquery *q;

for(q = myquery->top;q;q=q->next)

printf("[%s][%s]\n",

fb_get_col_byname(myquery,q,”codigo”),

fb_get_col_byname(myquery,q,”descr”));

...

Page 19: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Consulta SQL (I)

query myquery;

fb_init(&myquery);

if ( fb_do_query(&dbinfo,1,"SELECT ...",

OnDoGenericQuery,&myquery) ) {

// ***AQUI RECUPERO TUPLAS***

fb_free(&myquery);

}

Page 20: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Consulta SQL (II)

query *myquery;

char *squery = "SELECT ...";

if ( (myquery = fb_do_single_query(&dbinfo, squery)) != NULL ) {

// ***AQUI RECUPERO TUPLAS***

fb_free(myquery);

}

Page 21: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Ejecuto Procedure (I)

char *squery = "EXECUTE PROCEDURE ...”;

query myquery;

fb_init(&myquery);

if ( fb_do_query(&dbinfo, 1, squery, onDoGenericQuery, &myquery) ) {

// ***PROC EJECUTADO OK!!***

fb_free(&myquery);

} else {

// ***ERROR EN EJECUCION PROC !!***

}

Page 22: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Ejemplo Ejecuto Procedure (II)

char *squery = "DELETE FROM ...”;

query myquery;

fb_init(&myquery);

if ( fb_do_cmd(&dbinfo, squery) ) {

// ***PROC EJECUTADO OK!!***

fb_free(&myquery);

} else {

// ***ERROR EN EJECUCION PROC !!***

}

Page 23: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Conexión, Consulta, etc (I)

char *sql = "TBL_PLANE";

query *myquery;

if ((myquery = fb_do_connect_squery("localhost:/var/...",

"sysdba", "masterkey", "sysdb", sql)) != NULL) {

// ***AQUI RECUPERO TUPLAS***

fb_free(myquery);

} else {

// ***ERROR !!***

}

Page 24: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Otras “Features” (I)

Consultas parametrizadas ( select .. legajo = ?)

Soporte para arreglos, blob, etc. Uso de función de callback provista por

librería (onDoGenericQuery) Uso de función de callback provista por el

usuario Manejo Errores SQL

Page 25: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

Otras “Features” (II)

Exportación de queries a archivo Uso de funciones para recupero de tuplas sin

utilizar punteros Info de Base de Datos / Servidor Soporte para eventos Firebird Log de errores Activación/Desactivación de mensajes de

error

Page 26: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio

PREGUNTAS ¿?

MUCHAS GRACIAS POR SU ATENCION!!

Mg. Guillermo Cherencio

http://www.grch.com.ar

UTN FRD – UNLu – ISFT 189