lunes, 17 de septiembre de 2012

Leer Archivos DBF en Java

Los archivos DBF fueron diseñados a partir de la creación de dBASE que fue el primer Sistema de gestión de base de datos para computadoras personales y tuvo gran difusión en la plataforma DOS. En la actualidad, si bien su popularidad ha caído, aún se sigue utilizando ampliamente alrededor del mundo.


Fig. 1 El Logo Original

El Encabezado DBF

En este artículo voy a mostrar una forma directa de acceder a la estructura de las Tablas “bases de datos” DBF a través de una interfaz de bajo nivel. Esta forma de acceso es interesante debido a que responde a los mismos principios que el acceso a cualquier otro tipo de archivo estructurado ya sea gráfico, de datos o de presentación, entre otros.

Un Archivo DBF consiste de 3 elementos: un encabezado principal, un encabezado de registros y los registros de datos que pueden estar vacíos.

  1. Encabezado principal (Primeros 32 Bytes).
  2. Encabezado de registros (depende de la cantidad de campos).
  3. Registros de datos (depende de la cantidad de registros).

Download DBase III Plus


Listado del Programa


Los 32 Bytes en Detalle

El encabezado principal define la estructura de Registros del Archivo DBF y contiene cualquier otra información relacionada con la tabla. El Registro de encabezado comienza en la posición cero del Archivo. Los datos de registros están luego del encabezado, en bytes consecutivos y contienen los datos propios de los Campos, tales como el nombre, el tipo de dato al que corresponde y el tamaño.

Fig. 2 Primeros 32 Bytes del Archivo

En la Fig. 2 podemos observar en detalle el Encabezado General, es decir, los primeros 32 bytes correspondientes a una Tabla DBF y contrastarlos con la grilla descriptiva para identificar la función y el valor de los mismos.

Byte desplazamiento Descripción
0Tipo de Archivo DBF
1 - 3Ultima actualización (YYMMDD)
4 - 7Numero de registros en archivo
8 - 9Position del primer registro de datos
10 - 11Largo del registro de datos, incluido el flag de borrado
12 - 27Reservado
28Tabla flags:
0x01 archivo tiene una estructura .cdx
0x02 archivo tiene una Memo campo
0x04 archivo es una base de datos (.dbc)
29Código de marca
30 - 31Reservado, contiene 0x00
32 - nCampo sub registros
El Numero de campos determina el Numero de campo sub registros. Un campo sub registro para cada campo de la tabla.
n+1Terminador del Encabezado de Registro (0x0D)
n+2 to n+264Solo Visual Foxpro

El primer Byte contiene 0x03 y, según consta en la tabla, corresponde a dBase III Plus (abajo hay una lista de los diferentes subtipos de archivos DBF que podemos encontrar).

Tipos de archivo DBF

  • 0x02 FoxBASE
  • 0x03 FoxBASE+/Dbase III plus, sin memo
  • 0x30 Visual FoxPro
  • 0x31 Visual FoxPro, incremento automático enabled
  • 0x32 Visual FoxPro
  • 0x43 dBASE IV SQL table files, sin memo
  • 0x63 dBASE IV SQL system files, sin memo
  • 0x83 FoxBASE+/dBASE III PLUS, con memo
  • 0x8B dBASE IV con memo
  • 0xCB dBASE IV SQL table files, con memo
  • 0xF5 FoxPro 2.x (o anterior) con memo
  • 0xE5 HiPer-Six con archivo SMT memo
  • 0xFB FoxBASE

El segundo, tercero y cuarto Byte corresponden respectivamente al año, mes y día de la última modificación. En el ejemplo presentado en la Fig. 2, la fecha es 06/06/2011.

El resto de los Bytes del encabezado son muy importantes porque definen la estructura del archivo y contienen:

  1. La cantidad de campos que tiene y por ende, el largo del encabezado (32 Bytes adicionales por cada campo).
  2. La cantidad de registros.
  3. El comienzo de los datos.

Para más detalles observe detenidamente el listado del programa que hace uso de estos Bytes en sus cálculos.

Si deseamos diseñar una interface que trabaje con archivos DBF, tendremos que tomar en cuenta estos Bytes y modificarlos apropiadamente cada vez que insertemos o eliminemos un registro o si modificamos la estructura de campos del archivo.

Compilación y Ejecución

El programa, al ejecutarlo, recibe el nombre de la tabla como parámetro. Verifico los resultados contrastándolos con los obtenidos con dBase III Plus sobre la misma tabla y confirmo que son correctos.

Mas adelante les presentare el modo de leer la estructura de campos del archivo para poder trabajar con los datos de la Tabla.

¡Hasta Pronto!

Sergio Otaño

0 comentarios: