Dúvidas para navegação de registros em JAVA

Bom dia Pessoal!

Bom estou com a seguinte dúvida, criei um evento no meu botão PRÓXIMO REGISTRO, mas ele só funciona na primeira vez quando executado, se eu pressionar o botão novamente, ele não busca mais nenhum registro, creio estar faltando algum detalhe mas não sei o que é, segue meu código:

    
        Conexao_BD BD = new Conexao_BD();
    
    boolean consulta=true; 
    try{ 
 
     BD.Stm = BD.Con.createStatement(BD.RS.TYPE_SCROLL_INSENSITIVE,  
                                                BD.RS.CONCUR_UPDATABLE);
     BD.RS  = BD.Stm.executeQuery("SELECT * FROM cad_categoria ");
 
        if (BD.RS.next())
        { 
            txcodcategoria.setText(BD.RS.getString("cat_codigo"));
            txcategoria.setText   (BD.RS.getString("cat_nome"));
            txdescricao.setText   (BD.RS.getString("cat_descricao"));
        }

       }  catch(SQLException e){
       } 

Seria muito grato se alguém me ajudar!

Cada vez que você roda o Statement, o banco reposiciona o ResultSet no início.

O certo seria:
a) Executar o ResultSet apenas uma vez, ao carregar a tela;
b) Nos botões próximo e anterior, apenas navegar no resultset.

Claro, trabalhar diretamente com ResultSet na tela é a forma que desenvolvíamos software lá pelos anos 90.
Se você quiser evitar os problemas que já descobrimos nos últimos 20 anos de informática, divida seu software em camadas de objetos.

Como navegaria então usando somente o resultset?

Chamando next() ou previous() mas SEM rodar a consulta novamente.

Seria assim?

    Conexao_BD BD = new Conexao_BD();

    try {
       BD.Stm = BD.Con.createStatement(BD.RS.TYPE_SCROLL_INSENSITIVE, 
                                                  BD.RS.CONCUR_READ_ONLY);

        if (BD.RS.next()){
        
    txcodcategoria.setText(BD.RS.getString("cat_codigo"));  
    txcategoria.setText   (BD.RS.getString("cat_nome"));  
    txdescricao.setText   (BD.RS.getString("cat_descricao"));  

        }
    } catch (SQLException ex) {
        Logger.getLogger(Cad_categoria.class.getName()).log(Level.SEVERE, null, ex);
    
    }

Seria assim?

[code] Conexao_BD BD = new Conexao_BD();

    try {
       BD.Stm = BD.Con.createStatement(BD.RS.TYPE_SCROLL_INSENSITIVE, 
                                                  BD.RS.CONCUR_READ_ONLY);

        if (BD.RS.next()){
        
    txcodcategoria.setText(BD.RS.getString("cat_codigo"));  
    txcategoria.setText   (BD.RS.getString("cat_nome"));  
    txdescricao.setText   (BD.RS.getString("cat_descricao"));  

        }
    } catch (SQLException ex) {
        Logger.getLogger(Cad_categoria.class.getName()).log(Level.SEVERE, null, ex);
    
    }

[/code]

Valeu, consegui executar aqui! Obrigado Vini!