Percorrer os registros do ResultSet

3 respostas
J

E ae pessoal. Meu problema é o seguinte: Tenho um botão na minha aplicação que move para o proximo registro e um que move para o anterior. O que eu fiz está funcionando quase totalmente. O problema é que ele omite o ultimo registro. Até sei porque. Por causa do if(rs.next()), pois o ultimo não tem proximo. O código é o seguinte. Se puderem me ajudar, agradeço.

//Método para mover para proximo registro:
public int pesquisaProximo(){

try{
      String query = "SELECT * FROM tblCidades ORDER BY nomeCidades";  
       
       conn.openCon();
       
       stmt = conn.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                              ResultSet.CONCUR_READ_ONLY);
    
       rs = stmt.executeQuery(query);
       
       if(rs.next()){
          
           rs.relative(posicao);
           posicao++;
            
           if(rs.isAfterLast()){
               posicao-= 2;
               return 0;
           }
           else{
               codigo = rs.getInt("codgCidades");
               nome = rs.getString("nomeCidades");
               uf = rs.getString("estadoCidades");

               return 1;
             }
       }
       else
         return 0;
    }
    catch(SQLException e){
          e.printStackTrace();
          return -1;    
    } 
}


//Método para mover para proximo registro:
public int pesquisaAnterior(){
     
    try{
      String query = "SELECT * FROM tblCidades ORDER BY nomeCidades";   
       
       conn.openCon();
       
       stmt = conn.getConn().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                              ResultSet.CONCUR_READ_ONLY);
    
       rs = stmt.executeQuery(query);
       
      if(rs.next()){
           
           posicao--;
           rs.relative(posicao);
           
           if(rs.isBeforeFirst()){
               posicao+= 2;
               return 0;
           }
           else{
               codigo = rs.getInt("codgCidades");
               nome = rs.getString("nomeCidades");
               uf = rs.getString("estadoCidades");
               
               return 1;
             }
       }
       else
         return 0;
    }
    catch(SQLException e){
          e.printStackTrace();
          return -1;    
    } 
}

Valeuuu

3 Respostas

M
Utilize
while (rs.next())
{
}
e não:
if (rs.next())
{
}
É bom que tu use [code] para escrever os códigos pois fica mais fácil de visualizar =)
M

é bom vc testar se o resultSet tem algum valor antes, eu costumo fazer assim:

if ( !resultSet.next() )
   return;

while ( resultSet.next() ) {

   // varre o resultset
}

ou seja, se não veio dado nenhum, eu nem perco tempo, retorno o método... do contrário, eu leio os dados..., lembre-se q sempre deve colocar o ponteiro do resultset na primeira posição antes de ler.. chamar o primeiro next() no resultset não fará vc perder nenhum dado depois..

J

Sim, mas para cada vez que o botão é pressionado ele tem que mover para o proximo registro. Com o while ele percorre todos numa única vez, não é?
Pensei fazer usando o getRow() do rs, mas não deu muito certo.
Valeu… :grin:

Criado 26 de janeiro de 2005
Ultima resposta 26 de jan. de 2005
Respostas 3
Participantes 3