Sei sulla pagina 1di 0

Curso: "Programacin Java SE" 2013

Swing: GUI Con Bases de Datos


Mdulo 8 / parte 2

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

Curso: "Programacin Java SE" 2013

3. Clic en el botn Run SQL


4. Listo ;-)
AUTORES: andresguzf@gmail.com WEB: http://formacion-java.bolsadeideas.cl | | Ventanas y JDBC 8

Curso: "Programacin Java SE" 2013

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);
}

private void iniciarConexion() {
String url = "jdbc:derby://localhost:1527/java_productos";
String user = "curso";
String password = "javase";

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);

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: 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()) {

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 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) ";

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: 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