GUÍA DE PRÁCTICABD_Mysql

8
  PROGRAMACION JAVA Pag 1 GUÍA DE PRÁCTICA : PRACTICA DIRIGIDA PROGRAMAMACION con BDJAVA INSTRUCTOR:  JORGE LUIS CUADROS VASQUEZ 1. OBJETIVOS ESPECÍFICOS: El participante, será capaz de crear aplicaciones con conexión a BD Mysql con Netbeans. Utilizar los asistentes del IDE netbeans para realizar conexiones a BD. Introducir al participante en el mapeo de entidades ORM y la utilización del objeto Jtable. 2. PROCESO DE EJECUCIÓN 2.1.- INICIO DEL Servidor de BD SQL a).- Ejecute el MySQL Workbench y cargue el script adjunto, si no lo tuviera use el HeidiSql. Menú:Import > Load sql file> seleccione el script b).- Estructura de la BD 2.2.- Conexión con el netbeans, en el IDE, tenemos que registrar el servidor de bases de datos. Ir a la pestaña Prestaciones, clic derecho en el nodo Bases de datos. En el menú contextual, clic en Registrar servidor MySQL. Se mostrará una ventana en la que ingresaremos la configuración del servidor En la pestaña Propiedades de administración podemos especificar la ruta de las herramientas que utilizamos para administrar el servidor. Luego, podemos observar las bases de datos de nuestro servidor. Para conectarnos a una de ellas, hacemos clic derecho en su nombre y seleccionamos Conectar. En la ventana que aparece, debemos ingresar el nombre y la contraseña del usuario que utilizaremos para realizar la conexión. Después de hacer clic en Aceptar veremos que en Prestaciones se ha agregado un nuevo nodo que representa la conexión hecha, mediante la cual podemos acceder a las tablas de la base de datos y los datos que contiene.

Transcript of GUÍA DE PRÁCTICABD_Mysql

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 18

PROGRAMACION JAVA

Pag 1

GUIacuteA DE PRAacuteCTICA PRACTICA DIRIGIDA

PROGRAMAMACION con BDJAVA

INSTRUCTOR JORGE LUIS CUADROS VASQUEZ

1 OBJETIVOS ESPECIacuteFICOS El participante seraacute capaz de crear aplicaciones con conexioacuten a BD Mysql

con Netbeans Utilizar los asistentes del IDE netbeans para realizar

conexiones a BD Introducir al participante en el mapeo de entidades

ORM y la utilizacioacuten del objeto Jtable

2 PROCESO DE EJECUCIOacuteN

21- INICIO DEL Servidor de BD SQLa)- Ejecute el MySQL Workbench y cargue el script adjunto si no

lo tuviera use el HeidiSql MenuacuteImport gt Load sql filegt

seleccione el script

b)- Estructura de la BD

22- Conexioacuten con el netbeans en el IDE tenemos que registrar

el servidor de bases de datos Ir a lapestantildea Prestaciones clic derecho en

el nodo Bases de datos En el menuacute

contextual clic en Registrar servidor

MySQL Se mostraraacute una ventana en

la que ingresaremos la

configuracioacuten del servidor

En la pestantildea Propiedades de

administracioacuten podemos especificar

la ruta de las herramientas que

utilizamos para administrar el

servidor Luego podemos observar

las bases de datos de nuestro servidor Para conectarnos a una

de ellas hacemos clic derecho en su nombre y seleccionamosConectar En la ventana que aparece debemos ingresar el

nombre y la contrasentildea del

usuario que utilizaremos para

realizar la conexioacuten Despueacutes de

hacer clic en Aceptar veremos que

en Prestaciones se ha agregado un

nuevo nodo que representa la

conexioacuten hecha mediante la cual

podemos acceder a las tablas de la

base de datos y los datos que

contiene

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 28

PROGRAMACION JAVA

Pag 2

crear un nuevo proyecto tipo Aplicacioacuten de escritorio Java Luego

de darle un nombre especificamos que utilizaraacute el inteacuterprete de

oacuterdenes Aplicacioacuten de bases de datos para que cree la

funcionalidad baacutesica por nosotros

Seleccione la BD En la lista Conexioacuten con base de datos del

siguiente paso podemos elegir una conexioacuten o crear una nueva

Vamos a escoger la que acabamos de crear Inmediatamente se

listan las tablas disponibles de la cual vamos a elegir grupo Vera

como se listan los campos de la tabla para especificar cuales se

van a incluir

Todos en este

caso

Luego podemos

especificar las opciones

de detalle las cuales son

dos

Cuadros de texto Crea un objeto JTable en el que se muestran los

registros de la tabla grupo y una serie de campo de texto que

muestran los detalles de los registros por cada campo de la tabla

Tabla Crea un objeto JTable en el que se muestran los registros de la

tabla grupo y otra tabla que contiene los registros de una tabla de

detalle (generalmente correspondiente a una relacioacuten 1-n) para el

registro seleccionado en la tabla maestra (grupo)

Para hacerlo maacutes interesante vamos a escoger la uacuteltima opcioacuten y vamos a

seleccionar la tabla musicosgrupos en la lista para mostrar el detalle de los

grupos y sus muacutesicos

Hacemos clic en Finalizar El asistente generaraacute una aplicacioacuten

completamente funcional por nosotros haciendo uso del framework SwingApplication Framework y el API Beans Binding Si ejecutamos la aplicacioacuten

podremos ver los resultados esperados

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 38

PROGRAMACION JAVA

Pag 3

Con esta aplicacioacuten podemos hacer muchas cosas como insertar editar

