[Gvsig_desarrolladores] Crear tabla en gvSIG a partir de datos
consultados de BD MySQL
Jaime Traver
revartj en gmail.com
Jue Ago 2 12:26:31 CEST 2007
Hola,
Una posible solucion seria crear una nueva tabla, a la cual le añadas los
datos de la capa y de la tabla de la base de datos.
Te muestro como hacer la tabla y añadirla al proyecto.
public class OperacionesTablas {
private DBFDriver driver = new DBFDriver();
private DataSourceFactory dsf;
private DataSource dataSource = null;
private SelectableDataSource sds;
private EditableAdapter auxea;
private DefaultRow row;
private String nameProject;
/**
*
*/
public OperacionesTablas(){
}
/**
* @param tableList
*/
public OperacionesTablas(ArrayList tableList){
this.tableList=tableList;
}
/**
* @param nameProject --> nombre del archivo *.dbf
* @param path --> Ruta donde quieres guardar el archivo *.dbf
* @param Campos
* @param fieldTypes
*/
public void CrearTabla(String nameProject,String path , String[]
Campos,int [] fieldTypes ){
this.nameProject=nameProject;
dsf = LayerFactory.getDataSourceFactory();
dsf.createFileDataSource(driver.getName(), nameProject, path+".dbf",
Campos, fieldTypes);
try {
dataSource = dsf.createRandomDataSource(nameProject,
DataSourceFactory.AUTOMATIC_OPENING);
dataSource.setDataSourceFactory(dsf);
sds = new SelectableDataSource(dataSource);
auxea = new EditableAdapter();
auxea.setOriginalDataSource(sds);
} catch (DriverLoadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchTableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DriverException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param valor
*/
public void AniadirRow(Value[] valor){
row = new DefaultRow(valor);
try {
auxea.addRow(row, "description", EditionEvent.ALPHANUMERIC);
} catch (DriverIOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param tableList
* @return tableNames
*/
public String[] getTableNames() {
String[] tableNames = new String[tableList.size()];
for (int i=0;i<tableList.size();i++) {
tableNames[i] = ((ProjectTable)tableList.get(i)).getName();
}
return tableNames;
}
/**
* @return auxea.getRecordset()
*/
public SelectableDataSource getConjuntoResgistros(){
return auxea.getRecordset();
}
/**
* @return nameProject
*/
public String getNombreTablaEnProyecto(){
return nameProject;
}
/**
* @return auxea
*/
public EditableAdapter getDatosTabla(){
return auxea;
}
}
public class OperacionesProyectoTabla {
private ProjectTable projectTables;
/**
*
*/
public OperacionesProyectoTabla(){
projectTables=null;
}
/**
* @param capa
*/
public void AssociatedTableCapa(OperacionesTablas
OperationTable,AlphanumericData capa)
{
AniadirTablaProject(OperationTable);
projectTables.setAssociatedTable(capa);
}
/**
* @throws EditionException
* @throws DriverLoadException
* @throws DriverException
*/
private void writeFile(OperacionesTablas OperationTable) throws
EditionException,DriverLoadException, DriverException{
IEditableSource ies = projectTables.getModelo();
IWriteable w = (IWriteable) ies;
IWriter writer = w.getWriter();
ITableDefinition tableDef = ies.getTableDefinition();
writer.initialize(tableDef);
ies.stopEdition(writer,EditionEvent.ALPHANUMERIC);
OperationTable.getDatosTabla().getSelection().clear();
}
/**
* @param OperationTable
*/
public void AniadirTablaProject(OperacionesTablas OperationTable){
try {
projectTables = ProjectFactory.createTable(
OperationTable.getNombreTablaEnProyecto(),OperationTable.getDatosTabla());
ProjectExtension ext =
(ProjectExtension)PluginServices.getExtension(ProjectExtension.class);
ext.getProject().addDocument(projectTables);
writeFile(OperationTable);
} catch (DriverLoadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (EditionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DriverException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param NombreTabla
* @param tableList
*/
public void setProyectoTabla(String NombreTabla, ArrayList tableList){
for (int i=0;i<tableList.size();i++) {
if
(((ProjectTable)tableList.get(i)).getName().equals(NombreTabla)) {
projectTables = (ProjectTable)tableList.get(i);
break;
}
}
}
/**
* @return
*/
public ProjectTable getProjectTable() {
return projectTables;
}
}
Una vez añadidas estas dos clases que te muestro en tu proyecto, tendrias
que hacer lo siguiente en tu programa principal:
private OperacionesTablas operationTable;
private OperacionesProyectoTabla operationProjectTable;
operationTable = new OperacionesTablas();
operationProjectTable = new OperacionesProyectoTabla();
String[] field= {"CAMPO_A","CAMPO_B","CAMPO_C","CAMPO_D","CAMPO_E"};
int [] fieldType={12,12,12,12,12};
operationTable.CrearTabla("NOMBRE_TABLA","DIRECTORIO_DONDE_SE_ALOJARA_ARCHIVO.DBF",
field,fieldType); // Ej: Windows -> c:\misdocumentos\ficherosdf\ ; Linux -->
/home/tu_usuario/
for (int i=0; i< 5; i++) // Desde 0 hasta 5, para que veas el
resultado
{
Value[] valor = new StringValue[5];
valor[0]=ValueFactory.createValue("STRING_CAMPO_A");
valor[1]=ValueFactory.createValue("STRING_CAMPO_B");
valor[2]=ValueFactory.createValue("STRING_CAMPO_C");
valor[3]=ValueFactory.createValue("STRING_CAMPO_D");
valor[4]=ValueFactory.createValue(i"STRING_CAMPO_E");
operationTable.AniadirRow(valor);
}
operationProjectTable.AniadirTablaProject(operationTable);
Creo que no se me ha pasado nada. Espero que te sirva de ayuda.
Un Saludo
El día 2/08/07, Javier López <jlopezviso en gmail.com> escribió:
>
> Hola,
>
> Planteo una nueva pregunta, ya algo diferente al hilo anterior. Lo que
> quiero ahora es crear una tabla en el proyecto cuando consulte datos de una
> BBDD MySQL y hacer la union de la tabla asociada a la capa con ésta. Pero
> aquí tengo el problema, ayer me llevé toda la tarde intentando crear la
> tabla (resultante de una consulta a la BBDD MySQL) y no fuí capaz, porque no
> encontraba el driver. Pongo el código a continuación:
>
> Connection conn = GestorConexiones.getConnection();
>
> System.out.println(conn.isClosed());
>
> String name = "mi_tabla";
> String driverInfo=" com.mysql.jdbc.Driver"; //"gdbms dbf
> driver";//"com.mysql.jdbc.Driver";
>
> //Tiene que ser un new Driver, pq con el driver del dbf (el
> comentado) no falla pero no encuentra la tabla
>
> System.out.println(driverInfo);
>
> //ConcreteMemoryDriver driver = new ConcreteMemoryDriver();
> //LayerFactory.getDataSourceFactory().getd
>
> LayerFactory.getDataSourceFactory ().addDBDataSourceBySQL(name,
> conn, "select * from encuesta", driverInfo);
>
> System.out.println("LLEGA");
>
> DataSource dataSource = LayerFactory.getDataSourceFactory().createRandomDataSource(name,
> DataSourceFactory.AUTOMATIC_OPENING);
>
> System.out.println("NO LLEGA");
>
> SelectableDataSource sds = new
> SelectableDataSource(dataSource);
> EditableAdapter auxea = new EditableAdapter();
> auxea.setOriginalDataSource(sds);
>
> ProjectTable projectTable = ProjectFactory.createTable
> (name,auxea);
>
> ProjectExtension ext = (ProjectExtension)
> PluginServices.getExtension(ProjectExtension.class ); ext.getProject
> ().addDocument(projectTable);
>
>
> FALLA en createRandomDataSource, porque dice que no encuentra el driver,
> he consultado también todos los drivers que hay en
> LayerFactory.getDataSourceFactory() y el único que hay es el de la
> conexión al dbf del shape.
>
> ¿Qué driver le tengo que indicar a "LayerFactory.getDataSourceFactory().addDBDataSourceBySQL(name,
> conn, "select * from encuesta", driverInfo); "? Me imagino que el driver de
> mysql, pero tendré que crear un nuevo driver en el proyecto, para conexion a
> la mysql.
>
> Por favor si me podeis ayudar en esto os lo agradecería mucho ¿Como
> traerme al proyecto datos de una BBDD mysql? necesito saber que clases usar.
> El código de arriba lo he adaptado de una pregunta que hicieron en la lista
> de desarrolladores, pero en la misma creaban una tabla a partir de un dbf, y
> el driver lo creaban como DBFDriver, pero yo no tengo ninguna clase
> MySQLDriver.
>
> Espero vuestra ayuda.
>
> Un saludo,
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en runas.cap.gva.es
> http://runas.cap.gva.es/mailman/listinfo/gvsig_desarrolladores
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://runas.cap.gva.es/pipermail/gvsig_desarrolladores/attachments/20070802/f259534b/attachment-0001.htm
Más información sobre la lista de distribución gvSIG_desarrolladores