Foros del Web » Programación para mayores de 30 ;) » Java »

Problema al Actualizar Tabla en AbstractTableModel

Estas en el tema de Problema al Actualizar Tabla en AbstractTableModel en el foro de Java en Foros del Web. Saludos.... Tengo un problema y acudo ante los q saben mas de esto. No soy tan experto en java, estoy aprendiendo y tengo un problema ...
  #1 (permalink)  
Antiguo 26/01/2013, 10:26
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años, 8 meses
Puntos: 0
Problema al Actualizar Tabla en AbstractTableModel

Saludos....
Tengo un problema y acudo ante los q saben mas de esto.
No soy tan experto en java, estoy aprendiendo y tengo un problema al insertar datos a una DB en MySQL, el problema es que el JTable no se actualiza.
La insersion en la DB se lleva a cabo sin problemas, pero la aplicación no muestra ese cambio, a menos que la vuelva a ejecutar. Utilizo las clases:

FORMACION DE LA TABLA:
Código Javascript:
Ver original
  1. public class A_Tabla extends AbstractTableModel
  2.     {
  3.     //Constructor (un constructor creado con 3 parametros)  y puede lanzar 2 tipos de excepciones
  4.     A_Tabla(String controlador, String url, String consulta) throws SQLException, ClassNotFoundException
  5.         {
  6.         Class.forName(controlador); //asignamos a la clase el controlador
  7.         A_Conexion.Cx = DriverManager.getConnection(url); //conector del constructor, recibira la url de la clase A_Interface
  8.         A_SentenciasSQL.st = A_Conexion.Cx.createStatement(A_SentenciasSQL.resultado.TYPE_SCROLL_INSENSITIVE, A_SentenciasSQL.resultado.CONCUR_READ_ONLY); //statement creada con el resultset
  9.         A_Conexion.DBConectado = true; //se habilita
  10.         A_SentenciasSQL.establecerConsulta(consulta); //metodo que ejecuta la consulta
  11.         }
  12.            
  13.      
  14.     //Metodos de la tabla tipo AbstractTableModel, estos son metodos propios de  //este tipo de tabla
  15.    
  16.         //Clase que representa el tipo de Columna
  17.     public Class getColumnClass(int columna) throws IllegalStateException
  18.         {
  19.         .......
  20.         }
  21.                
  22.     //Obtener numero de columnas del objeto ResultSet
  23.     public int getColumnCount()
  24.         {
  25.         .......
  26.         }
  27.        
  28.        
  29.     //Nombre de una Columna específica del objeto Resultset
  30.     public String getColumnName(int columna)
  31.         {
  32.         .......
  33.         }
  34.  
  35.        
  36.     //Numero de filas
  37.     public int getRowCount() //directamente este metodo cuenta las filas
  38.         {
  39.         ..........
  40.         }
  41.        
  42.        
  43.     public Object getValueAt(int fila, int col)
  44.         {
  45.         ......
  46.             }


CLASE PARA LA CONEXION
Código Javascript:
Ver original
  1. public class A_Conexion
  2.     {
  3.     public static Connection Cx; //variable tipo conector
  4.     public static boolean DBConectado = false; //variable booleana que indicara si esta o no conectado, como una bandera
  5.     public static final String controladorJDBC = "com.mysql.jdbc.Driver"; //Controlador para conectarse con mysql
  6.    
  7.     //Parametros de la Base de Datos
  8.     static String host = "localhost";
  9.     static String user = "giovanny";
  10.     static String pass = "giovanny";
  11.     static String db = "pruebajava";
  12.     static final String URL = "jdbc:mysql://" + host + "/" + db + "?" + "user=" + user + "&password=" + pass; //String de conexion
  13.    
  14.    
  15.     //Cerrar objetos y controlar la desconexion
  16.     public static void desCxDB()
  17.         {
  18.         try
  19.             {
  20.             //B_Consulta.st.close(); //cerrar el statement
  21.             Cx.close(); //cierra la cx
  22.             }
  23.             catch(SQLException sqlEx)
  24.                 {
  25.                 System.out.println("Error de desconexion de la DB");
  26.                 sqlEx.printStackTrace();
  27.                 }
  28.            
  29.         finally
  30.             {
  31.             DBConectado = false;
  32.             }


CLASES DE SENTENCIAS PARA SQL
Código Javascript:
Ver original
  1. public class A_SentenciasSQL
  2.     {
  3.     public static ResultSet  resultado; //variable tipo ResultSet
  4.     public static ResultSetMetaData metaData; //MEtadata para almacenar la info general de la consulta
  5.     public static Statement st; //Statement  (declaracion)
  6.     public static int numFilas;
  7.    
  8.     static final String sqlQuery = "SELECT id as ID, descripcion as DESCRIPCION, round(valor, 2) AS PRECIO FROM productos";//consulta
  9.     static String insertSQL;
  10.    
  11.     //Metodo para Ejecutar la Cadena de consulta para la DB
  12.         public static void establecerConsulta(String consulta) throws SQLException, IllegalStateException
  13.             {
  14.             if(!A_Conexion.DBConectado) //Asegurarse de la conexion
  15.                 throw new IllegalStateException("No hay conexion con la DB");
  16.                
  17.             resultado =st.executeQuery(consulta); //Ejecuta la consulta
  18.             metaData = resultado.getMetaData(); //Obtiene la MEtaData
  19.                
  20.             resultado.last(); //recorre el ResultSet hasta el final
  21.             numFilas = resultado.getRow(); //contamos las filas
  22.             //B_Interface.tablaModelo.fireTableStructureChanged(); //esto va siempre en el tipo de tablas AbstractTableModel
  23.             }
  24.        
  25.    
  26.     //Insercion de nuevos registros
  27.     public static void Insercion()
  28.         {
  29.         try
  30.             {
  31.             Statement st = DriverManager.getConnection(A_Conexion.URL).createStatement();
  32.             insertSQL = "INSERT INTO productos (descripcion, valor) VALUES(" + "'" + A_Interface.txtDescripcion.getText() + "', " +
  33.                         A_Interface.txtPrecio.getText() + ")";
  34.             st.execute(insertSQL);
  35.            
  36.             JOptionPane.showMessageDialog(null, "Registro Ingresado");
  37.             A_Interface.txtDescripcion.setText("");
  38.             A_Interface.txtPrecio.setText("");
  39.             System.out.println("" + insertSQL);
  40.             //A_Interface.txtDescripcion.setFocusable(true);
  41.             }
  42.             catch(SQLException sqlEx)
  43.                 {
  44.                 System.out.println("Error tipo SQL -> Insert");
  45.                 sqlEx.printStackTrace();
  46.                 }
  47.             catch(Exception ex)
  48.                 {
  49.                 System.out.println("Error general inesperado");
  50.                 }
  51.         A_Interface.tabla.repaint(); //refrescamos el control JTable   
  52.        
  53.         }
  54.        
  55.     }



Y ESTA ES LA INTERFACE QUE SE VISUALIZA:
Código Javascript:
Ver original
  1. public class A_Interface extends JFrame implements ActionListener, KeyListener
  2.     {//Estos son los componentes del Frame
  3.     public static A_Tabla tablaModelo;
  4.     static JTable tabla;
  5.     public static JTextField txtDescripcion, txtPrecio;
  6.     private static JLabel lblDescripcion, lblPrecio;
  7.     private static JButton btnExec;
  8.    
  9.         //Esto lo EJECUTO ASI PARA  llamarlo y tratar de refrescar el Jtable
  10.     //Ejecutar una consulta para ver los registros
  11.     public static void Ejecutor()
  12.         {
  13.         try
  14.             {//Aqui creo la tabla, basandome en el constructor creado en A_Tabla
  15.             tablaModelo = new A_Tabla(A_Conexion.controladorJDBC, A_Conexion.URL, A_SentenciasSQL.sqlQuery);
  16.             tabla = new JTable(tablaModelo);
  17.             }
  18.             catch(ClassNotFoundException cnfEx)
  19.                 {
  20.                 System.out.println("No se pudo encontrar la clase");
  21.                 JOptionPane.showMessageDialog(null, "No se encontro el controloador de la DB", "Problema con el controlador", JOptionPane.ERROR_MESSAGE);
  22.                 System.exit(1);
  23.                 }
  24.             catch(SQLException sqlEx)
  25.                 {
  26.                 System.out.println("Excepcion de tipo SQL en la consulta y conexion basica");
  27.                 JOptionPane.showMessageDialog(null, sqlEx.getMessage(), "Error con la DB", JOptionPane.ERROR_MESSAGE);
  28.                 A_Conexion.desCxDB();
  29.                 System.exit(1);
  30.                 }
  31.         }
  32.    
  33.    
  34.     //Metodo constructor
  35.     public A_Interface()
  36.         {
  37.         //Aki ponemos los componentes graficos sobre la ventana
  38.                 //Los botones, los textBoxes, etc
  39.                 .........
  40.         }
  41.    
  42.    
  43.     //Insersion con un BOTON
  44.     public void actionPerformed(ActionEvent ae)
  45.         {
  46.         if(ae.getSource() == btnExec)
  47.             A_SentenciasSQL.Insercion(); //Ejecuto la insersion
  48.             Ejecutor();
  49.         //COMO VEMOS AQUI VUELVO A EJECUTAR LA CONSULTA, PARA TRATAR DE REFRESCAR EL JTable AL EJECUTAR LA CONSULTA NUEVAMENTE, PERO NO FUNCIONA, ESTE ES EL DILEMA
  50.         }
  51.    
  52.    
  53.    
  54.     //Ejecucion
  55.     public static void main(String[] args)
  56.         {
  57.         Ejecutor();
  58.         JFrame.setDefaultLookAndFeelDecorated(true);
  59.         new A_Interface();
  60.         }
  61.     }

He usado fireTableStructureChanged(), repaint() y lo que hago es ejecutar de nuevo la consulta, y busco cargarla nuevamente en el JTable, pero no pasa nada.
Solo se aprecia el cambio si vuelvo a ejecutar la aplicación.
No se como limpiar un AbstractTableModel, he revisado la documentación y no tiene un método para borrar

REPITO: puedo realizar la inserción en la DB, pero no puedo refrescar el JTable, por favor, alguien podría darme un consejo?
gracias

Etiquetas: clase, jtable, mysql, string, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:26.