[Gvsig_desarrolladores] Crear tabla en gvSIG a partir de datos consultados de BD MySQL

Javier López jlopezviso en gmail.com
Jue Ago 2 13:19:49 CEST 2007


Gracias Jaime, Si que me van a servir las clases, pero sigo teniendo la duda
de como traerne datos de mi bd mysql, que es donde me fallaba ayer (esta
tarde intentaré seguir probando).

¿Tienes algún código de como traerme datos de una mysql a gvsig?

Gracias,
Javier


El día 2/08/07, Jaime Traver <revartj en gmail.com> escribió:
>
> 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
> >
> >
>
> _______________________________________________
> 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/67284064/attachment-0001.htm


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