Sie sind auf Seite 1von 29

UNIVERSIDAD TCNICA DEL NORTE

Practica JPA
Deber de programacin 5
401211214

Fabricio Huera Cristian Vsquez

Creacin de la base de datos Gestin Empleados


Ingresamos a PowerDisigner para crear la base de datos y escogemos DBMS que es el de MySQL 5.

Escogemos MySQL 5.0 y hacemos clic en OK

Tenemos la interfaz donde podemos agregar tablas mediante la paleta de herramientas.

Agregamos dos tablas para crear la base de datos gestin.

Hacemos doble clic en la tabla que vamos a editar y llenamos los campos.

Despus de crear las 2 tablas las relacionamos.

Una vez ya creadas las tablas vamos a crear el script para crear la base de datos.

Hacemos clic para generar el script

Aceptar para generar el script

Lo siguiente es ir a MySQL Workbench para crear la base de datos y generar el script para que nos cree las tablas.

Hacemos clic para poder pegar el script y ejecutar para que se cree las tablas

Creacin del proyecto en NetBeans


Ingresamos en NetBeans y creamos un nuevo proyecto.

Cuando ya esta creado el proyecto procedemos a crear la conexin de NetBeans con MySQL de la siguiente manera, en el proyecto seleccionamos biblioteca y hacemos clic derecho y escogemos la opcin agregar biblioteca

Agregamos biblioteca para la conexin

En Aadir biblioteca escogemos Driver MySQL JDBC

Driver para realizar la conexin

Una vez hecho esto vamos a crear las entidades a partir de una base de datos.

Clase entidad

Cuando hacemos clic en clase entidad nos aparece la ventana donde vamos a escoger los datos

Si no existe la conexin para MySQL escogemos nueva conexin

Seleccionamos la conexin MySQL

Si escogemos nueva conexin tenemos que escoger driver de MySQL como muestra la imagen

Escogemos MySQL (connector/J driver) y hacemos clic en siguiente

Aqu vamos a poner el puerto, la base de datos, la clave y el usuario como muestra la siguiente imagen. Ponemos el puerto donde utiliza MySQL en mi caso es 3307 pero el por defecto es 3306

Ponemos la base de datos que creamos, tambin el usuario y la clave Hacemos clic en probar conexin y vemos que se realiza con xito

Aqu ya nos aparecen las tablas donde las seleccionamos las 2 tablas.

Agregamos las tablas y hacemos clic en siguiente

Ponemos el nombre modelo.entidades

En la siguiente ventana escogemos tipo coleccin java.util.List y hacemos clic en terminar

Aqu escogemos java.util.List

Ahora vamos a crear el dao con lo que vamos al proyecto y hacemos clic derecho en el proyecto y escogemos Clases Controladoras JPA

Nos aparece la siguiente ventana donde seleccionamos las entidades que vamos a controlar y damos en siguiente

Agregamos las entidades

Cambiamos el nombre del paquete a modelo.dao y damos en terminar.

Creacin de la interfaz grafica para utilizar lo antes creado


Vamos a crear un formulario jFrame para lo cual vamos al proyecto hacemos clic derecho y nuevo formulario jFrame y le ponemos de nombre gestionEmpleados y en el nombre del paquete le ponemos deberprogramacion

En el formulario ponemos todo lo que vemos en la imgen para poder ingresar, actualizar, eliminar y buscar empleados. En la parte de la fecha nos descargamos jar JCalendar y lo agregamos a NetBeans para poder utilizar las fechas, en la pestaa empleados tenemos la siguiente interfaz.

Para la fecha utilizamos el jCalendar

En la pestaa lista empleados tenemos un jTable donde vamos a listar los empleados y el botn eliminar para liminar los empleados.

En la pestaa actualizar tenemos para buscar los empleados y para actualizar los datos como mustrala imagen.

En la pestaa profesin tenemos el listado de la profesin y donde podemos agregar ms profesiones.

Cdigo del programa


Vamos a ver la utilizacin del cdigo de cada uno de los botones. Primero importamos lagunas libreras para poder utilizar el cdigo ,aqu tenemos las libreras que importamos
import java.awt.Toolkit; import java.text.ParseException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import modelo.entidades.Empleados; import modelo.entidades.Titulo; import modelo.dao.TituloJpaController; import modelo.dao.EmpleadosJpaController; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.Query; import javax.swing.JOptionPane; import javax.swing.JTextField; import modelo.dao.exceptions.IllegalOrphanException; import modelo.dao.exceptions.NonexistentEntityException;

