Utilizando o ResultSet rs.previous() e ResultSet rs.next();

Boa Tarde Galera,

Em uma tela de cadastro de clientes, possuo 4 Botoes onde:1 primeiro; 2 anterior; 3 proximo; 4 ultimo;

Nestes botoes a função deles, nada mais é do que realizar o select no banco e trazer para os jTextField, os botoes 1 e 4 estão funcionando Perfeitamente, ja os botes 2 e 3 não estão.

Vamos por partes:

Botão 3.

private void jButtonProximoActionPerformed(java.awt.event.ActionEvent evt) {
jButtonAlterar.setEnabled(true);
jButtonExcluir.setEnabled(true);

    try {
        conecta.executaSQL("SELECT * FROM CD_CLIENTE");
        while(conecta.rs.next()){
        jTextFieldCodCliente.setText(String.valueOf(conecta.rs.getInt("ID_CLIENTE")));
        jTextFieldNomeCliente.setText(conecta.rs.getString("CD_NOME_CLIENTE"));
        jTextFieldClienteEndereco.setText(conecta.rs.getString("CD_CLIENTE_ENDERECO"));
        jTextFieldClienteBairro.setText(conecta.rs.getString("CD_CLIENTE_BAIRRO"));
        jTextFieldClienteCidade.setText(conecta.rs.getString("CD_CLIENTE_CIDADE"));
        jTextFieldClienteCep.setText(conecta.rs.getString("CD_CLIENTE_CEP"));
        jTextFieldClienteTelefone.setText(conecta.rs.getString("CD_CLIENTE_TELEFONE"));
        jTextFieldClienteCpfCnpj.setText(conecta.rs.getString("CD_CLIENTE_CPFCNPJ"));
        jTextFieldClienteEmail.setText(conecta.rs.getString("CD_CLIENTE_EMAIL"));
        jTextAreaClienteObservação.setText(conecta.rs.getString("CD_CLIENTE_OBSERVACAO"));
        int clienteAtivo = conecta.rs.getInt("FG_CLIENTE_ATIVO");
        if (clienteAtivo == 1) {
            jCheckBoxClienteAtivo.setSelected(true);
        } else {
            jCheckBoxClienteAtivo.setSelected(false);
        }
        }

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao exibir dados\n" + ex);
    }
}

com o codigo acima, ao compilar a aplicação, no momento em que clico em 3 proximo, o botão só traz o primeiro registro do banco, posso clicar inumeras vezes no botão que a unica informação que ficará no textfield sera a do primeiro registro do BD.
PS* no codigo acima estou utilizando while(rs.next()) porém eu ja tentei só o conecta.rs.next(); e nenhum dos dois jeitos deu certo.

Botão 2.

private void jButtonProximoActionPerformed(java.awt.event.ActionEvent evt) {
jButtonAlterar.setEnabled(true);
jButtonExcluir.setEnabled(true);

    try {
        conecta.executaSQL("SELECT * FROM CD_CLIENTE");
        conecta.rs.previous();
        jTextFieldCodCliente.setText(String.valueOf(conecta.rs.getInt("ID_CLIENTE")));
        jTextFieldNomeCliente.setText(conecta.rs.getString("CD_NOME_CLIENTE"));
        jTextFieldClienteEndereco.setText(conecta.rs.getString("CD_CLIENTE_ENDERECO"));
        jTextFieldClienteBairro.setText(conecta.rs.getString("CD_CLIENTE_BAIRRO"));
        jTextFieldClienteCidade.setText(conecta.rs.getString("CD_CLIENTE_CIDADE"));
        jTextFieldClienteCep.setText(conecta.rs.getString("CD_CLIENTE_CEP"));
        jTextFieldClienteTelefone.setText(conecta.rs.getString("CD_CLIENTE_TELEFONE"));
        jTextFieldClienteCpfCnpj.setText(conecta.rs.getString("CD_CLIENTE_CPFCNPJ"));
        jTextFieldClienteEmail.setText(conecta.rs.getString("CD_CLIENTE_EMAIL"));
        jTextAreaClienteObservação.setText(conecta.rs.getString("CD_CLIENTE_OBSERVACAO"));
        int clienteAtivo = conecta.rs.getInt("FG_CLIENTE_ATIVO");
        if (clienteAtivo == 1) {
            jCheckBoxClienteAtivo.setSelected(true);
        } else {
            jCheckBoxClienteAtivo.setSelected(false);
        }
        

    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao exibir dados\n" + ex);
    }
}   

já no botão 2 - Anterior quando clico neste botão, o sistema entra no catch e retorna o seguinte: Before start of result set.
Detalhe, na momento da inicialização da tela, os textfield’s vem preenchido com o ultimo registro;

Abaixo segue script executaSQL

public void executaSQL(String sql){
try{
stm = conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_READ_ONLY,rs.CONCUR_UPDATABLE);
rs = stm.executeQuery(sql);
}catch (SQLException ex){
JOptionPane.showMessageDialog(null, “Erro executaSQL\n Erro:”+ex.getMessage());

    }
}

Sinceramente nunca vi dar problema neste tipo relativamente simples de operação, desde já agradeço pela atenção de Todos.

ResultSet’s você só tem acesso ao primeiro e último registro. Dentro desse while traga os dados para um ArrayList, vai ser melhor para manipular os dados.

Boa Tarde Leonardo,

Primeiramente muito obrigado pela sua atenção;

Eu havia pensado no ArrayList, no entanto achei que desse para fazer desta forma, talvez algum detalhe que passou despercebido. Mas tranquilo, vou fazer com o ArrayList, e divulgar a solução para auxiliar outros usuarios.

Muito obrigado Leonardo.