envolviendo la api de firebird/interbase conaiisi 2013 utn frc mg. guillermo cherencio
TRANSCRIPT
![Page 1: Envolviendo la API de Firebird/Interbase CoNaIISI 2013 UTN FRC Mg. Guillermo Cherencio](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/2.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/4.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/5.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/7.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/8.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/9.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/10.jpg)
¿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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/25.jpg)
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](https://reader036.vdocuments.site/reader036/viewer/2022081518/54da7890497959a9648b4abc/html5/thumbnails/26.jpg)
PREGUNTAS ¿?
MUCHAS GRACIAS POR SU ATENCION!!
Mg. Guillermo Cherencio
http://www.grch.com.ar
UTN FRD – UNLu – ISFT 189