actualizar y eliminar registros de las tablas de la base de datos (la claacutesica

aplicacioacuten CRUD) El asistente tambieacuten hace uso de JPA (Java Persistence

API) que es la especificacioacuten estaacutendar para el manejo de la persistencia en

Java Pero solo es una especificacioacuten La implementacioacuten concreta es

TopLink una libreriacutea de Oracle (tambieacuten existen otras como Hibernate e

iBatis)

Mapeo de Objetos Relacionales

Desde los inicios de la POO los programadores han tenido que lidiar con el

problema de representar los datos que se tienen en una base de datos en un

modelo de clases y objetos Esto lleva el teacutermino de Mapeo Objeto-

Relacional (ORM por sus siglas en ingleacutes) mecanismo por el cual se puede

solucionar este problema Java tiene una especificacioacuten llamada JPA (Java

Persistence API) que permite realizar este mapeo Pero solo es eso una

especificacioacuten que indica el mecanismo necesario para llevar a cabo el

mapeo Existen baacutesicamente cuatro implementaciones de JPA a saber

Hibernate TopLink OpenJPA y EclipseLink El elegir una u otra

implementacioacuten depende uacutenicamente del rendimiento pues gracias a JPA

podemos trabajar con cualquiera de estas implementaciones y cambiar entre

ellas de manera transparente para nosotros El mapeo objeto-relacional se

realiza a traveacutes de las llamadas clases entidad que son POJOrsquos que tienen

una estructura especial Un POJO (Plain Old Java Object) es un objeto de una

clase simple que no implementa raras interfaces y que puede ser escrita de

la manera convencional Los POJOrsquos fueron la respuesta a la tendencia que

habiacutea de obligar a los programadores a crear clases que implementaran

interfaces (como en EJB) JPA es todo un mundo en esta praacutectica crearemos

clases entidad a partir de la base de datos Northwind con mysql Pasos

1- Crear un proyecto de aplicacioacuten de escritorio ( Swing Application

Framework) Aquiacute vamos a crear las clases entidad y la unidad de persistencia

por nuestra cuenta

2- seleccione crear entidades a partir de BD Una vez que el asistente ha

creado nuestra aplicacioacuten creamos las clases entidad pulsando Ctrl + N y

eligiendo en la ventana resultante la categoriacutea Persistencia y en Tipo de

archivo Clases entidad a partir de base de datos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 48

PROGRAMACION JAVA

Pag 4

3- En el siguiente paso del asistente especificamos la conexioacuten de la que

recuperaraacute los datos Una vez hecho esto se listan las tablas existentes en la

base de datos Hacemos clic en Agregar todo para crear las clases entidad de

todas las tablas de nuestra base de datos La ventaja de esto es que el

asistente crea las clases entidad con toda la funcionalidad necesaria para

realizar el mapeo incluyendo las relaciones que pueden haber en nuestra

base de datos Si solo agregamos unas cuantas tablas y en un momento

posterior tenemos que mapear las demaacutes tendriacuteamos que hacer todo esto

nosotros a mano

4- El siguiente paso nos muestra las tablas de la base de datos y sus

correspondientes clases entidad permitiendo modificar sus nombres

Tambieacuten nos permite especificar un paquete para las clases que se van a

crear (lo cual es recomendable)

En la parte inferior nos dice que el proyecto no tiene una unidad de

persistencia Una unidad de persistencia contiene los paraacutemetros necesarios

para realizar la conexioacuten a la base de datos la clase del proveedor de

persistencia (que se encuentra en los jars de la implementacioacuten JPA que

elijamos) las clases entidad de nuestra aplicacioacuten y los paraacutemetros JDBC de

acceso a la base de datos La unidad de persistencia se almacena en un

archivo llamado persistencexml y es la responsable de que podamos

cambiar de implementacioacuten JPA e incluso de SGBD sin que toquemos el

coacutedigo de nuestra aplicacioacuten

5- Creamos la unidad de persistencia pulsando el botoacuten Crear unidad de

persistencia (obvio no) En la ventana resultante especificamos el nombre de

la unidad de persistencia y la biblioteca que vamos a utilizar Esa es otra

ventaja de crear las clases entidad a mano Utilizando el shell de base de

datos NetBeans trabaja por defecto con TopLink En este caso tenemos la

libertad de escoger nuestra implementacioacuten Hibernate para nosotros La

estrategia de generacioacuten de tablas se refiere a la poliacutetica utilizada para crear

nuevas tablas en nuestra base de datos Como no vamos a hacer esto lo

dejamos con Ninguno

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 58

PROGRAMACION JAVA

Pag 5

6- En el uacuteltimo paso tenemos opciones adicionales La uacutenica que vamos a

modificar es el tipo de coleccioacuten Para explicar porque tomemos un ejemplo

Existe una relacioacuten de uno a muchos entre los clientes y sus pedidos Un

cliente puede hacer muchos pedido pero cada pedido pertenece a un uacutenico

cliente Para realizar el mapeo en estas tablas JPA incluye en la clase Pedido

una referencia al objeto Cliente al que pertenece mientras que en la clase

Cliente agrega una lista de objetos Pedido Podemos especificar que esta lista

sea de tipo Collection List o Set Nosotros vamos a decirle a JPA que utilice

una referencia List

Y eso es todo El asistente se ocupa de crear las clases entidad capaces de

realizar el mapeo objeto-relacional en nuestra base de datos por nosotros

Pero esto no es suficiente En nuestra aplicacioacuten debemos crear el coacutedigo

que creara la unidad de persistencia y los objetos que permitiraacuten realizar

consultas y persistir objetos en nuestra base de datos

7- Agregar Driver Mysql

8- podemos crear un paquete de prueba Junit

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 68

