Base de datos:
-- -- Base de datos: 'dbbolivia' -- -- -- Estructura de tabla para la tabla 'departamento' -- CREATE TABLE departamento ( dep_id int(2) NOT NULL, dep_nombre varchar(32) NOT NULL, PRIMARY KEY (dep_id) ); -- -- Estructura de tabla para la tabla 'provincia' -- CREATE TABLE provincia ( prov_id int(2) NOT NULL auto_increment, prov_nombre varchar(32) NOT NULL, dep_id varchar(32) NOT NULL, PRIMARY KEY (prov_id) ); -- -- Estructura de tabla para la tabla 'municipio' -- CREATE TABLE municipio ( mun_id int(2) NOT NULL auto_increment, mun_nombre varchar(32) NOT NULL, prov_id int(2) NOT NULL, PRIMARY KEY (mun_id) );
¿Qué necesitamos?
- Netbeans
- Servidor MySQL
Crear la base de datos y agregar algunos datos
1. Crear una proyecto netbeans, agregar un JFrame (interfaz.java) y agregar los siguientes controles:
2. Agregar también una clase (nombre:database.java) para inter actuar con la base de datos MySQL. el código de la clase es:
import java.sql.*; /** * @web http://www.jc-mouse.net * @author Mouse */ public class database { /* DATOS PARA LA CONEXION */ private String bd = "dbbolivia"; private String login = "";//USUARIO private String password = "";//CONTRASEÑA private String url = "jdbc:mysql://localhost/"+bd; private Connection conn = null; //___________________________________________________________________________________ Soy una barra separadora :) public database(){ try{ //obtenemos el driver de para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection(url,login,password); if (conn!=null){ System.out.println("OK base de datos "+bd+" listo"); } }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } //___________________________________________________________________________________ Soy una barra separadora :) public Connection getConnection() { return this.conn; } //___________________________________________________________________________________ Soy una barra separadora :) /* METODO PARA REALIZAR UNA CONSULTA A LA BASE DE DATOS * INPUT: * table => nombre de la tabla donde se realizara la consulta, puede utilizarse tambien INNER JOIN * fields => String con los nombres de los campos a devolver Ej.: campo1,campo2campo_n * where => condicion para la consulta * OUTPUT: un object[][] con los datos resultantes, sino retorna NULL */ public Object [][] select(String table, String fields, String where){ int registros = 0; String colname[] = fields.split(","); //Consultas SQL String q ="SELECT " + fields + " FROM " + table; String q2 = "SELECT count(*) as total FROM " + table; if(where!=null) { q+= " WHERE " + where; q2+= " WHERE " + where; } //obtenemos la cantidad de registros existentes en la tabla try{ PreparedStatement pstm = conn.prepareStatement(q2); ResultSet res = pstm.executeQuery(); res.next(); registros = res.getInt("total"); res.close(); }catch(SQLException e){ System.out.println(e); } //se crea una matriz con tantas filas y columnas que necesite Object[][] data = new String[registros][fields.split(",").length]; //realizamos la consulta sql y llenamos los datos en la matriz "Object" try{ PreparedStatement pstm = conn.prepareStatement(q); ResultSet res = pstm.executeQuery(); int i = 0; while(res.next()){ for(int j=0; j<=fields.split(",").length-1;j++){ data[i][j] = res.getString( colname[j].trim() ); } i++; } res.close(); }catch(SQLException e){ System.out.println(e); } return data; } //___________________________________________________________________________________ Soy una barra separadora :) }
3. Clase interfaz.java
- Las librerias que se utilizan son:
import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath;
private database db = new database();
public interfaz() { initComponents(); this.setTitle("JTree - http://www.jc-mouse.net/"); //se crea la raiz DefaultMutableTreeNode pais = new DefaultMutableTreeNode("Bolivia"); DefaultMutableTreeNode departamento; DefaultMutableTreeNode provincia; DefaultMutableTreeNode municipio; //se obtienen los departamentos Object[][] data_dep = db.select("departamento", " dep_id, dep_nombre", null); if( data_dep.length > 0) { for(int i=0; i < data_dep.length; i++) { //se crea hojas departamentos departamento = new DefaultMutableTreeNode(data_dep[i][1]); pais.add(departamento); //se obtiene las provincias Object[][] data_prov = db.select("provincia", "prov_id,prov_nombre" , " dep_id='" + data_dep[i][0].toString()+"' "); if( data_prov.length > 0) { for(int j=0; j< data_prov.length; j++) { provincia = new DefaultMutableTreeNode(data_prov[j][1]); departamento.add(provincia); //se obtienen los municipios Object[][] data_mun = db.select("municipio", "mun_id,mun_nombre" , " prov_id='" + data_dep[j][0].toString()+"' "); if( data_mun.length > 0) { for(int k=0; k< data_mun.length; k++) { municipio = new DefaultMutableTreeNode(data_mun[k][1]); provincia.add(municipio); } } } } } } DefaultTreeModel modelo = new DefaultTreeModel(pais); this.jTree1.setModel(modelo); jTree1.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { // Se obtiene el Path seleccionado TreePath path = e.getPath(); Object [] nodos = path.getPath(); String txt= jTextArea1.getText() + "Path seleccionado: "; for (Object nodo: nodos) txt+=nodo.toString() + " | "; txt+="\n"; // Se obtiene el Nodo seleccionado DefaultMutableTreeNode NodoSeleccionado = (DefaultMutableTreeNode)nodos[nodos.length-1]; txt+="-> Accion para Nodo Seleccionado [" + NodoSeleccionado.getUserObject().toString() + "]"; txt+="\n"; jTextArea1.setText(txt); } }); }
- Explicación: Se crea la raíz país (Bolivia), después se extrae los registros de la tabla departamentos y se añade a la raíz país, se extrae los registros provincias y se añade a su raíz departamento, se repite el proceso para municipios.
- Ejecutar
Descargar proyecto HERE
6 comentarios:
Gracias me servira mucho.
Me gustaria saber como puedo mostrar los archivos de un ftp en un jTree
gracias ;).
Muchas gracias por la informacion!!!
Me gustaria saber como puedo hacer lo mismo pero conectandome a una base de datos de sqlServer2008
gracias
Oye no te carga bien los municipios lo estube checandoo
Excelente tutoríal me ha servido muchísimo, muchas gracias por tu aporte
excelente. saludos.
Publicar un comentario