Java.sql.SQLException: ResultSet may only be accessed in a forward direction

4 respostas
A

Galera toda vez que vou fazer login no sistema dá isso...

Consegui fazer a conexão, consegui executar o Select no banco mas quando ele vai fazer o Resultset da pau

private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        ConectarBanco conecta = new ConectarBanco();
        //Abre Conexao
        conecta.abreConexao();

        if(txtNome.getText().equals("") || txtSenha.getText().equals("")){
            JOptionPane.showMessageDialog(null, "Por favor, entre com usuário e senha!");
        }
        else {
            try{
                String sql = "Select * from login where usuario_login like '"+txtNome.getText()+
                        "' and senha_login like '"+txtSenha.getText()+"'";
                try{
                    conecta.executaSQL(sql);
                }catch (SQLException ex){
                    ex.printStackTrace();
                }

                if(conecta.rs.first()){
                    JOptionPane.showMessageDialog(null, "Bom trabalho");
                }
                else{
                    JOptionPane.showMessageDialog(null, "Usuário ou senha invalidos...");
                }

            }catch(SQLException ex){
                ex.printStackTrace();
            }



        }

        //Fecha a Conexão
        try{
            conecta.fechaConexao();
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

o erro ta na linha 19

4 Respostas

V

Troque o first() por next().

E torça para ninguém colocar % no usuário e % na senha (o famoso SQL-Injection). Para resolver esse problema, considere com carinho o uso de PreparedStatement.

K
K
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

private void btnEntrarActionPerformed(java.awt.event.ActionEventevt){                                          
        ConectarBanco conecta = new ConectarBanco();
        Connection conexao=null;
        PrepareStatement pstm=null;
        Resultset rs=null; 
        if(txtNome.getText().equals("") || txtSenha.getText().equals("")){
            JOptionPane.showMessageDialog(null, "Por favor, entre com usuário e senha!");
        }
        else {
            try{
               String sql = "Select *from login where usuario_login like ? and senha_login like ? ";
                try{
                        conexao = conecta.abreConexao();
                       /* dá certo se conecta.abreConexao() retornar Connection*/ 
                   pstm=conexao.prepareStatement(sql);
                   pstm.setString(1,txtNome.getText()); /* 1 quer dizer: set no 1º ?*/
                   pstm.setString(2,txtSenha.getText());/* 2 quer dizer: set no 2º ?*/
                  rs=pstm.executeQuery(); /* aqui ele executa e rs recebe o retorno*/
                }catch (SQLException ex){
                    ex.printStackTrace();
                }
 /* rs=pstm.executeQuery() foi bem-sucedido, rs possui um objeto. Se não, continua null */
                if(rs!=null){
                    JOptionPane.showMessageDialog(null, "Bom trabalho");
                }
                else{
                    JOptionPane.showMessageDialog(null, "Usuário ou senha invalidos...");
                }

            }catch(SQLException ex){
                ex.printStackTrace();
            }
        }

        //Fecha a Conexão
        try{
            conecta.fechaConexao();
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

Não conheço os detalhes do seu código, por isso você precisa adaptar o que escrevi. Mas na essência funciona!

W

cara eu tava com o mesmo problema aqui…
mais a minha situação era um pouco diferente… acontecia que eu estava colocando um
beforefirst() antes de montar o rs.next,
acredito que assim como o ViniGodoy disse, o erro deve estar nesse seu first

Criado 10 de setembro de 2009
Ultima resposta 7 de jun. de 2011
Respostas 4
Participantes 4