PROGRAMACION JAVA

Pag 6

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(UnidadPersistencia)

EntityManager manager = factorycreateEntityManager()

El meacutetodo createEntityManagerFactory toma el nombre de la unidad de

persistencia la crea y devuelve un objeto EntityManagerFactory que esutilizado para crear objetos EntityManager Los objetos EntityManager

tienen meacutetodos que permiten realizar consultas persistir actualizar y

eliminar objetos en nuestra base de datos (obviamente lo que se modifican

son los registros de las tablas) y muchas otras cosas maacutes Para realizar una

consulta se utiliza el lenguaje JPQL (Java Persistence Query Language) que es

similar a SQL pero trabaja con objetos y sus propiedades He aquiacute un

ejemplo Query consulta = managercreateQuery(ldquoSELECT ccompanyName

FROM Customers crdquo)

Vemos que la consulta utiliza una sintaxis orientada a objetos Como la

propiedad companyName de Customers es de tipo String al ejecutar laconsulta nos daraacute como resultado una lista de objetos String La recuperamos

de la siguiente manera ListltStringgt resultados = consultagetResultList()

import javautilList

import javaxpersistenceEntityManager

import javaxpersistenceEntityManagerFactory

import javaxpersistencePersistence

import javaxpersistenceQuery

import orgjunitAfter

import orgjunitAfterClass

import orgjunitBefore

import orgjunitBeforeClass

import orgjunitTest

Test

public void probarConexion( )

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(NorthwindPU)

EntityManager manager = factorycreateEntityManager()

Query consulta = managercreateQuery(SELECT ccompanyName FROM

Customers c)

ListltStringgt listaClientes = consultagetResultList()

for (String cliente listaClientes)

Systemoutprintln(cliente)

managerclose()

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 28

PROGRAMACION JAVA

Pag 2

crear un nuevo proyecto tipo Aplicacioacuten de escritorio Java Luego

de darle un nombre especificamos que utilizaraacute el inteacuterprete de

oacuterdenes Aplicacioacuten de bases de datos para que cree la

funcionalidad baacutesica por nosotros

Seleccione la BD En la lista Conexioacuten con base de datos del

siguiente paso podemos elegir una conexioacuten o crear una nueva

Vamos a escoger la que acabamos de crear Inmediatamente se

listan las tablas disponibles de la cual vamos a elegir grupo Vera

como se listan los campos de la tabla para especificar cuales se

van a incluir

Todos en este

caso

Luego podemos

especificar las opciones

de detalle las cuales son

dos

Cuadros de texto Crea un objeto JTable en el que se muestran los

registros de la tabla grupo y una serie de campo de texto que

muestran los detalles de los registros por cada campo de la tabla

Tabla Crea un objeto JTable en el que se muestran los registros de la

tabla grupo y otra tabla que contiene los registros de una tabla de

detalle (generalmente correspondiente a una relacioacuten 1-n) para el

registro seleccionado en la tabla maestra (grupo)

Para hacerlo maacutes interesante vamos a escoger la uacuteltima opcioacuten y vamos a

seleccionar la tabla musicosgrupos en la lista para mostrar el detalle de los

grupos y sus muacutesicos

Hacemos clic en Finalizar El asistente generaraacute una aplicacioacuten

completamente funcional por nosotros haciendo uso del framework SwingApplication Framework y el API Beans Binding Si ejecutamos la aplicacioacuten

podremos ver los resultados esperados

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 38

PROGRAMACION JAVA

Pag 3

Con esta aplicacioacuten podemos hacer muchas cosas como insertar editar

actualizar y eliminar registros de las tablas de la base de datos (la claacutesica

aplicacioacuten CRUD) El asistente tambieacuten hace uso de JPA (Java Persistence

API) que es la especificacioacuten estaacutendar para el manejo de la persistencia en

Java Pero solo es una especificacioacuten La implementacioacuten concreta es

TopLink una libreriacutea de Oracle (tambieacuten existen otras como Hibernate e

iBatis)

Mapeo de Objetos Relacionales

Desde los inicios de la POO los programadores han tenido que lidiar con el

problema de representar los datos que se tienen en una base de datos en un

modelo de clases y objetos Esto lleva el teacutermino de Mapeo Objeto-

Relacional (ORM por sus siglas en ingleacutes) mecanismo por el cual se puede

solucionar este problema Java tiene una especificacioacuten llamada JPA (Java

Persistence API) que permite realizar este mapeo Pero solo es eso una

especificacioacuten que indica el mecanismo necesario para llevar a cabo el

mapeo Existen baacutesicamente cuatro implementaciones de JPA a saber

Hibernate TopLink OpenJPA y EclipseLink El elegir una u otra

implementacioacuten depende uacutenicamente del rendimiento pues gracias a JPA

podemos trabajar con cualquiera de estas implementaciones y cambiar entre

ellas de manera transparente para nosotros El mapeo objeto-relacional se

realiza a traveacutes de las llamadas clases entidad que son POJOrsquos que tienen

una estructura especial Un POJO (Plain Old Java Object) es un objeto de una

clase simple que no implementa raras interfaces y que puede ser escrita de

la manera convencional Los POJOrsquos fueron la respuesta a la tendencia que

habiacutea de obligar a los programadores a crear clases que implementaran

interfaces (como en EJB) JPA es todo un mundo en esta praacutectica crearemos

clases entidad a partir de la base de datos Northwind con mysql Pasos

1- Crear un proyecto de aplicacioacuten de escritorio ( Swing Application

Framework) Aquiacute vamos a crear las clases entidad y la unidad de persistencia

por nuestra cuenta

2- seleccione crear entidades a partir de BD Una vez que el asistente ha

