Todos los logos y marcas utilizados en este documento, estn registrados y pertenecen a sus respectivos dueos. AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 1
Curso: "Programacin Java SE" 2013
Objetivo Esta prctica de laboratorio tiene como objetivo conocer los conceptos ms avanzados del uso del API de Java Swing para crear aplicaciones con bases de datos y JDBC, utilizando formularios y Grillas.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 2
Curso: "Programacin Java SE" 2013
Ejercicio 1: Configurar la Base de Datos de Java (Apache Derby)
En este ejercicio vamos a crear un nuevo recurso de conexin JDBC para luego crear la base de datos con sus respectivas tablas para utilizarlas en la aplicacin swing. Iniciar/levantar el servicio de la base de datos Java DB 1. Seleccionar la pestaa Services. 2. Expandir Databases 3. Clic-Derecho en Java DB y seleccionar Start Server
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 3
Curso: "Programacin Java SE" 2013
Crear la Base de datos en Netbeans IDE 1. Clic-Derecho en Java DB y seleccionar Create Database
2. En el campo Database Name escribimos java_productos 3. En User Name tipeamos curso 4. En Password y Confirm Password, ingresamos javase 5. Ok.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 4
Curso: "Programacin Java SE" 2013
6. Aparece una nueva conexin a la base de datos en Services bajo Databases o jdbc:derby://localhost:1527/java_productos [curso on CURSO]
7. Clic Derecho sobre el string de conexin que aparece y seleccionar Connect
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 5
Curso: "Programacin Java SE" 2013
1. Luego, clic Derecho sobre el string de conexin (ya con conexin) y seleccionar Execute Command.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 6
Curso: "Programacin Java SE" 2013
2. Aparece el SQL Command editor, copiamos y pegamos lo siguiente: CREATE TABLE productos (id INT NOT NULL GENERATED ALWAYS AS IDENTITY, nombre VARCHAR(50), precio INT, cantidad INT, PRIMARY KEY (id) );
INSERT INTO productos (nombre, precio, cantidad) VALUES('Panasonic Pantalla LCD', 259990, 20); INSERT INTO productos (nombre, precio, cantidad) VALUES('Sony Cmara digital DSC-W320B', 123490, 12); INSERT INTO productos (nombre, precio, cantidad) VALUES('Apple iPod shuffle', 1499990, 25); INSERT INTO productos (nombre, precio, cantidad) VALUES('Sony Notebook Z110', 37990, 10); INSERT INTO productos (nombre, precio, cantidad) VALUES('Hewlett Packard Multifuncional F2280', 69990, 7); INSERT INTO productos (nombre, precio, cantidad) VALUES('Bianchi Bicicleta Aro 26', 69990, 5); INSERT INTO productos (nombre, precio, cantidad) VALUES('Mica Cmoda 5 Cajones', 299990, 20);
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 7
Verificando los productos en la tabla recin creada 1. Expandir el String de conexin->clic derecho y seleccionar Refresh 2. Expandir el esquema CURSO-> expandir Tables 3. Click Derecho en PRODUCTOS y seleccionar View Data. (Ver Figura de abajo)
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 9
Curso: "Programacin Java SE" 2013
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 10
Curso: "Programacin Java SE" 2013
Ejercicio 2: Creando una aplicacin Swing con Bases de Datos para agregar y listar Productos. 1. Abrir Netbeans IDE 2. Crear un proyecto Netbeans: Java Application Seleccionar File desde el men superior y seleccionar New Project. Observar que aparece la ventana de dialogo New Project. Seleccionar Java bajo Categories, y Seleccionar Java Application bajo la seccin Projects. Clic Next.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 11
Curso: "Programacin Java SE" 2013
Bajo el panel Name and Location, para el Nombre del Proyecto (Project Name), ingrese ProyectoMantenedorProducto. Este es el nombre que se le dar al proyecto. Para el campo Create Main Class, ingresar MantenedorProducto. (Figura de abajo) Esto es para generar la clase autnoma MantenedorProducto.java, que contendr el mtodo main(..) que ser generado por Netbeans. Clic Finish. AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 12
Curso: "Programacin Java SE" 2013
Observe que el proyecto ProyectoMantenedorProducto y ha sido creado bajo la pestaa Projects de NetBeans IDE y adems ha generado automticamente la clase MantenedorProducto.java la cual es desplegada en el editor de cdigo del IDE.
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 13
Curso: "Programacin Java SE" 2013
3. Agregar el driver de Java DB Derby derbyclient.jar en el classPath del proyecto (visto en el mdulo anterior) 4. Modificar el contenido generado por el IDE en la clase MantenedorProducto.java. Modifique la clase MantenedorProducto.java como se muestra en el Cdigo de abajo, poner especial atencin en los comentarios resaltados con negrita. import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; import javax.swing.table.AbstractTableModel;
/** * @author Andrs Guzmn F */ public class MantenedorProducto extends JFrame { // Declaramos los componentes atributos de la ventana private JPanel formulario; private JPanel tablaPanel; private JLabel nombreLabel; private JLabel precioLabel; private JLabel cantidadLabel; private JTextField nombreField; private JTextField precioField; private JTextField cantidadField; private JButton botonGuardar; private Connection conn;
public MantenedorProducto(String title) throws HeadlessException { super(title);
// Iniciamos la conexin a la base de datos iniciarConexion(); //Iniciamos los componentes del formulario y grilla iniciarComponentes(); setDefaultCloseOperation(EXIT_ON_CLOSE); }
try { // Cargamos el driver de conexin de Derby Java DB Class.forName("org.apache.derby.jdbc.ClientDriver");
// Asignamos al atributo conn, con el objeto de recurso de conexin // a la base de datos conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { System.err.println("No se cargo el driver de conexin Java DB"); } catch (SQLException esql) { System.err.println("Problema al conectarnos a Java DB: " + esql.getMessage()); } AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 14
Curso: "Programacin Java SE" 2013
}
private void iniciarComponentes() {
// Creamos el panel donde guardaremos el formulario formulario = new JPanel(); // Le asignamos un layout tipo grid con 4 filas y 2 columnas // 20 de borde horizontal y 10 vertical formulario.setLayout(new GridLayout(4, 2, 20, 10)); // agregamos Bordes alrededor del formulario formulario.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
//Creamos los objetos de etiquetas del form nombreLabel = new JLabel("Nombre: "); precioLabel = new JLabel("Precio: "); cantidadLabel = new JLabel("Cantidad: ");
//Creamos los objetos de campos del form nombreField = new JTextField(); precioField = new JTextField(); cantidadField = new JTextField();
// el botn y le asignamos un evento para guardar en la base de datos // usando addActionListener y le pasamos la instancia listener creada ms abajo // una InnerClass botonGuardar = new JButton("Guardar"); botonGuardar.addActionListener(new GuardarListener());
// agregamos los objetos del formulario al panel formulario formulario.add(nombreLabel); formulario.add(nombreField);
//Creamos la tabla o grilla tablaPanel = new JPanel();
//A la tabla le pasamos el objeto modelo que contiene los datos de la grilla // Internamente TablaModel se hara consultas a la base de datos para traer los registros // y poblar la tabla JTable tabla = new JTable(new TablaModel());
//Creamos el objeto scroll y le pasamos la tabla JScrollPane scroll = new JScrollPane(tabla); tablaPanel.add(scroll);
// Agregamos el panel formulario al y la tabla panel al panel principal o frame. getContentPane().add(formulario, BorderLayout.NORTH); getContentPane().add(tablaPanel, BorderLayout.SOUTH); pack(); } AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 15
Curso: "Programacin Java SE" 2013
public static void main(String[] args) { // Creamos la ventana y la instanciamos, inicializando todo. new MantenedorProducto("Swing: GUI Con Bases de Datos").setVisible(true); }
// Inner class para crear los datos en la grilla, heredamos de la clase AbstractTableModel class TablaModel extends AbstractTableModel {
// atributo para las columnas de la tabla private String[] columnas = {"Id", "Nombre", "Precio", "Cantidad"};
// atributo para las filas de la tabla private Object[][] filas;
public TablaModel() {
try { Statement stmt = conn.createStatement();
// Consulta para saber cuntos registros tenemos, para inicializar el arreglo de filas ResultSet countResult = stmt.executeQuery("SELECT count(*) as count FROM productos");
int count = 0; if (countResult.next()) { count = countResult.getInt("count"); }
// Inicializamos el arreglo de filas segn la cantidad de registros que obtuvimos en la consulta de arriba. filas = new Object[count][];
// Consulta para obtener los productos ResultSet result = stmt.executeQuery("SELECT * FROM productos");
int i = 0;
// Recorremos el cursor ResulSet de productos y poblamos la filas de la tabla o grilla while (result.next()) {
stmt.close(); } catch (SQLException esql) { System.err.println("Problema en la consulta: " + esql.getMessage()); } }
// Implementamos mtodo de la sper clase AbstractTableModel para saber el total de columnas @Override public int getColumnCount() { // TODO Auto-generated method stub AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 16
Curso: "Programacin Java SE" 2013
return columnas.length; }
// Implementamos mtodo de la sper clase AbstractTableModel para saber el total de filas @Override public int getRowCount() { // TODO Auto-generated method stub return filas.length; }
// Implementamos mtodo de la sper clase AbstractTableModel para obtener una determinada celda @Override public Object getValueAt(int rowIndex, int columnIndex) { return filas[rowIndex][columnIndex]; }
// Implementamos mtodo de la sper clase AbstractTableModel para saber el nombre de una // determinada columna @Override public String getColumnName(int column) {
return columnas[column]; } }
// Inner class para el Listener del botn guardar class GuardarListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
// Obtenemos los datos de los atributos Text Field o campos del formulario String nombre = nombreField.getText(); int precio = Integer.valueOf(precioField.getText()); int cantidad = Integer.valueOf(cantidadField.getText());
try { Statement stmt = conn.createStatement();
// Generamos el sql para el insert de los datos String sqlInsert = "INSERT INTO productos (nombre, precio, cantidad) ";
// Enviamos la consulta al motor stmt.executeUpdate(sqlInsert); stmt.close();
JOptionPane.showMessageDialog(null, "Producto agregado!"); // Refrescamos el contenido de la tabla, eliminando los componentes y volvemos e inicializar getContentPane().removeAll(); iniciarComponentes();
} catch (SQLException esql) { System.err.println("Problema en la consulta: " AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 17
Curso: "Programacin Java SE" 2013
+ esql.getMessage()); } } } }
5. Construir y ejecutar el programa Clic derecho del mouse sobre el proyecto ProyectoMantenedorProducto y seleccionar Run Observe que se muestra la ventana
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 18
Curso: "Programacin Java SE" 2013
Observe que se muestra la ventana En nombre ingrese: Bicicleta elptica Oxford modelo be-50090 En precio ingrese: 79990 En cantidad ingrese: 13 Clic en botn Guardar
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 19
Curso: "Programacin Java SE" 2013
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 20
Curso: "Programacin Java SE" 2013
Resumen
En este workshop, hemos aprendido a utilizar y levantar el servicio de base de datos de Java, adems creamos una base de datos con su tabla producto y adems hemos visto y analizado conceptos ms avanzados del uso del API de Java Swing para crear aplicaciones con bases de datos, utilizando formularios, eventos y tablas de registros.
Enva tus consultas a los foros! Aqu es cuando debes sacarte todas las dudas haciendo consultas en los foros correspondientes AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 21