Problema com conexão MYSQL

Estou tentando fazer executar um query simples para buscar usuario e senha no mysql, porem está dando um problema de ‘before start of result set’ entretando estou usando .next() para direcionar para o resultado. testei a query direto no mysql e retornou oq desejo. Segue o trecho do codigo. Agradeço pela atenção

public Usuario verificaUsuario(String login, String senha) throws ExcessoesBD{
       
        String query = "SELECT * FROM USUARIO WHERE login_usu = ? AND senha_usu = ?";        
        PreparedStatement ps = prepareStatement(query);
        Usuario user = new Usuario();
       
       
        try{        
            ps.setString(1,login);
            ps.setString(2,senha);
            
            
            if(ps.execute()){
                JOptionPane.showMessageDialog(null, "teste . retorna resultset");
            }
            ResultSet rs = ps.executeQuery();//verificar esta função
        
            JOptionPane.showMessageDialog(null, "DeuCerto nome "+rs.getString("nome_usu"));
           
            if(rs.next()){
                
                user.setLogin(rs.getString("login_usu"));
                user.setSenha(rs.getString("senha_usu"));
                user.setNome(rs.getString("nome_usu"));
                rs.close();
                ps.close();
                return user;
            }
         return null; 
        }catch(SQLException exception){
            throw new ExcessoesBD("Erro ao procurar #UsuarioDAO"+exception);
        }

Boa noite amigo,

Pelo que eu vi no seu código tem alguns errinhos, provavelmente de digitaçao. Também falta instanciar o PreparedStatement corretamente, visto que ele necessita de uma conexao.

String query = "SELECT * FROM USUARIO WHERE login_usu = ? AND senha_usu = ?"; PreparedStatement ps = new PreparedStatement(conexao, query)

Lembre-se de que a conexão deve ser configurada anteriormente.

Espero ter ajudado

a classe herda uma de conexão. Meio que fiz funcionar quando tireio o if com next(); deixando o rs.next(); somente atuando e construindo o objeto com o resultado.

public Usuario verificaUsuario(String login, String senha) throws ExcessoesBD{
       
        String query = "SELECT * FROM USUARIO WHERE login_usu = ? AND senha_usu = ?";        
        PreparedStatement ps = prepareStatement(query);
        Usuario user = new Usuario();
       
        
        try{        
            ps.setString(1,login);
            ps.setString(2,senha);
            
            
            if(ps.execute()){
               
            }
            ResultSet rs = ps.executeQuery();//verificar esta função
             
             rs.next();
             
           
                
                user.setLogin(rs.getString("login_usu"));
                user.setSenha(rs.getString("senha_usu"));
                user.setNome(rs.getString("nome_usu"));
                rs.close();
                ps.close();
                return user;
          

        }catch(SQLException exception){
            throw new ExcessoesBD("Erro ao procurar #UsuarioDAO"+exception);
        }
          
    }

a outra classe esta assim:
public class Conexao {
private final String Driver = “com.mysql.jdbc.Driver”;
private final String BD = “BD”;
private final String Conexao = “jdbc:mysql://localhost:3306/”+BD;
private final String Usuario = “root”;
private final String senha = “pass”;

        public Connection getConnection() throws ExcessoesBD {
         try {
                //carregar o driver
                Class.forName(Driver);
                
                //pegando a conexao com o bd
                
                Connection cx = DriverManager.getConnection(Conexao,Usuario,senha);
                
                //retornando a conexao
                return cx;
                
            } catch (ClassNotFoundException ex) {
               throw new ExcessoesBD("Erro ao ler o driver mysql");
            }catch (SQLException ex){
                throw new ExcessoesBD("Erro ao conectar o mysql"+ex);
            }
            
        }//getConnection
        
            
        
        
        public PreparedStatement prepareStatement(String query) throws ExcessoesBD {
             try {
                return getConnection().prepareStatement(query);
            }catch(SQLException ex){
                throw new ExcessoesBD("Erro no Statement");
            }
        }
            //Faz execução no bd de um query lançada pelo programa        
        
        
        public static void main(String[] args) throws ExcessoesBD{
            Conexao con = new Conexao();
            con.getConnection();
        }
    
}
1 curtida

Realmente quando voce usa o método next() do ResultSet ele pula para a primeira linha do ResultSet, aí você vai conseguir resgatar o usuário e a senha que está nesta linha do ResultSet.

Então este o problema, pq quando uso if(rs.next()){}else{return null;} não funciona? queria retornar null para controlar de maneira mais fácil, sem isso ele dispara um monte de erros. Vi muitos exemplos e a maioria usa next() dentro de estruturas de repetição ou if’s

Por algum motivo que desconheço a versão antiga do cod agora funciona. Utilizando if(rs.next()) está retornando corretamente a tupla no mysql do usuario. Obg