Resultset muito lento [RESOLVIDO]

Boa noite,

Estou a fazer um resultset que envia para o para uma tabela através de uma tablemodel o problema e que ele demora muitooo tempo, demora cerca de 30 seg, e sao apenas 31 linhas não quero imaginar quando forem mais…

Base de Dados

public List<Procurar> MostrarDados() throws SQLException{
        Conectar();
        List<Procurar> pro = new ArrayList<Procurar>();
        Procurar procurar = null;        
        
            ps = con.prepareStatement("select * from dados");
            rs = ps.executeQuery();
            while(rs.next()){
                procurar = new Procurar();
                procurar.setTema(rs.getString("tema"));
                procurar.setTexto(rs.getString("texto"));
                pro.add(procurar);
            }
       
            Desconectar();
        
        return pro;

Tablemodel

private String[] columnNames = { "Tema", "Texto"};
    private List<Procurar> logList;

     public MeuTableMode() {
         logList = new ArrayList<Procurar>();
     }

     public MeuTableMode( List<Procurar> logList ) {
         this();
         setData( logList );
     }

     @Override
     public String getColumnName(int col) {
         return columnNames[col];
     }

     public String[] getColumnNames() {
         return columnNames;
     }

     public void setData(List<Procurar> list) {
         this.logList.clear();
         this.logList.addAll( list );
         super.fireTableDataChanged();
     }

     public Procurar getValueAt(int row) {
         return logList.get( row );
     }


     public int indexOf(Procurar entity) {
         return logList.indexOf( entity );
     }

     public void clear() {
         this.logList.clear();
         fireTableDataChanged();
     }


     public void remove(Procurar entity) {
         logList.remove( entity );
         super.fireTableDataChanged();
     }


     public void add(Procurar entity) {
         logList.add( 0, entity );
         super.fireTableDataChanged();
     }


     public boolean contains(Procurar entity) {
         return logList.contains( entity );
     }

     public int getRowCount() {
         return logList.size();
     }

     public int getColumnCount() {
         return columnNames.length;
     }

     public Object getValueAt(int rowIndex, int columnIndex) {
         Procurar log = logList.get( rowIndex );
         switch( columnIndex ) {
             case 0: return log.getTema();
             case 1: return log.getTexto();
         }
         return null;
     }


     public List<Procurar> list() {
         return logList;
     }


     public void updateItem(int idx, Procurar entity) {
         logList.set( idx, entity );
         super.fireTableDataChanged();
     }
 try {

                for(int i = 0; i < bdTema.MostrarDados().size(); i++){
                    modelo.add((Procurar) bdTema.MostrarDados().get(i));
                }
            } catch (SQLException ex) {
               
            }

O que está mal?

eu começaria trocando

select * from dados

por uma projeção com apenas os campos necessarios

select tema, texto from dados

[quote=orlandocn]eu começaria trocando

select * from dados

por uma projeção com apenas os campos necessarios

select tema, texto from dados

mesmo se fossem 40 colunas na tabela… não poderia demorar 30 segundos para retornar 31 registros…

aquele seu último for… por que você está adicionando separadamente cada registro? o seu próprio TableModel já tem o método setData onde você passa o ArrayList… então você poderia trocar aquele for por isso:

modelo.setData(bdTema.MostrarDados());

Segui a sugestão do erico e deu certo sim

Muito Obrigado

Depois que seu problema tiver resolvido, vá no primeiro post, editar o Título adicionando a tag [RESOLVIDO] no final do Título .