[Gvsig_desarrolladores] edición de DBF sobre gvsigMobile

roeptisa mimo027 en gmail.com
Vie Feb 12 10:10:34 CET 2010


Buenas,

Desde gvsigMobile tengo que editar un fichero dbf, para ello hago uso de la
clase DBFFromReadVect.
Esta clase cuando añades un registro, te obliga a recorrerte el dbf completo
y añadir todos los registros de nuevo, con lo cual, cuanto más grande es el
fichero dbf más tarda, y sobre todo sobre una PDA, en la que la memoria no
es muy grande.
Me gustaría saber si de alguna forma se puede mejorar el rendimiento de esa
funcionalidad.
Este es el código que uso cuando inserto una fila en un dbf:

public static void añadirFila(String fName,HashMap newRow)
	{
		//Función que añada una fila a una tabla.
		//ENTRADA: newRow => hashmap con los datos de la fila a insertar.
		//fName => ruta completa del dbf
		
		try{
			
				File f;
				f = new File(fName);
				DbfMemoryDataSource drv;
				drv = new DbfMemoryDataSource(f);
				drv.start();
				
				
				int numFilas = (int)drv.getRowCount();
				int numCols = drv.getFieldCount();
				
				
				DbaseFileHeaderNIO myHeader;
				myHeader = DbaseFileHeaderNIO.createDbaseHeader(drv);
				numFilas++;
				myHeader.setNumRecords(numFilas);
			
				OrderFileOutputStream outStream = new OrderFileOutputStream(f);
				DbaseFileWriterNIO dbfWrite = new
DbaseFileWriterNIO(myHeader,outStream);
				
		
				
			    FeatureTemp fea = new FeatureTemp();
				fea.setFieldNames(drv.getFieldNames());
				
				for (int j=0; j<numFilas-1; j++){
					
					fea.setValues(drv.getRow(j));
					Object[] record = fea.getValues();
					dbfWrite.write(record);
				}	
				
				Object[] record  = new Object[numCols];
				
				for (int k=0; k < numCols; k++)
		        {
		        record[k] = ValueFactory.createValueByType(obj.toString(),
drv.getFieldType(k)); 	
		        }
				dbfWrite.write(record);
				
				
				dbfWrite.close();
				outStream.close();
			
		} catch (Exception e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	      } 
	      
	}

Primero se recorre el dbf y vuelve a insertar todos los registros, y luego
en el segundo bucle, inserto la nueva fila.

Muchas gracias de antemano.

Saludos,

Rocío.

-- 
View this message in context: http://n2.nabble.com/edicion-de-DBF-sobre-gvsigMobile-tp4560072p4560072.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.


Más información sobre la lista de distribución gvSIG_desarrolladores