creado nuestra aplicacioacuten creamos las clases entidad pulsando Ctrl + N y

eligiendo en la ventana resultante la categoriacutea Persistencia y en Tipo de

archivo Clases entidad a partir de base de datos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 48

PROGRAMACION JAVA

Pag 4

3- En el siguiente paso del asistente especificamos la conexioacuten de la que

recuperaraacute los datos Una vez hecho esto se listan las tablas existentes en la

base de datos Hacemos clic en Agregar todo para crear las clases entidad de

todas las tablas de nuestra base de datos La ventaja de esto es que el

asistente crea las clases entidad con toda la funcionalidad necesaria para

realizar el mapeo incluyendo las relaciones que pueden haber en nuestra

base de datos Si solo agregamos unas cuantas tablas y en un momento

posterior tenemos que mapear las demaacutes tendriacuteamos que hacer todo esto

nosotros a mano

4- El siguiente paso nos muestra las tablas de la base de datos y sus

correspondientes clases entidad permitiendo modificar sus nombres

Tambieacuten nos permite especificar un paquete para las clases que se van a

crear (lo cual es recomendable)

En la parte inferior nos dice que el proyecto no tiene una unidad de

persistencia Una unidad de persistencia contiene los paraacutemetros necesarios

para realizar la conexioacuten a la base de datos la clase del proveedor de

persistencia (que se encuentra en los jars de la implementacioacuten JPA que

elijamos) las clases entidad de nuestra aplicacioacuten y los paraacutemetros JDBC de

acceso a la base de datos La unidad de persistencia se almacena en un

archivo llamado persistencexml y es la responsable de que podamos

cambiar de implementacioacuten JPA e incluso de SGBD sin que toquemos el

coacutedigo de nuestra aplicacioacuten

5- Creamos la unidad de persistencia pulsando el botoacuten Crear unidad de

persistencia (obvio no) En la ventana resultante especificamos el nombre de

la unidad de persistencia y la biblioteca que vamos a utilizar Esa es otra

ventaja de crear las clases entidad a mano Utilizando el shell de base de

datos NetBeans trabaja por defecto con TopLink En este caso tenemos la

libertad de escoger nuestra implementacioacuten Hibernate para nosotros La

estrategia de generacioacuten de tablas se refiere a la poliacutetica utilizada para crear

nuevas tablas en nuestra base de datos Como no vamos a hacer esto lo

dejamos con Ninguno

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 58

PROGRAMACION JAVA

Pag 5

6- En el uacuteltimo paso tenemos opciones adicionales La uacutenica que vamos a

modificar es el tipo de coleccioacuten Para explicar porque tomemos un ejemplo

Existe una relacioacuten de uno a muchos entre los clientes y sus pedidos Un

cliente puede hacer muchos pedido pero cada pedido pertenece a un uacutenico

cliente Para realizar el mapeo en estas tablas JPA incluye en la clase Pedido

una referencia al objeto Cliente al que pertenece mientras que en la clase

Cliente agrega una lista de objetos Pedido Podemos especificar que esta lista

sea de tipo Collection List o Set Nosotros vamos a decirle a JPA que utilice

una referencia List

Y eso es todo El asistente se ocupa de crear las clases entidad capaces de

realizar el mapeo objeto-relacional en nuestra base de datos por nosotros

Pero esto no es suficiente En nuestra aplicacioacuten debemos crear el coacutedigo

que creara la unidad de persistencia y los objetos que permitiraacuten realizar

consultas y persistir objetos en nuestra base de datos

7- Agregar Driver Mysql

8- podemos crear un paquete de prueba Junit

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 68

PROGRAMACION JAVA

Pag 6

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(UnidadPersistencia)

EntityManager manager = factorycreateEntityManager()

El meacutetodo createEntityManagerFactory toma el nombre de la unidad de

persistencia la crea y devuelve un objeto EntityManagerFactory que esutilizado para crear objetos EntityManager Los objetos EntityManager

tienen meacutetodos que permiten realizar consultas persistir actualizar y

eliminar objetos en nuestra base de datos (obviamente lo que se modifican

son los registros de las tablas) y muchas otras cosas maacutes Para realizar una

consulta se utiliza el lenguaje JPQL (Java Persistence Query Language) que es

similar a SQL pero trabaja con objetos y sus propiedades He aquiacute un

ejemplo Query consulta = managercreateQuery(ldquoSELECT ccompanyName

FROM Customers crdquo)

Vemos que la consulta utiliza una sintaxis orientada a objetos Como la

propiedad companyName de Customers es de tipo String al ejecutar laconsulta nos daraacute como resultado una lista de objetos String La recuperamos

de la siguiente manera ListltStringgt resultados = consultagetResultList()

import javautilList

import javaxpersistenceEntityManager

import javaxpersistenceEntityManagerFactory

import javaxpersistencePersistence

import javaxpersistenceQuery

import orgjunitAfter

import orgjunitAfterClass

import orgjunitBefore

import orgjunitBeforeClass

import orgjunitTest

Test

public void probarConexion( )

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(NorthwindPU)

EntityManager manager = factorycreateEntityManager()

Query consulta = managercreateQuery(SELECT ccompanyName FROM

Customers c)

ListltStringgt listaClientes = consultagetResultList()

for (String cliente listaClientes)

Systemoutprintln(cliente)

managerclose()

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 38

PROGRAMACION JAVA

Pag 3

Con esta aplicacioacuten podemos hacer muchas cosas como insertar editar

actualizar y eliminar registros de las tablas de la base de datos (la claacutesica

aplicacioacuten CRUD) El asistente tambieacuten hace uso de JPA (Java Persistence

API) que es la especificacioacuten estaacutendar para el manejo de la persistencia en

