[Gvsig_desarrolladores] edición de DBF sobre gvsigMobile
roeptisa
mimo027 en gmail.com
Jue Feb 18 17:05:05 CET 2010
Vale,
¿Y se puede poner desde gvsgiMobile en edición una tabla dbf al igual que se
pone en edición una capa?.
He intentado tbe con este código:
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
DBFDriver driver = new DBFDriver();
File myFile = new File(fName);
try {
// Abrimos el fichero
driver.open(myFile);
// Comprobamos que tenemos acceso de escritura.
if (driver.canSaveEdits())
{
ITableDefinition tableDef = driver.getTableDefinition();
FieldDescription[] fields = tableDef.getFieldsDesc();
int numFields = fields.length;
driver.initialize(tableDef);
driver.preProcess();
Value[] att = new Value[numFields];
for (int i=0; i < driver.getRowCount(); i++)
{
for (int j=0; j < numFields; j++)
{
Object obj = driver.getFieldValue(i, j);
if (obj == null)
att[j] = ValueFactory.createNullValue();
else
att[j] = (Value) obj;
}
DefaultRow row = new DefaultRow(att);
DefaultRowEdited edRow = new
DefaultRowEdited(row,DefaultRowEdited.STATUS_ORIGINAL, i);
driver.process(edRow);
}
for (int k=0; k < numFields; k++)
{
Object obj = newRow.get(driver.getFieldName(k));
if (obj == null)
att[k] = ValueFactory.createNullValue();
else
att[k] = ValueFactory.createValueByType(obj.toString(),
driver.getFieldType(k));
}
DefaultRow row = new DefaultRow(att);
DefaultRowEdited edRow = new
DefaultRowEdited(row,DefaultRowEdited.STATUS_ADDED,
(int)driver.getRowCount());
driver.process(edRow);
driver.postProcess();
System.out.println("Fichero modificado");
}
else
{
System.err.println("El fichero no tiene permiso de
edición");
}
driver.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Desde desktop me funciona correctamente, pero cuando lo empaqueto en un CAB
y lo paso a PDA, no me funciona, la clase WritableByteChannel no está
definida en la máquina virtual J9 de IBM:
java.lang.NoClassDefFoundError: java.nio.channels.WritableByteChannel
at java.lang.J9VMInternals.verifyImpl(Native Method)
at java.lang.J9VMInternals.verify(Unknown Source)
at java.lang.J9VMInternals.initialize(Unknown Source)
¿Alguna alternativa a estos códigos, para poder editar un dbf en gvsigmobile
PDA sin tener que recorrerme todos los registros, y que está soportado bajo
J9?
Muchas Gracias.
Saludos.
Ro.
PD: Tbe he probado, a guardar los dbf en una geodatabase personal access,
pero con J9, no he encontrado el jar que tenga definido el driver:
"sun.jdbc.odbc.JdbcOdbcDriver", para que pueda ejecutar este código:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
java.sql.Connection conBBDD = DriverManager.getConnection(
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + path + "", "",
"");
--
View this message in context: http://n2.nabble.com/edicion-de-DBF-sobre-gvsigMobile-tp4560072p4592591.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.
Más información sobre la lista de distribución gvSIG_desarrolladores