8 2 Workshop Swing Jdbc

21
Curso: "Programación Java SE" 2013 “Swing: GUI – Con Bases de Datos” Módulo 8 / parte 2 © Todos los logos y marcas utilizados en este documento, están registrados y pertenecen a sus respectivos dueños. AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 1

Transcript of 8 2 Workshop Swing Jdbc

Page 1: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

“Swing: GUI – Con Bases de Datos”

Módulo 8 / parte 2

© Todos los logos y marcas utilizados en este documento, están registrados y pertenecen a sus respectivos dueños.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 1

Page 2: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013 Objetivo Esta práctica de laboratorio tiene como objetivo conocer los conceptos más avanzados del uso del API de Java Swing para crear aplicaciones con bases de datos y JDBC, utilizando formularios y Grillas.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 2

Page 3: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013 Ejercicio 1: Configurar la Base de Datos de Java (Apache Derby)

En este ejercicio vamos a crear un nuevo recurso de conexión JDBC para luego crear la base de datos con sus respectivas tablas para utilizarlas en la aplicación swing.

Iniciar/levantar el servicio de la base de datos Java DB 1. Seleccionar la pestaña Services. 2. Expandir Databases 3. Clic-Derecho en Java DB y seleccionar Start Server

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 3

Page 4: 8 2 Workshop Swing Jdbc

Curso: "Programación 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: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 4

Page 5: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

6. Aparece una nueva conexión 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 conexión que aparece y seleccionar Connect

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 5

Page 6: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

1. Luego, clic Derecho sobre el string de conexión (ya con conexión) y seleccionar Execute Command.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 6

Page 7: 8 2 Workshop Swing Jdbc

Curso: "Programación 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 Cámara 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 Cómoda 5 Cajones', 299990, 20);

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 7

Page 8: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

3. Clic en el botón Run SQL

4. Listo ;-)

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 8

Page 9: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013 Verificando los productos en la tabla recién creada

1. Expandir el String de conexión->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: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 9

Page 10: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 10

Page 11: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013 Ejercicio 2: Creando una aplicación 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 sección

Projects. • Clic Next.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 11

Page 12: 8 2 Workshop Swing Jdbc

Curso: "Programación 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 autónoma MantenedorProducto.java, que contendrá el método main(..) que será generado por Netbeans.

• Clic Finish.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 12

Page 13: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

• Observe que el proyecto ProyectoMantenedorProducto y ha sido creado bajo la pestaña Projects de NetBeans IDE y además ha generado automáticamente la clase MantenedorProducto.java la cual es desplegada en el editor de código del IDE.

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 13

Page 14: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

3. Agregar el driver de Java DB Derby derbyclient.jar en el classPath del proyecto (visto en el módulo anterior)

4. Modificar el contenido generado por el IDE en la clase MantenedorProducto.java. • Modifique la clase MantenedorProducto.java como se muestra en el Código de abajo,

poner especial atención 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 Andrés Guzmán 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 conexión a la base de datos iniciarConexion(); //Iniciamos los componentes del formulario y grilla iniciarComponentes(); setDefaultCloseOperation(EXIT_ON_CLOSE); } private void iniciarConexion() { String url = "jdbc:derby://localhost:1527/java_productos"; String user = "curso"; String password = "javase"; try { // Cargamos el driver de conexión de Derby Java DB Class.forName("org.apache.derby.jdbc.ClientDriver"); // Asignamos al atributo conn, con el objeto de recurso de conexión // a la base de datos conn = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { System.err.println("No se cargo el driver de conexión Java DB"); } catch (SQLException esql) { System.err.println("Problema al conectarnos a Java DB: " + esql.getMessage()); }

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 14

Page 15: 8 2 Workshop Swing Jdbc

Curso: "Programación 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 botón y le asignamos un evento para guardar en la base de datos // usando addActionListener y le pasamos la instancia listener creada más 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); formulario.add(precioLabel); formulario.add(precioField); formulario.add(cantidadLabel); formulario.add(cantidadField); formulario.add(new Label()); formulario.add(botonGuardar); //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: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 15

Page 16: 8 2 Workshop Swing Jdbc

Curso: "Programación 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 cuántos 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 según 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()) { Object[] fila = {result.getInt("id"), result.getString("nombre"), result.getInt("precio"), result.getInt("cantidad")}; filas[i] = fila; i++; } stmt.close(); } catch (SQLException esql) { System.err.println("Problema en la consulta: " + esql.getMessage()); } } // Implementamos método de la súper clase AbstractTableModel para saber el total de columnas @Override public int getColumnCount() { // TODO Auto-generated method stub

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 16

Page 17: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013 return columnas.length; } // Implementamos método de la súper clase AbstractTableModel para saber el total de filas @Override public int getRowCount() { // TODO Auto-generated method stub return filas.length; } // Implementamos método de la súper clase AbstractTableModel para obtener una determinada celda @Override public Object getValueAt(int rowIndex, int columnIndex) { return filas[rowIndex][columnIndex]; } // Implementamos método de la súper 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 botón 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) "; sqlInsert += "VALUES ("; sqlInsert += "'" + nombre + "', "; sqlInsert += precio + ", "; sqlInsert += 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: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 17

Page 18: 8 2 Workshop Swing Jdbc

Curso: "Programación 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: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 18

Page 19: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

• Observe que se muestra la ventana • En nombre ingrese: ”Bicicleta elíptica Oxford modelo be-50090” • En precio ingrese: ”79990” • En cantidad ingrese: ”13” • Clic en botón Guardar

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 19

Page 20: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 20

Page 21: 8 2 Workshop Swing Jdbc

Curso: "Programación Java SE" 2013 Resumen

En este workshop, hemos aprendido a utilizar y levantar el servicio de base de datos de Java, además creamos una base de datos con su tabla producto y además hemos visto y analizado conceptos más avanzados del uso del API de Java Swing para crear aplicaciones con bases de datos, utilizando formularios, eventos y tablas de registros.

Envía tus consultas a los foros! Aquí es cuando debes sacarte todas las dudas haciendo consultas en los foros correspondientes

AUTORES: [email protected] WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 21