ELIMINAR DATOS DE UN JTABLE Y VOLVER HACER UNA BUSQUEDA
Buenos dias:
Para realizar una busqueda en una table de MySQL, pulso el botón Buscar, me muestra una JDialog para seleccionar el va01 y llama al método siguiente para mostrar un Jtable:
void CargarTablaFicha(){
//Para poner los títulos de la tabla
String[] titulos = {"Id","CULTIVO", "POSOLOGIA", "D. MINIMA", "D. MAXIMA", "PLAZO SEGURIDAD", "OBSERV.?"};
//Para agregar los elementos de la tabla
String[] registro = new String[7];
modelo = new DefaultTableModel(null, titulos);
//Para establecer la conexión
ConexionMySQL mysql = new ConexionMySQL();
Connection cn = mysql.Conectar();
//Crea la consulta MySQL
//JOptionPane.showMessageDialog(null, "El nº de produco es: " + va35);
sSQL = "SELECT Id, Cultivo, Posol, Dosis1, Dosis2, Plazo, A2 FROM producto WHERE NProdFito = '" + va01+ "' AND Clase = 'I' ORDER BY Cultivo, Posol";
try {
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);
while(rs.next()){
registro[0] = rs.getString("Id");
registro[1] = rs.getString("Cultivo");
registro[2] = rs.getString("Posol");
registro[3] = rs.getString("Dosis1");
registro[4] = rs.getString("Dosis2");
registro[5] = rs.getString("Plazo");
registro[6] = rs.getString("A2");
modelo.addRow(registro);
}
//Se agregan los datos a la tabla
tblConsulta.setModel(modelo);
rs.close();
}
catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
Hasta aquí todo correcto.
Si vuelvo a pulsar el botón buscar, hace la selección del Id pero me sigue mostrando los datos de la primera búsqueda.
Incorporo otro método que se acciona con el botón de cancelar y activa el método:
public void eliminar(){
DefaultTableModel tb = (DefaultTableModel) Jtable.getModel();
int a = JtablegetRowCount()-1;
for (int i = a; i >= 0; i--) {
tb.removeRow(tb.getRowCount()-1); // o con “modelo.removeRow(0);” o con
// “modelo.setNumRows(0);” también funciona
}
//cargaTicket();
}
Con este método, borra los datos de la JTable pero cuando hago otra búsqueda no carga ningún dato en la JTable.
¿ Me podeis indicar que falta en el método o como poderlo solucionar ?
Gracias anticipadas y saludos.
- Inicie sesión o regístrese para enviar comentarios
Yo lo hago así...
Hace algún tiempo lo hice en tres pasos:
1 > Este método Object consulta un procedure que filtra los datos de la tabla. Observa que el retur un es un objeto Data[][]
int registros = 1;
try{
CallableStatement contador = (CallableStatement) conexionServidor.getConnection().prepareCall("CALL crud_claveunidad(?,?,?,?,?, ?,?);");
contador.setString(1, null); //idclav_unid
contador.setString(2, null);//clave_unidad
contador.setString(3, nombreClave);//nombre_clave
contador.setString(4, null);//descripcion
contador.setString(5, null);//descripcion
contador.registerOutParameter(6,Types.INTEGER);//total de la busqueda
contador.setString(7,"3");//Operaci0n: 2: Se cuentan los registros y se muestran todos los registros
contador.execute();
registros = contador.getInt(6);
contador.close();
System.err.println("Filas: "+registros);
}catch(SQLException e){
System.out.println("Error en el count mostrarClaveUnidad "+e);
}//fin del try
Object[][] data = new String[registros][4];//6 es el numero de columnas que salen en el tipoDocumento de la consulta
//realizamos la consulta sql y llenamos los datos en "Object"
try{
CallableStatement resultadoBusquedaPorNombre = (CallableStatement) conexionServidor.getConnection().prepareCall("CALL crud_claveunidad(?,?,?,?,?, ?,?);");
resultadoBusquedaPorNombre.setString(1, null); //idclav_unid
resultadoBusquedaPorNombre.setString(2, null);//clave_unidad
resultadoBusquedaPorNombre.setString(3, nombreClave);//nombre_clave
resultadoBusquedaPorNombre.setString(4, null);//descripcion
resultadoBusquedaPorNombre.setString(5,null);//el total de clientes
resultadoBusquedaPorNombre.setString(6,null);//total de resultados
resultadoBusquedaPorNombre.setString(7,"3");//Operaci0n: 2: Se cuentan los registros y se muestran todos los registros
resultadoBusquedaPorNombre.execute();
ResultSet res = resultadoBusquedaPorNombre.getResultSet();
int i = 0;
while(res.next()){
String idclav_unid_ = res.getString("idclav_unid");
String clave_unidad_ = res.getString("clave_unidad");
String nombre_clave_ = res.getString("nombre_clave");
String descripcion_ = res.getString("descripcion");
data[i][0] = idclav_unid_;
data[i][1] = clave_unidad_;
data[i][2] = nombre_clave_;
data[i][3] = descripcion_;
i++;
//encontrados++;//variable que se incrementa con cada registro encontrado, y asi poder mandar la cantidad
//de resultados en el JOption
}//del while
res.close();
}catch(SQLException e){
System.out.println(e);
System.out.println("Error del while mostrarClaveUnidad");
}//del try
return data;
}
2>> Este método va en la clase que contenga la tabla
String [] columNames = {"Id","Clave unidad","Nombre","Descripcion"};
dtConsulta = consultasALaBase.filtrarClaveUnidad33(clave);
DefaultTableModel datos = new DefaultTableModel(dtConsulta, columNames);
clave_unidad_jTable.setModel(datos);
anchoColumnas();//metodo que customiza el ancho de las columnas de x tabla
clave_unidad_jTable.setAutoCreateRowSorter(true);
clave_unidad_jTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
}
3>>Finalmente en un textfield donde el usuario coloca el texto a buscar:
// TODO add your handling code here:
filtrarClaves(queBuscar_txt.getText());
if (clave_unidad_jTable.getRowCount() == 0) {
JOptionPane.showMessageDialog(null, "¡¡No se encontraron resultados!!");
}
}