Java Pero solo es una especificacioacuten La implementacioacuten concreta es

TopLink una libreriacutea de Oracle (tambieacuten existen otras como Hibernate e

iBatis)

Mapeo de Objetos Relacionales

Desde los inicios de la POO los programadores han tenido que lidiar con el

problema de representar los datos que se tienen en una base de datos en un

modelo de clases y objetos Esto lleva el teacutermino de Mapeo Objeto-

Relacional (ORM por sus siglas en ingleacutes) mecanismo por el cual se puede

solucionar este problema Java tiene una especificacioacuten llamada JPA (Java

Persistence API) que permite realizar este mapeo Pero solo es eso una

especificacioacuten que indica el mecanismo necesario para llevar a cabo el

mapeo Existen baacutesicamente cuatro implementaciones de JPA a saber

Hibernate TopLink OpenJPA y EclipseLink El elegir una u otra

implementacioacuten depende uacutenicamente del rendimiento pues gracias a JPA

podemos trabajar con cualquiera de estas implementaciones y cambiar entre

ellas de manera transparente para nosotros El mapeo objeto-relacional se

realiza a traveacutes de las llamadas clases entidad que son POJOrsquos que tienen

una estructura especial Un POJO (Plain Old Java Object) es un objeto de una

clase simple que no implementa raras interfaces y que puede ser escrita de

la manera convencional Los POJOrsquos fueron la respuesta a la tendencia que

habiacutea de obligar a los programadores a crear clases que implementaran

interfaces (como en EJB) JPA es todo un mundo en esta praacutectica crearemos

clases entidad a partir de la base de datos Northwind con mysql Pasos

1- Crear un proyecto de aplicacioacuten de escritorio ( Swing Application

Framework) Aquiacute vamos a crear las clases entidad y la unidad de persistencia

por nuestra cuenta

2- seleccione crear entidades a partir de BD Una vez que el asistente ha

creado nuestra aplicacioacuten creamos las clases entidad pulsando Ctrl + N y

eligiendo en la ventana resultante la categoriacutea Persistencia y en Tipo de

archivo Clases entidad a partir de base de datos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 48

PROGRAMACION JAVA

Pag 4

3- En el siguiente paso del asistente especificamos la conexioacuten de la que

recuperaraacute los datos Una vez hecho esto se listan las tablas existentes en la

base de datos Hacemos clic en Agregar todo para crear las clases entidad de

todas las tablas de nuestra base de datos La ventaja de esto es que el

asistente crea las clases entidad con toda la funcionalidad necesaria para

realizar el mapeo incluyendo las relaciones que pueden haber en nuestra

base de datos Si solo agregamos unas cuantas tablas y en un momento

posterior tenemos que mapear las demaacutes tendriacuteamos que hacer todo esto

nosotros a mano

4- El siguiente paso nos muestra las tablas de la base de datos y sus

correspondientes clases entidad permitiendo modificar sus nombres

Tambieacuten nos permite especificar un paquete para las clases que se van a

crear (lo cual es recomendable)

En la parte inferior nos dice que el proyecto no tiene una unidad de

persistencia Una unidad de persistencia contiene los paraacutemetros necesarios

para realizar la conexioacuten a la base de datos la clase del proveedor de

persistencia (que se encuentra en los jars de la implementacioacuten JPA que

elijamos) las clases entidad de nuestra aplicacioacuten y los paraacutemetros JDBC de

acceso a la base de datos La unidad de persistencia se almacena en un

archivo llamado persistencexml y es la responsable de que podamos

cambiar de implementacioacuten JPA e incluso de SGBD sin que toquemos el

coacutedigo de nuestra aplicacioacuten

5- Creamos la unidad de persistencia pulsando el botoacuten Crear unidad de

persistencia (obvio no) En la ventana resultante especificamos el nombre de

la unidad de persistencia y la biblioteca que vamos a utilizar Esa es otra

ventaja de crear las clases entidad a mano Utilizando el shell de base de

datos NetBeans trabaja por defecto con TopLink En este caso tenemos la

libertad de escoger nuestra implementacioacuten Hibernate para nosotros La

estrategia de generacioacuten de tablas se refiere a la poliacutetica utilizada para crear

nuevas tablas en nuestra base de datos Como no vamos a hacer esto lo

dejamos con Ninguno

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 58

PROGRAMACION JAVA

Pag 5

6- En el uacuteltimo paso tenemos opciones adicionales La uacutenica que vamos a

modificar es el tipo de coleccioacuten Para explicar porque tomemos un ejemplo

Existe una relacioacuten de uno a muchos entre los clientes y sus pedidos Un

cliente puede hacer muchos pedido pero cada pedido pertenece a un uacutenico

cliente Para realizar el mapeo en estas tablas JPA incluye en la clase Pedido

una referencia al objeto Cliente al que pertenece mientras que en la clase

Cliente agrega una lista de objetos Pedido Podemos especificar que esta lista

sea de tipo Collection List o Set Nosotros vamos a decirle a JPA que utilice

una referencia List

Y eso es todo El asistente se ocupa de crear las clases entidad capaces de

realizar el mapeo objeto-relacional en nuestra base de datos por nosotros

Pero esto no es suficiente En nuestra aplicacioacuten debemos crear el coacutedigo

que creara la unidad de persistencia y los objetos que permitiraacuten realizar

consultas y persistir objetos en nuestra base de datos

7- Agregar Driver Mysql

8- podemos crear un paquete de prueba Junit

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 68

PROGRAMACION JAVA

Pag 6

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(UnidadPersistencia)

