Beruflich Dokumente
Kultur Dokumente
Practica JPA
Deber de programacin 5
401211214
Hacemos doble clic en la tabla que vamos a editar y llenamos los campos.
Una vez ya creadas las tablas vamos a crear el script para crear la base de datos.
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
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
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 escogemos nueva conexin tenemos que escoger driver de MySQL como muestra la imagen
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.
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
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.
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 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
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(); }
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);
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"); } }
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")); }
} 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(""); }