ResultSet to Jtable muito lento

2 respostas
V

Boa Tarde a todos!
Estou tendo um problemao em Popular uma Jtable com dados de um ResultSet!
O problema é a lentidao!
Eu utilizo uma funcao GERAMODELO que me retorno um modelo pronto de um ResultSet.
Para eu montar esse modelo eu percorro cada linha e cada coluna do ResultSet!

public DefaultTableModel GeraModelo (ResultSet rs)  throws Exception
  {
      DefaultTableModel modelo = null;
   try{
    ResultSetMetaData rsmd;
    rsmd = rs.getMetaData();
          
    int num_col = 0;
    int cont = 0;
    num_col = rsmd.getColumnCount();
    int num_lin;
    
    rs.last();
    num_lin = rs.getRow();
    rs.beforeFirst();
   
    String dados[][] = new String [num_lin][num_col];
    String colunas[] = new String [num_col]; 
  
    for (int i = 1;i <= num_col; i++)
    {
      colunas[i - 1] = rsmd.getColumnLabel(i);
    }
    
    int a;    
    while (rs.next())
    {
      for (int x = 0; x < num_col; x++)
      {        
        a = rsmd.getColumnType(x + 1);
        if (a == 2)
        {
          dados[cont][x] = String.valueOf(rs.getString(x + 1));
        }else if (a == 91)
        {
          dados[cont][x] = String.valueOf(rs.getDate(x + 1));
        }else
        {
          dados[cont][x] = rs.getString(x + 1);
        }          
      }  
      cont ++;      
    } 
    modelo = new DefaultTableModel(dados, colunas);
    
  } catch(Exception e) {
      JOptionPane.showMessageDialog( null,"Erro na Função GeraModelo - " + e.getMessage(), "Erro", JOptionPane.INFORMATION_MESSAGE );  
  }    
   
    return modelo;
  }

O meu problema é que a tabela do banco de onde eu faço a pesquisa tem 37 campos que precisam ser mostrados na Jtable.
Para cada dia de consulta eu tenho em torno de 2000 registros!
Entao para uma pesquisa de 1 mes eu terei +- 60 a 65 mil registros!

Alguem ai teria alguma ideia para eu agilizar essa conversao de ResultSet Para Jtable??

Desde ja Agradeco!

2 Respostas

Roger75

Você não tem como criar uma tabela apenas com os dados consolidados? Por exemplo, você cria uma tabela com os dados consolidados do mês, e todo dia, de madrugada, roda um processo para fazer essa consolidação.
Aí quando fizer a consulta vai vir mais rápido, pegando os dados dessa tabela consolidada. O problema é que você terá que assegurar que o processo vai rodar todo dia…

V

Vou levar em consideracao sua resposta!

Obs. No sistema antigo, a mesma aplicacao rodada em Linguagem Progress, retorno todos os registros que eu preciso em menos de 1 segundo! É isso que eu acho estranho.

Agora analizando todo o conjunto aqui, descobri que alem de ser lento ele ocorre um erro na criacao do meu modelo!

.OutOfMemoryError : java heap space

Como talvez eu possa resolver isso?

Criado 3 de julho de 2006
Ultima resposta 4 de jul. de 2006
Respostas 2
Participantes 2