EntityManager manager = factorycreateEntityManager()

El meacutetodo createEntityManagerFactory toma el nombre de la unidad de

persistencia la crea y devuelve un objeto EntityManagerFactory que esutilizado para crear objetos EntityManager Los objetos EntityManager

tienen meacutetodos que permiten realizar consultas persistir actualizar y

eliminar objetos en nuestra base de datos (obviamente lo que se modifican

son los registros de las tablas) y muchas otras cosas maacutes Para realizar una

consulta se utiliza el lenguaje JPQL (Java Persistence Query Language) que es

similar a SQL pero trabaja con objetos y sus propiedades He aquiacute un

ejemplo Query consulta = managercreateQuery(ldquoSELECT ccompanyName

FROM Customers crdquo)

Vemos que la consulta utiliza una sintaxis orientada a objetos Como la

propiedad companyName de Customers es de tipo String al ejecutar laconsulta nos daraacute como resultado una lista de objetos String La recuperamos

de la siguiente manera ListltStringgt resultados = consultagetResultList()

import javautilList

import javaxpersistenceEntityManager

import javaxpersistenceEntityManagerFactory

import javaxpersistencePersistence

import javaxpersistenceQuery

import orgjunitAfter

import orgjunitAfterClass

import orgjunitBefore

import orgjunitBeforeClass

import orgjunitTest

Test

public void probarConexion( )

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(NorthwindPU)

EntityManager manager = factorycreateEntityManager()

Query consulta = managercreateQuery(SELECT ccompanyName FROM

Customers c)

ListltStringgt listaClientes = consultagetResultList()

for (String cliente listaClientes)

Systemoutprintln(cliente)

managerclose()

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 48

PROGRAMACION JAVA

Pag 4

3- En el siguiente paso del asistente especificamos la conexioacuten de la que

recuperaraacute los datos Una vez hecho esto se listan las tablas existentes en la

base de datos Hacemos clic en Agregar todo para crear las clases entidad de

todas las tablas de nuestra base de datos La ventaja de esto es que el

asistente crea las clases entidad con toda la funcionalidad necesaria para

realizar el mapeo incluyendo las relaciones que pueden haber en nuestra

base de datos Si solo agregamos unas cuantas tablas y en un momento

posterior tenemos que mapear las demaacutes tendriacuteamos que hacer todo esto

nosotros a mano

4- El siguiente paso nos muestra las tablas de la base de datos y sus

correspondientes clases entidad permitiendo modificar sus nombres

Tambieacuten nos permite especificar un paquete para las clases que se van a

crear (lo cual es recomendable)

En la parte inferior nos dice que el proyecto no tiene una unidad de

persistencia Una unidad de persistencia contiene los paraacutemetros necesarios

para realizar la conexioacuten a la base de datos la clase del proveedor de

persistencia (que se encuentra en los jars de la implementacioacuten JPA que

elijamos) las clases entidad de nuestra aplicacioacuten y los paraacutemetros JDBC de

acceso a la base de datos La unidad de persistencia se almacena en un

archivo llamado persistencexml y es la responsable de que podamos

cambiar de implementacioacuten JPA e incluso de SGBD sin que toquemos el

coacutedigo de nuestra aplicacioacuten

5- Creamos la unidad de persistencia pulsando el botoacuten Crear unidad de

persistencia (obvio no) En la ventana resultante especificamos el nombre de

la unidad de persistencia y la biblioteca que vamos a utilizar Esa es otra

ventaja de crear las clases entidad a mano Utilizando el shell de base de

datos NetBeans trabaja por defecto con TopLink En este caso tenemos la

libertad de escoger nuestra implementacioacuten Hibernate para nosotros La

estrategia de generacioacuten de tablas se refiere a la poliacutetica utilizada para crear

nuevas tablas en nuestra base de datos Como no vamos a hacer esto lo

dejamos con Ninguno

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 58

PROGRAMACION JAVA

Pag 5

6- En el uacuteltimo paso tenemos opciones adicionales La uacutenica que vamos a

modificar es el tipo de coleccioacuten Para explicar porque tomemos un ejemplo

Existe una relacioacuten de uno a muchos entre los clientes y sus pedidos Un

cliente puede hacer muchos pedido pero cada pedido pertenece a un uacutenico

cliente Para realizar el mapeo en estas tablas JPA incluye en la clase Pedido

una referencia al objeto Cliente al que pertenece mientras que en la clase

Cliente agrega una lista de objetos Pedido Podemos especificar que esta lista

sea de tipo Collection List o Set Nosotros vamos a decirle a JPA que utilice

una referencia List

Y eso es todo El asistente se ocupa de crear las clases entidad capaces de

realizar el mapeo objeto-relacional en nuestra base de datos por nosotros

Pero esto no es suficiente En nuestra aplicacioacuten debemos crear el coacutedigo

que creara la unidad de persistencia y los objetos que permitiraacuten realizar

consultas y persistir objetos en nuestra base de datos

7- Agregar Driver Mysql

8- podemos crear un paquete de prueba Junit

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 68

PROGRAMACION JAVA

Pag 6

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(UnidadPersistencia)

EntityManager manager = factorycreateEntityManager()

El meacutetodo createEntityManagerFactory toma el nombre de la unidad de

persistencia la crea y devuelve un objeto EntityManagerFactory que esutilizado para crear objetos EntityManager Los objetos EntityManager

tienen meacutetodos que permiten realizar consultas persistir actualizar y

eliminar objetos en nuestra base de datos (obviamente lo que se modifican

son los registros de las tablas) y muchas otras cosas maacutes Para realizar una

