osvaldogh85
Newbie

Mensajes: 24
|
 |
« en: Agosto 28, 2008, 11:09:13 » |
|
Tengo otro problema con mi modelo basado en resultset updatable y scrollable
Tengo que cargar mi tabla cuando mi ventana se abre(para mostrar los encabezados a partir de un resulset que inicialmente no trae datos..de el solo tomo el metadada...(motivos de presentacion para que no se vea el espacio feo de una tabla sin modelo... luego lleno unos campos de texto y cuando almaceno esos datos en mi tabla.. .. al dar click en el boton guardar este inserta ciertos registros en una tabla y luego yo cargo un resultset con esos datos que fueron insertados y llamo al modelo y con un metodo set le dor un nuevo resultset..suponia yo que esto me cargaria nuevamente los datos.. ..el programa no falla..ni se cae.. pero los datos no se cargan, no se refresca la tabla a pesar de tener un nuevo resultset.. mi modelo es este
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Date; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; import com.microtools.bussiness.util.ManejadorColumnas;
public class ScrollableTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L; private ResultSet resultSet = null; private int rowCount= -1; private boolean isModeloEditable=false,isModeloAutoActualizable=false; private boolean []columnasEditables; private ResultSetMetaData rsmd = null; private int currentRow=0; private int currentCol=0; public int getCurrentCol() { return currentCol; }
public void setCurrentCol(int currentCol) { this.currentCol = currentCol; }
public ScrollableTableModel() { super(); } /** * Constructor que ingresa un resultado de datos, * el modelo no es editable * @param rs */ public ScrollableTableModel(ResultSet resultSet) { this.resultSet=resultSet; try{ this.rsmd=resultSet.getMetaData(); fireTableStructureChanged(); } catch (SQLException e){e.printStackTrace();} }
/** * Este contructor recibe un modelo de datos Resultset , * permite editar columnas y reflejar sus cambios en la base de datos * @param rs * @param isModeloEditable * @param columnasEditables */ public ScrollableTableModel(ResultSet resultSet,boolean isModeloEditable,boolean []columnasEditables,boolean isModeloAutoActualizable) {
this.resultSet=resultSet; try{ this.rsmd=resultSet.getMetaData(); }catch (SQLException e){e.printStackTrace();} this.setModeloEditable(isModeloEditable); this.setColumnasEditables(columnasEditables); this.setModeloAutoActualizable(isModeloAutoActualizable); fireTableStructureChanged(); } public int getMaximaCapacidadCelda(int columna){ if(rsmd!=null){ try{ return rsmd.getColumnDisplaySize(columna + 1); }catch (SQLException e){e.printStackTrace();} } return 0; }
@SuppressWarnings("unchecked") public ArrayList getRow(int fila){ ArrayList lista = null; if(this.getRowCount() != -1){ lista = new ArrayList(); try{ resultSet.absolute(fila + 1); for(int i = 0; i < this.getColumnCount(); i++) lista.add(resultSet.getObject(i + 1)); }catch(SQLException e){ e.printStackTrace(); } } return lista; }
/** * Retorna de numero de columnas */ public int getColumnCount() { if(rsmd != null){ try{ return rsmd.getColumnCount(); } catch ( SQLException sqlException ){ sqlException.printStackTrace();} } return 0; }
/** * @return Numero de filas dentro del modelo */ public int getRowCount(){ if(rsmd != null){ if(this.rowCount == -1){ try { resultSet.last(); this.rowCount = resultSet.getRow(); } catch (SQLException e){e.printStackTrace();} } } return rowCount; } //Retorna un object de acuerdo a la fila / columna public Object getValueAt(int fila, int columna){ if(rsmd != null){ try{ resultSet.absolute(fila + 1); return resultSet.getObject(columna + 1); }catch (SQLException e){ e.printStackTrace(); } } return null; } /** * Verifica si la celda es editable o no */ public boolean isCellEditable(int fila, int columna) { if(isModeloEditable){ if(columnasEditables[columna]==true) return true; } return false; }
/** * Retorna el titulo de la columna segun el indice */ public String getColumnName(int indice){ if(rsmd != null){ try { return ManejadorColumnas.renombrarColumna(rsmd.getColumnName( indice + 1 )); } catch ( SQLException sqlException ){sqlException.printStackTrace();} } return ""; }
/** * Retorna la clase que maneja la columna */ @SuppressWarnings("unchecked") public Class getColumnClass(int columna) { if(rsmd != null){ try { String className = rsmd.getColumnClassName( columna + 1 ); return Class.forName( className ); } catch ( Exception exception ){exception.printStackTrace();} } return Object.class; }
private boolean actualizarDato(Object dato, int fila, int columna){ boolean isActualizado =false; try { if(dato != null){ System.err.println("SetValue Del Modelo " + dato.toString()); resultSet.absolute(fila + 1); int tipoDato = rsmd.getColumnType(columna + 1); int scale = rsmd.getScale(columna + 1); switch (tipoDato) { case java.sql.Types.VARCHAR: resultSet.updateString(columna + 1, dato.toString()); isActualizado = true; break; case java.sql.Types.BIT: Boolean bit = new Boolean( dato.toString() ); resultSet.updateBoolean(columna+1, bit.booleanValue() ); isActualizado=true; break; case java.sql.Types.CHAR: resultSet.updateString(columna + 1, dato.toString()); isActualizado=true; break; case java.sql.Types.DOUBLE: Double enteroDoble = new Double( dato.toString() ); resultSet.updateDouble(columna+1, enteroDoble.doubleValue() ); isActualizado=true; break; case java.sql.Types.INTEGER: Integer entero = new Integer( dato.toString() ); resultSet.updateInt(columna+1, entero.intValue() ); isActualizado=true; break; case java.sql.Types.BOOLEAN: Boolean binario = new Boolean( dato.toString() ); resultSet.updateBoolean(columna+1, binario.booleanValue() ); isActualizado=true; break; case java.sql.Types.NUMERIC: if(scale > 0){ Float numerico = new Float( dato.toString() ); resultSet.updateFloat(columna+1,numerico.floatValue() ); isActualizado=true; } else{ Integer numerico = new Integer( dato.toString() ); resultSet.updateInt(columna+1,numerico.intValue() ); isActualizado=true; } break; case java.sql.Types.DATE: Date fecha = Date.valueOf(dato.toString()); resultSet.updateDate(columna+1,fecha ); isActualizado=true; break; case java.sql.Types.DECIMAL: if(scale > 0){ Float numerico = new Float( dato.toString() ); resultSet.updateFloat(columna+1,numerico.floatValue() ); isActualizado=true; }else{ Integer numerico = new Integer( dato.toString() ); resultSet.updateInt(columna+1,numerico.intValue() ); isActualizado=true; } break; default: System.out.println("Columna desconocida, no puede ser asignada a la tabla"); } }else System.out.println("Valores nulos no pueden ser asignados al campo"); } catch (SQLException e) { e.printStackTrace();} return isActualizado; }
public void setValueAt(Object dato, int fila, int columna) { if(rsmd != null){ if(this.isModeloEditable){ if(this.actualizarDato(dato, fila, columna) == true){ try{ if(isModeloAutoActualizable){ resultSet.updateRow(); fireTableCellUpdated(fila, columna); } }catch (SQLException e){e.printStackTrace();} } } } }
public boolean[] getColumnasEditables() { return columnasEditables; }
public void setColumnasEditables(boolean[] columnasEditables) { this.columnasEditables = columnasEditables; }
public boolean isModeloEditable() { return isModeloEditable; }
public void setModeloEditable(boolean isModeloEditable) { this.isModeloEditable = isModeloEditable; }
public ResultSet getResultSet() { return resultSet; }
public void setResultSet(ResultSet resultSet) { this.resultSet = resultSet; try { this.rsmd = resultSet.getMetaData(); } catch (SQLException e) { e.printStackTrace(); } fireTableStructureChanged(); }
public ResultSetMetaData getRsmd() { return rsmd; }
public void setRsmd(ResultSetMetaData rsmd) { this.rsmd = rsmd; }
public int getCurrentRow() { return currentRow; }
public void setCurrentRow(int currentRow) { this.currentRow = currentRow; }
public boolean isModeloAutoActualizable() { return isModeloAutoActualizable; }
public void setModeloAutoActualizable(boolean isModeloAutoActualizable) { this.isModeloAutoActualizable = isModeloAutoActualizable; } }
yo creo otro resultset para cambiar la vista de datos .. se supone que con el metodo setResultset deberia funcionar.. el programa no se cae..pero tampoco salen los datos y si esta comprobado que el nuevo resultset tiene datos...
|