Fuente de datos de Fichero Alfanumérico

Para poder usar cualquier fuente de datos, primero debemos registrar la información necesaria para que la librería pueda localizarla y manejarla. En el caso de los ficheros, debemos usar el método de DataSourceFactory.addFileDataSourceK el cual recibe como parámetros el nombre que usaremos para referirnos a ella, el nombre del fichero que contiene los datos y el Driver para manejarlo (que debe de estar cargado en el DriverManager).

Para especificar el Driver usaremos el String que devuelven las instancias en el método getName(). El DriverManager provee del método getDriverNames() que devuelve un Array con los nombres de los Driver cargados.

Una vez registrada la fuente, es posible abrirla directamente (usando DataSourceFactory. createRandomDataSource(nombreDeLaFuente)) o usarla en instrucciones SQL (DataSourceFactory.executeSQL(cadenaSQL)). Para ilustrarlo podemos ver un ejemplo:

001	public static void ficheroDBF() throws Exception {

// print hace un printf de un String en la salida estandar

002	String driverName = null;

003	String[] driverNames = dataSourceFactory.getDriverManager().getDriverNames();

004	String tempName = null;

005	int i;

006	for (i=0; i < driverNames.length; i++ ){

007	tempName = driverNames[i];

008	if (tempName .indexOf(" dbf ") >= 0) {

009	driverName = tempName;

010	break;

011	}

012	}

013	DataSource ds=null;

014	if (driverName == null) {

015	print("NO SE HA ENCONTRADO EL DRIVER!!!!!!");

016	return;

017	}

018	dataSourceFactory.addFileDataSource(driverName,"usos_dbf","./data/usos.dbf");

019

020	ds= dataSourceFactory.createRandomDataSource("usos_dbf");

021

022	ds.start();

023

024	print("ds.getFieldCount() = " + ds.getFieldCount());

025	print("ds.getName() = '" + ds.getName() +"'");

026	print("ds.getPKNames() = " + reprArray(ds.getPKNames()));

027	print("ds.getFieldIndexByName(ds.getPKName(0)) = " + ds.getFieldIndexByName(ds.getPKName(0)));

028	print("ds.getRowCount() =" + ds.getRowCount());

029	print("ds.getFieldNames() = "+ reprArray(ds.getFieldNames()));

030	print(ds.getFieldValue(0,0) + " " + ds.getFieldValue(0,1));

031	print(ds.getFieldValue(1,0) + " " + ds.getFieldValue(1,1));

032

033	ds.stop();

034

035	}

En el ejemplo podemos ver como se registrada una fuente de datos que apunta a un fichero 'usos.dbf' y lo apertura para sacar por la consola algunos datos.

Para que el ejemplo funcione, debería de estar inicializada en la variable dataSourceFactory un DataSourceFactory con un driver para ficheros dbf cargado en el DriverManager (ver capitulo Inicialización). print es un método que muestra un String por la salida estándar.

En las lineas 005 hasta la 017, se intenta buscar el nombre del Driver apropiado para el fichero dbf. Después, en la linea 018, registra la fuente usando el nombre de Driver que hemos encontrado, con el nombre de fuente 'usos_dbf' y el fichero que esta en la ruta './data/usos.dbf'. Abrimos la fuente de forma directa en la linea 020, usando para identificarla el nombre que le hemos dado en el registro 'usos_dbf'. Ya tenemos disponible una instancia de DataSource que nos permitirá acceder a los datos.

Los datos no estarán disponibles hasta que abramos el DataSource con el metodo start() como se hace en la linea 022. Hasta ese momento, el fichero en disco no se ha abierto todavía. Es importante, cuando terminemos de usar el DataSource, que lo cerremos con el metodo stop() (linea 033), ya que, dependiendo de la implementación y el tipo Driver pueden producirse problemas o comportamientos inesperados.

Nota: Existe un tipo de DataSource que se apertura y cierra automáticamente,sin necesidad de usar los métodos start() ni stop() Para usarlo hay que crearlo usando el método DataSourceFactory.createRamdonDataSource pasándole como ultimo parámetro DataSourceFactory.AUTOMATIC_OPENING.

Una vez abierto el DataSource nos permite consultar el numero de campos (linea 024), el numero de registros (linea 028), los nombres de los campos (linea 029) y los valore de los datos (linea 030). Los valores devueltos por el método getFieldValue son instancias de clases que implementan el interface Value(com.hardcode.gdbms.engine.values.Value), métodos propios según el tipo y un método getValue() que devuelve el tipo básico de Java al que representa.

Aquí tenemos un diagrama con las clases mas representativas que intervienen en las operaciones con fuentes de tipo Fichero Alfanumérico.

Jose Manuel Vivó

2006-04-07T08:42:08