consulta se utiliza el lenguaje JPQL (Java Persistence Query Language) que es

similar a SQL pero trabaja con objetos y sus propiedades He aquiacute un

ejemplo Query consulta = managercreateQuery(ldquoSELECT ccompanyName

FROM Customers crdquo)

Vemos que la consulta utiliza una sintaxis orientada a objetos Como la

propiedad companyName de Customers es de tipo String al ejecutar laconsulta nos daraacute como resultado una lista de objetos String La recuperamos

de la siguiente manera ListltStringgt resultados = consultagetResultList()

import javautilList

import javaxpersistenceEntityManager

import javaxpersistenceEntityManagerFactory

import javaxpersistencePersistence

import javaxpersistenceQuery

import orgjunitAfter

import orgjunitAfterClass

import orgjunitBefore

import orgjunitBeforeClass

import orgjunitTest

Test

public void probarConexion( )

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(NorthwindPU)

EntityManager manager = factorycreateEntityManager()

Query consulta = managercreateQuery(SELECT ccompanyName FROM

Customers c)

ListltStringgt listaClientes = consultagetResultList()

for (String cliente listaClientes)

Systemoutprintln(cliente)

managerclose()

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 58

PROGRAMACION JAVA

Pag 5

6- En el uacuteltimo paso tenemos opciones adicionales La uacutenica que vamos a

modificar es el tipo de coleccioacuten Para explicar porque tomemos un ejemplo

Existe una relacioacuten de uno a muchos entre los clientes y sus pedidos Un

cliente puede hacer muchos pedido pero cada pedido pertenece a un uacutenico

cliente Para realizar el mapeo en estas tablas JPA incluye en la clase Pedido

una referencia al objeto Cliente al que pertenece mientras que en la clase

Cliente agrega una lista de objetos Pedido Podemos especificar que esta lista

sea de tipo Collection List o Set Nosotros vamos a decirle a JPA que utilice

una referencia List

Y eso es todo El asistente se ocupa de crear las clases entidad capaces de

realizar el mapeo objeto-relacional en nuestra base de datos por nosotros

Pero esto no es suficiente En nuestra aplicacioacuten debemos crear el coacutedigo

que creara la unidad de persistencia y los objetos que permitiraacuten realizar

consultas y persistir objetos en nuestra base de datos

7- Agregar Driver Mysql

8- podemos crear un paquete de prueba Junit

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 68

PROGRAMACION JAVA

Pag 6

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(UnidadPersistencia)

EntityManager manager = factorycreateEntityManager()

El meacutetodo createEntityManagerFactory toma el nombre de la unidad de

persistencia la crea y devuelve un objeto EntityManagerFactory que esutilizado para crear objetos EntityManager Los objetos EntityManager

tienen meacutetodos que permiten realizar consultas persistir actualizar y

eliminar objetos en nuestra base de datos (obviamente lo que se modifican

son los registros de las tablas) y muchas otras cosas maacutes Para realizar una

consulta se utiliza el lenguaje JPQL (Java Persistence Query Language) que es

similar a SQL pero trabaja con objetos y sus propiedades He aquiacute un

ejemplo Query consulta = managercreateQuery(ldquoSELECT ccompanyName

FROM Customers crdquo)

Vemos que la consulta utiliza una sintaxis orientada a objetos Como la

propiedad companyName de Customers es de tipo String al ejecutar laconsulta nos daraacute como resultado una lista de objetos String La recuperamos

de la siguiente manera ListltStringgt resultados = consultagetResultList()

import javautilList

import javaxpersistenceEntityManager

import javaxpersistenceEntityManagerFactory

import javaxpersistencePersistence

import javaxpersistenceQuery

import orgjunitAfter

import orgjunitAfterClass

import orgjunitBefore

import orgjunitBeforeClass

import orgjunitTest

Test

public void probarConexion( )

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(NorthwindPU)

EntityManager manager = factorycreateEntityManager()

Query consulta = managercreateQuery(SELECT ccompanyName FROM

Customers c)

ListltStringgt listaClientes = consultagetResultList()

for (String cliente listaClientes)

Systemoutprintln(cliente)

managerclose()

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 68

PROGRAMACION JAVA

Pag 6

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(UnidadPersistencia)

EntityManager manager = factorycreateEntityManager()

El meacutetodo createEntityManagerFactory toma el nombre de la unidad de

persistencia la crea y devuelve un objeto EntityManagerFactory que esutilizado para crear objetos EntityManager Los objetos EntityManager

tienen meacutetodos que permiten realizar consultas persistir actualizar y

eliminar objetos en nuestra base de datos (obviamente lo que se modifican

son los registros de las tablas) y muchas otras cosas maacutes Para realizar una

consulta se utiliza el lenguaje JPQL (Java Persistence Query Language) que es

similar a SQL pero trabaja con objetos y sus propiedades He aquiacute un

ejemplo Query consulta = managercreateQuery(ldquoSELECT ccompanyName

FROM Customers crdquo)

Vemos que la consulta utiliza una sintaxis orientada a objetos Como la

propiedad companyName de Customers es de tipo String al ejecutar laconsulta nos daraacute como resultado una lista de objetos String La recuperamos

de la siguiente manera ListltStringgt resultados = consultagetResultList()

import javautilList

import javaxpersistenceEntityManager

import javaxpersistenceEntityManagerFactory

import javaxpersistencePersistence

import javaxpersistenceQuery

import orgjunitAfter

import orgjunitAfterClass

import orgjunitBefore

import orgjunitBeforeClass

import orgjunitTest

Test

public void probarConexion( )

EntityManagerFactory factory =

PersistencecreateEntityManagerFactory(NorthwindPU)

