Mi problema es el siguiente resulta que no logro refrescar el jtable para que los datos se actualicen ahí en cierta forma si lo logre cuando hago mis metodos de CRUD(create, actualizar, leer, eliminar) ahi si se actualiza la tabla(cabe recalcar que lo que acostumbro para refrescar es el comando setvisible para el CRUD) pero cuando trata de un procedimiento almacenado no lo consigo. El programa en si no arroja ningun error y el procedimiento se ejecuta bien en mi base de datos pero no se actualiza el jtable como cuando hacia mi CRUD. Ya intente varias formas una de ellas es limpiar el jtable y volverlo a cargar con un boton de refresh que vuelva a cargar el jtable pero sigo con el problema.
Mi código es el siguiente. Este es el codigo de mi procedimiento almacenado
/// Actualizar articulos (procedimiento almacenado EntityManagerFactory emf; emf = Persistence.createEntityManagerFactory("ABARROTESPU"); EntityManager em = emf.createEntityManager(); try{ em.getTransaction().begin(); //Creacion de procedimiento StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("ACTCLIE"); //introduccion de parametros de tipo entrada storedProcedure.registerStoredProcedureParameter("p_id_cliente", Integer.class, ParameterMode.IN); storedProcedure.registerStoredProcedureParameter("p_nombre", String.class, ParameterMode.IN); storedProcedure.registerStoredProcedureParameter("p_direccion", String.class, ParameterMode.IN); storedProcedure.registerStoredProcedureParameter("p_tel", Integer.class, ParameterMode.IN); //salida de infro de lo que se esta recabando String id1 = JOptionPane.showInputDialog("introduce id"); String nombre= JOptionPane.showInputDialog("Intruduce nombre"); String direc = JOptionPane.showInputDialog("Introduce direccion"); String tel = JOptionPane.showInputDialog("Introduce telefono"); int id2= Integer.parseInt(id1); int tel2= Integer.parseInt(tel); storedProcedure.setParameter("p_id_cliente", id2); storedProcedure.setParameter("p_nombre", nombre); storedProcedure.setParameter("p_direccion", direc); storedProcedure.setParameter("p_tel", tel2); JOptionPane.showMessageDialog(null, "Ingreso con exito"+ JOptionPane.INFORMATION_MESSAGE); storedProcedure.execute(); // //igualar parametros a variable // Integer id = (Integer) storedProcedure.getParameterValue("xidArticulos"); // Integer canti = (Integer) storedProcedure.getParameterValue("xcantidad"); // // //Realizar impresion de resultado // System.out.println("El id " + id); // System.out.println("Cantidad es de: " + canti); this.Clear_Table1(); em.getTransaction().commit(); em.close(); } catch(Exception e){ System.out.println("Error"); }
Este es el codigo de vaciado de jtable, de llenado y de creacion.
public static DefaultTableModel modelo4; private void CrearModelo5() { //Formato de tabla cliente try { modelo4 = (new DefaultTableModel( null, new String[]{ "ID Cliente", "Nombre", "Direccion","Telefono"} ) { Class[] types = new Class[]{ java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class }; boolean[] canEdit = new boolean[]{ false, false, false, false }; @Override public Class getColumnClass(int columnIndex) { return types[columnIndex]; } @Override public boolean isCellEditable(int rowIndex, int colIndex) { return canEdit[colIndex]; } }); jTable1.setModel(modelo4); modelo4.fireTableDataChanged(); } catch (Exception e) { JOptionPane.showMessageDialog(null, e.toString() + "error2"); } } private void Carga(){ //Cargar datos en la tabla cliente try { Object a[]= null; List <Cliente> listP = cClie.findClienteEntities(); for (int i = 0; i < listP.size(); i++) { modelo4.addRow(a); modelo4.setValueAt(listP.get(i).getIdCliente(), i, 0); modelo4.setValueAt(listP.get(i).getNombre(), i, 1); modelo4.setValueAt(listP.get(i).getDireccion(), i, 2); modelo4.setValueAt(listP.get(i).getTelefono(), i, 3); } } catch (Exception e) { System.out.println("no hay informacion"); } }
Codigo de limpia jtable
private void Clear_Table1() { // Limpiar rows jtable for (int i = 0; i < jTable1.getRowCount(); i++) { modelo4.removeRow(i); i -= 1; } }
Cabe recalcar que estoy usando la libreria de EclipseLink, mi gestor de base de datos es oracle 11g