Declaramos algunas variables para poder utilizar la persistencia.


EntityManagerFactory emf = Persistence.createEntityManagerFactory("DeberPrograPU"); TituloJpaController dao = new TituloJpaController(emf); int con = 0; EmpleadosJpaController dao1;

int id=0; int idtitulo=0;

/** * Creates new form GestionEmplados */

En el constructor declaramos un Lista de tipo Titulo para poder llenar un jComboBox para poder escoger la profesin del empleado.
public GestionEmplados() { initComponents(); List<Titulo> lista = dao.findTituloEntities(); for (Titulo t : lista) { cbxTitulo.addItem(t.getProfesion()); cbxTitulo1.addItem(t.getProfesion()); } }

El siguiente es el cdigo del botn guardar donde nos ayuda a guardar los datos de los jTextField declarando un Empleado y con la utilizacin del dao1 podemos guardar en la base de datos mediante el codigo dao1.create ah nos ingresa todo los datos recibidos del formulario como lo muestra la figura.
private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) { try { dao1 = new EmpleadosJpaController(emf); Empleados nuevoEmp = new Empleados(); List<Titulo> lista = dao.findTituloEntities(); for (Titulo t : lista) { if (t.getProfesion() == cbxTitulo.getSelectedItem()) {

nuevoEmp.setIdTitulo(t); } } nuevoEmp.setCedula(jtfCedula.getText()); nuevoEmp.setNombres(jtfNombres.getText()); nuevoEmp.setApellidos(jtfApellidos.getText()); nuevoEmp.setFechaIngreso(jCFechaIngreso.getDate()); nuevoEmp.setIdEmpleado(con); nuevoEmp.setCargo(jtfCargo.getText()); nuevoEmp.setFechaNacimiento(jCFechaNacimiento.getDate()); nuevoEmp.setSueldo(Integer.parseInt(jtfSueldo.getText())); dao1.create(nuevoEmp); con+=1; jtfCedula.setText(null); jtfNombres.setText(null); jtfApellidos.setText(null); jtfCargo.setText(null); jtfSueldo.setText(null); } catch (Exception ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); } }

En la imagen vemos como llenar los datos de un empleado y mediante el botn guardar y con el cdigo que lleva dentro los datos se guardan en la base de datos

Al hacer clic se guardan los datos

Ahora vamos ver el cdigo para poder presentar los datos en un jTable y poder eliminar los datos mediante la tabla para lo cual utilizamos el siguiente cdigo. Primero para poder mostrar los datos en la tabla necesitamos crear una clase que nos ayude. El cdigo necesario para la clase ModeloDeTabla es el siguiente.
import java.util.List; import javax.swing.table.AbstractTableModel; public class ModeloDeTabla extends AbstractTableModel{ private String[] titCol; private Object[][] data; public ModeloDeTabla(List list,String... titulos){ int ctasFils=list.size(); int ctasCols;

if(ctasFils>0){ ctasCols=((Object[]) list.get(0)).length; data =new Object[ctasFils][ctasCols]; } else{ ctasCols=titulos.length; data=new Object[0][0]; } if(titulos.length!=ctasCols){ titCol=new String[ctasCols]; for(int col=0;col<ctasCols;col++){ titCol[col]="Columna "+ (col +1); } } else{ titCol=titulos; } for(int fil=0;fil<ctasFils;++fil){ Object[] o=(Object[]) list.get(fil); for(int col=0;col<ctasCols;col++){ data[fil][col]=o[col]; } } }

@Override public String getColumnName(int col) { return titCol[col]; } @Override public int getRowCount() { return data.length; } @Override public int getColumnCount() { return titCol.length; } @Override public Object getValueAt(int row, int col) { return data[row][col]; } @Override public void setValueAt(Object value,int row,int col) { data[row][col]=value; fireTableCellUpdated(row, col); } @Override public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); }

@Override public boolean isCellEditable(int row,int col) { return false; } }

