Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Diciembre 05, 2008, 10:42:38
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Empieza una nueva comunidad de programación: Oneble ... es lo que tu quieras que sea

+  Foros Java y C/Linux
|-+  Programación
| |-+  Java J2SE
| | |-+  Problema con Resultset
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: Problema con Resultset  (Leído 86 veces)
osvaldogh85
Newbie
*
Mensajes: 29


Ver Perfil Email


« 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...
En línea
jannetita
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #1 en: Agosto 29, 2008, 09:58:30 »

Hola pues mira, creo que lo que te falta es volver a cargar el modelo de datos y volverlo a asignar a tu tabla.
Algo parecido a esto:

Código:
DefaultTableModel modelo = new DefaultTableModel(datos,columnas);
jTable1.setModel(modelo);

donde:
'datos' es un arreglo que contiene todos los datos de tu tabla y
'columnas' es un arreglo que contiene los nombres de las columnas de la tabla.

Espero haber entendido tu problema y esto te sirva en algo.
En línea
osvaldogh85
Newbie
*
Mensajes: 29


Ver Perfil Email
« Respuesta #2 en: Septiembre 06, 2008, 10:12:29 »

hola señorita , ...voy a tratar de hacer lo que dices..si me funciona te llevo al cielo jaja.. gracias
En línea
osvaldogh85
Newbie
*
Mensajes: 29


Ver Perfil Email
« Respuesta #3 en: Septiembre 06, 2008, 11:05:07 »

cumpliendo lo anterior.. te voy a llevar al cielo... me funciono a la perfeccción
En línea
Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!