EntityManager manager = factorycreateEntityManager()

Query consulta = managercreateQuery(SELECT ccompanyName FROM

Customers c)

ListltStringgt listaClientes = consultagetResultList()

for (String cliente listaClientes)

Systemoutprintln(cliente)

managerclose()

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 78

PROGRAMACION JAVA

Pag 7

JTABLELas tablas nos permiten tener tabulados de informacioacuten que se vean

organizados y que sean de utilidad para los clientes Las tablas son muy

utilizadas en programas similares a excel donde se deben tener rejillas de

informacioacuten o en programas de administracioacuten donde pueden haber varios

productos que tienen un conjunto de caracteriacutesticas u otras aplicaciones

Para agregar una tabla en NetBeans selecciona el icono de tabla de la paleta

(que regularmente se encuentra a la derecha) Una vez que lo hayas

seleccionado agreacutegalo a la ventana principal El JTable utiliza un DataModel

para representar sus datos de la misma manera que varios otros

componentes como JList Creando un modelo estaacutetico El modelo nos

permite indicarle a la tabla queacute informacioacuten va a contener Si soacutelo queremos

presentar informacioacuten estaacutetica (que nunca cambia) al cliente entonces

podemos usar un modelo estaacutetico para hacer esto vamos a hacer click en el

atributo model que se encuentra en las propiedades Una vez que hicimos

click apareceraacute una pantalla en la que podemos editar coacutemo queremos que

se vea la tabla En esta pantalla podemos seleccionar el nuacutemero de

columnas el nombre de las columnas e incluso podemos agregar algunos

datos

En la pantalla anterior podemos ver coacutemo manejar el nuacutemero de columnas

(con los botones de Insert Delete o con los botones de + -) y tambieacutenpodemos ver una rejilla donde podemos poner el tiacutetulo que aparece en la

columna el tipo de dato que va a guardar y si se puede editar o no Con esto

podemos crear una tabla estaacutetica que siempre va a iniciar con los mismos

datos

Creando un modelo dinaacutemico

La mayoriacutea de las veces un usuario no va a querer una tabla estaacutetica

(en la que aunque pueda editar los valores no se muestren los valores

que se habiacutean guardado previamente) Es por esto que es necesario

crear un modelo dinaacutemico Para poder crear un modelo dinaacutemico es

necesario implementar la interfaz TableModel que nos obliga a

sobrecargar un gran nuacutemero de meacutetodos

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla

5112018 GUIacuteA DE PRAacuteCTICABD_Mysql - slidepdfcom

httpslidepdfcomreaderfullguia-de-practicabdmysql 88

PROGRAMACION JAVA

Pag 8

getColumnClass() Es un meacutetodo que nos permite saber queacute clase

tiene guardada cada columna esto es para que sean maacutes

faacuteciles de pintar para java

getColumnCount() Es un meacutetodo que nos permite saber cuaacutentas

columnas tiene la tablagetColumnName() Es un meacutetodo que nos permite saber el

encabezado de la tabla para una cierta columna

getRowCount() Es un meacutetodo que nos permite saber cuaacutentas

filas tiene la tabla

getValueAt() Es un meacutetodo que nos devuelve el valor que se

encuentra en la posicioacuten pasada como paraacutemetro

isCellEditable() Es un meacutetodo que nos devuelve verdadero si la

celda puede ser modificada o falso en caso contrario

setValueAt() Es un meacutetodo que nos permite cambiar el valor que

se encuentra en la posicioacuten pasada como paraacutemetro mediantecoacutedigo (el usuario puede cambiar los datos dependiendo del

meacutetodo isCellEditable())

getValueAt() Es un meacutetodo que nos devuelve el valor que estaacute

guardado en la celda pasada como paraacutemetro este valor va a

ser de la clase que indica getColumnClass() para esa columna

Ademaacutes de todos los meacutetodos anteriores la interfaz TableModel tiene

un par de meacutetodos para manejar eventos (como por ejemplo que el

usuario haga click que edite una celda) Estos meacutetodos involucran

agregar coacutedigo a nuestra clase que cuando modifique alguacuten valor o

que agregue nuevos datos tenga que disparar eventos Este coacutedigo

aunque no es muy complicado no tendriacutea ninguna utilidad (a menos

que vayamos a escribir una manera de deshacer acciones o algo

similar) sin embargo como tenemos que implementar TableModel

tendriacuteamos que implementarlos Por suerte Java cuenta con un

modelo ya implementado (el que utilizan todas las tablas al ser

creadas) que podemos utilizar para no implementar estos meacutetodos

entonces en lugar de implmentar la interfaz TableModel vamos a

extender la clase DefaultTableModel que ya implementa la interfaz

anterior

Implementando el modelo dinaacutemico

Normalmente las tablas soacutelo crecen en una direccioacuten (hacia abajo

aumentando el nuacutemero de filas) Por ejemplo en el reporte de

empleados es probable que contratemos o despidamos empleados

por lo que vamos a tener que agregar maacutes filas sin embargo seriacutea raro

que apareciera un nuevo atributo que quisieacuteramos manejar del

empleado (y maacutes raro auacuten que el cliente pudiera modificar el

programa de tal manera que lo agregue) Entonces como la mayoriacutea

de las tablas crecen en una sola dimensioacuten(soacutelo aumenta el nuacutemero de

filas) vamos a implementar un modelo en el que utilizando un

ArrayList que contiene arreglos vamos a manejar el crecimiento de la

tabla (el ArrayList puede crecer pero los arreglos no)

Tarea

Implementar un Jtable dinaacutemico

Implementar un Jtable que permita editar insertar y borrar

Datos de una tabla