ResultSet muito estranho!

4 respostas
N

A exception diz:
“ResultSet was set to forward only”

Então não consigo mais navegar pelos registros usando resultSet.next()

Mas onde foi que o ResultSet foi setado para “forward only”? E como resolver isso?

O método para a sql:

public void pesquisar() {  

try {
         statement = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
         resultSet = statement.executeQuery(selectSQL);
         if(resultSet.next()) {
            String nomeProcurado = JOptionPane.showInputDialog(null, "Digite o nome do contato que deseja localizar:", "Mensagem.", JOptionPane.QUESTION_MESSAGE).toUpperCase();         
            if(nomeProcurado.equals("")) 
               JOptionPane.showMessageDialog(null, "Digite algum nome!", "Mensagem.", JOptionPane.ERROR_MESSAGE);    
            else {   
               if(pesquisa.equals("PESQUISA EXATA")) {
                  preparedStatement = conexao.prepareStatement(pesquisaExataSQL);
                  preparedStatement.setString(1, nomeProcurado);
                  resultSet = preparedStatement.executeQuery();
                     if(resultSet.next())   // Conseguiu localizar. Mover para esse registro.
                        preencherCampos(resultSet);
                     else 
                        JOptionPane.showMessageDialog(null, "Contato inexistente! Verifique se você digitou o nome completo corretamente.", "Mensagem.", JOptionPane.INFORMATION_MESSAGE);
               }   // fim if pesquisa exata.
         }   // fim if(resultSet.next())
         else {   // else if resultSet.next() == false
            JOptionPane.showMessageDialog(null, "Não há contatos cadastrados na agenda!", "Mensagem.", JOptionPane.ERROR_MESSAGE);    
      }
      }   // fim try
      catch(SQLException sqle) {
         System.out.println(sqle);
      }
  
   }

Então, a pesquisa é realizada com sucesso e o método preencherCampos() é chamado, passando para ele o ResultSet com o registro encontrado. Mas onde foi que eu setei esse ResultSet para “forward only”?

O método para preencher os campos que recebe o ResultSet como parâmetro:

private void preencherCampos(ResultSet rs) {
      
      try { 
         nomeText.setText(rs.getString("nome"));
         telConText.setText(rs.getString("telefone"));
      }
      catch(SQLException sqle) {
         System.out.println(sqle);
      }
       
   }

E então? Onde foi que o ResultSet was set to forward only?
A navegação entre os registros ocorre sem problema, até o momento em que alguma pesquisa (como a do exemplo acima) é realizada! Como corrigir isso?

Obs: Seria possível aumentar o espaço horizontal para o código postado aqui no site? O código fica todo quebrado…

4 Respostas

C

Newbie,

Posta o erro aqui completo, assim poderíamos ver qual a linha em que ocorre o erro.
Outra coisa…qual o banco que vc esta utilizando

da uma olhada neste tutorial sobre JDBC que é legal
http://www.guj.com.br/java.tutorial.artigo.120.1.guj

N

Sempre que eu quero passear entre os registros, clicando nos botões proximo, anterior, primeiro, etc… eu uso esse método:

private void moverRegistro(String ponteiro) {
       
      try {
         if(ponteiro.equals(proximoButton.getText())) {
            if(! resultSet.isLast()) {
               resultSet.next();
               preencherCampos(resultSet);
            }
         }
         if(ponteiro.equals(anteriorButton.getText())) {
            if(! resultSet.isFirst()) {
               resultSet.previous();
               preencherCampos(resultSet);      
            }
         }
         if(ponteiro.equals(primeiroButton.getText())) {
            resultSet.first();
            preencherCampos(resultSet);     
         }
         if(ponteiro.equals(ultimoButton.getText())) {
            resultSet.last();
            preencherCampos(resultSet);     
         }
      }
      catch(SQLException sqle) {
         System.out.println(sqle);
      }
      
   }

Até aí tudo bem, o “passeio” pelo ResultSet ocorre sem problema!
Mas depois que eu faço uma pesquisa com êxito ou não (pelo método pesquisar que eu já postei aqui), após isso, quando tento novamente navegar pelo ResultSet ocorre o erro “ResultSet was set to forward only”.

Ainda não está claro o problema?

Obrigado!

A

NewbieJava,

Vendo seu código acima, acredito que voce possa me ajudar a resolver o meu problema:
Quero fazer o que faz esta rotina sua, ou seja; navegar entre os registros do meu banco atravaves da minha aplicação. Como sou iniciante, ainda não estou sabendo como implemento isso no meu for q utilizo para consulta.

Voce poderia me dar essa ajuda? mostrando apnas o código em um formulario em que eu faço a consulta e consequentemente, a navegação entre os registros, próxiom anterior, ultimo e primeiro,

Ficarei imensamente agradecido. Meu e-mail é: [email removido]

Atenciosamente,

Edson

N

Amamorim,

Você quer postar o código que você já tem e dizer o que está faltando?

Ou você prefere que eu tente ajudar mostrando um código meu pronto como exemplo?

Obrigado.

Criado 29 de maio de 2007
Ultima resposta 31 de mai. de 2007
Respostas 4
Participantes 3