En el evento stateChanged del jTabbedPane ponemos el cdigo siguiente para cuando se cambie de pestaa se actualice los datos de la tabla esto nos sirve para cuando ingresamos un dato y poder ver reflejado en la tabla.
private void jTabbedPane3StateChanged(javax.swing.event.ChangeEvent evt) { EntityManager em = emf.createEntityManager(); String sql = "SELECT e.id_empleado, e.CEDULA, e.NOMBRES, e.APELLIDOS, e.FECHA_NACIMIENTO,t.PROFESION, e.CARGO,e.FECHA_INGRESO,e.SUELDO FROM empleados e, titulo t WHERE e.ID_TITULO = t.ID_TITULO "; Query query = em.createNativeQuery(sql.toString()); List list = query.getResultList(); jtbListado.setModel(new ModeloDeTabla(list, "Id", "Cdula", "Nombre", "Apellido", "Fecha Nacimiento", "Profesin", "Cargo", "Fecha Ingreso", "Sueldo")); con = list.size() + 1; String sql2="SELECT id_titulo,profesion FROM TITULO"; Query query2=em.createNativeQuery(sql2.toString()); List lisTitulo=query2.getResultList(); jtbTitulo.setModel(new ModeloDeTabla(lisTitulo,"Id","Profesin")); idtitulo=lisTitulo.size(); }

En la siguiente imagen podemos observar la utilizacin del cdigo anterior al ver que los datos estn en la tabla.

Elimina empleados

Para poder eliminar un empleado de la base de datos utilizamos el siguiente cdigo ayudndonos de la tabla, para poder eliminarlo primero seleccionamos el id del empleado y luego hacemos clic en eliminar y automticamente se elimina el dato.

Primero seleccionamos la fila del empleado y luego hacemos clic en eliminar para eliminarlo Para logra eliminar el dato nos ayudamos del siguiente cdigo que se encuentra en el botn eliminar Empleado
private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) { EmpleadosJpaController cjc = new EmpleadosJpaController(emf); int[] filaseleccionada = jtbListado.getSelectedRows();

if (filaseleccionada.length > 0) { try { for (int i = 0; i < filaseleccionada.length; i++) { Integer idEmpleado = (Integer) jtbListado.getValueAt(filaseleccionada[i], 0);

Mediante el cdigo destroy eliminamos al empleado


cjc.destroy(idEmpleado); } } catch (NonexistentEntityException ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); } } else { JOptionPane.showMessageDialog(null, "Seleccione Fila"); }

El siguiente cdigo nos ayuda a cargar la tabla sin el dato eliminado.


EntityManager em = emf.createEntityManager(); String sql = "SELECT e.id_empleado, e.CEDULA, e.NOMBRES, e.APELLIDOS, e.FECHA_NACIMIENTO,t.PROFESION, e.CARGO,e.FECHA_INGRESO,e.SUELDO FROM empleados e, titulo t WHERE e.ID_TITULO = t.ID_TITULO "; Query query = em.createNativeQuery(sql.toString()); List list = query.getResultList(); jtbListado.setModel(new ModeloDeTabla(list, "Id", "Cdula", "Nombre", "Apellido", "Fecha Nacimiento", "Profesin", "Cargo", "Fecha Ingreso", "Sueldo")); con = list.size() + 1; List<Titulo> lista = dao.findTituloEntities(); for (Titulo t : lista) { cbxTitulo.addItem(t.getProfesion()); } }

Para poder buscar un dato y actualizarlo primero buscamos mediante la cdula y hacemos clic en botn buscar y los datos se llenaran automticamente y ah podemos editarlos y poder guardarlos como muestra la figura.

Al poner un numero de cedula de un empleado y hacer clic en buscar nos aparecen los datos del empleado que vamos a editar

Para realizar la bsqueda y llenar los datos del empleado en el formulario tenemos el siguiente cdigo que esta en el botn Buscar.
private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) { Empleados emp = new Empleados(); boolean bandera = false; dao1 = new EmpleadosJpaController(emf); List<Empleados> lisempl = dao1.findEmpleadosEntities(); if (!"".equals(jtfCedula1.getText())) { for (Empleados e : lisempl) { if (e.getCedula().toString().equals(jtfCedula1.getText())) { jtfNombres1.setText(e.getNombres()); jtfApellidos1.setText(e.getApellidos());

jtfCargo1.setText(e.getCargo()); jtfSueldo1.setText(e.getSueldo().toString()); jCFechaNacimiento1.setDate(e.getFechaNacimiento()); jCFechaIngreso1.setDate(e.getFechaIngreso()); id=e.getIdEmpleado(); bandera = true; } } if (bandera == false) { JOptionPane.showMessageDialog(null, "No hay datos para la cdula"); } } else { JOptionPane.showMessageDialog(null, "Ingrese la cdula para buscar"); } }

Para actualizar ponemos el cdigo en el botn actualizar.


private void btnActualizarActionPerformed(java.awt.event.ActionEvent evt) { try { dao1 = new EmpleadosJpaController(emf); Empleados nuevoEmp = new Empleados(); List<Titulo> lista = dao.findTituloEntities(); for (Titulo t : lista) { if (t.getProfesion() == cbxTitulo1.getSelectedItem()) { nuevoEmp.setIdTitulo(t); } }

nuevoEmp.setCedula(jtfCedula1.getText()); nuevoEmp.setNombres(jtfNombres1.getText()); nuevoEmp.setApellidos(jtfApellidos1.getText()); nuevoEmp.setFechaIngreso(jCFechaIngreso1.getDate()); nuevoEmp.setIdEmpleado(id); nuevoEmp.setCargo(jtfCargo1.getText()); nuevoEmp.setFechaNacimiento(jCFechaNacimiento1.getDate()); nuevoEmp.setSueldo(Integer.parseInt(jtfSueldo1.getText()));

Para actualizar utilizamos edit.


dao1.edit(nuevoEmp); jtfCedula1.setText(""); jtfNombres1.setText(""); jtfApellidos1.setText(""); jtfCargo1.setText(""); jtfSueldo1.setText(""); } catch (Exception ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); } }

En la pestaa profesin tenemos casi si miliar al de los empleados aqu podemos agregar mas profesiones y tambin podemos eliminar los datos para lo que tenemos la siguiente interfaz

Tenemos el botn eliminar pero para poder liminar un dato primero seleccionamos la fila que vamos a eliminar. Cdigo del Botn para eliminar una profesin
private void btnEliminarTituloActionPerformed(java.awt.event.ActionEvent evt) { TituloJpaController cjc = new TituloJpaController(emf); int[] filaseleccionada = jtbTitulo.getSelectedRows(); if (filaseleccionada.length > 0) { try { for (int i = 0; i < filaseleccionada.length; i++) { Integer idTitulo = (Integer) jtbTitulo.getValueAt(filaseleccionada[i], 0); cjc.destroy(idTitulo); } } catch (NonexistentEntityException ex) {

JOptionPane.showMessageDialog(null, ex.getMessage()); } } else { JOptionPane.showMessageDialog(null, "Seleccione Fila"); } EntityManager em = emf.createEntityManager(); String sql2="SELECT id_titulo,profesion FROM TITULO"; Query query2=em.createNativeQuery(sql2.toString()); List lisTitulo=query2.getResultList(); jtbTitulo.setModel(new ModeloDeTabla(lisTitulo,"Id","Profesin")); }

Para ingresar utilizamos el cdigo en el botn guardar.


private void btnGuardarTituloActionPerformed(java.awt.event.ActionEvent evt) { try { TituloJpaController titulodao=new TituloJpaController(emf); idtitulo+=1; Titulo nuevoTit = new Titulo(); nuevoTit.setProfesion(jtfTitulo.getText()); nuevoTit.setIdTitulo(idtitulo); titulodao.create(nuevoTit); con+=1; jtfCedula.setText(null); jtfNombres.setText(null); jtfApellidos.setText(null); jtfCargo.setText(null); jtfSueldo.setText(null);

} catch (Exception ex) { JOptionPane.showMessageDialog(null, ex.getMessage()); } EntityManager em = emf.createEntityManager(); String sql2="SELECT id_titulo,profesion FROM TITULO"; Query query2=em.createNativeQuery(sql2.toString()); List lisTitulo=query2.getResultList(); jtbTitulo.setModel(new ModeloDeTabla(lisTitulo,"Id","Profesin")); jtfTitulo.setText(""); }

Das könnte Ihnen auch gefallen