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
publicUsuarioverificaUsuario(Stringlogin,Stringsenha)throwsExcessoesBD{Stringquery="SELECT * FROM USUARIO WHERE login_usu = ? AND senha_usu = ?";PreparedStatementps=prepareStatement(query);Usuariouser=newUsuario();try{ps.setString(1,login);ps.setString(2,senha);if(ps.execute()){JOptionPane.showMessageDialog(null,"teste . retorna resultset");}ResultSetrs=ps.executeQuery();//verificar esta funçãoJOptionPane.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();returnuser;}returnnull;}catch(SQLExceptionexception){thrownewExcessoesBD("Erro ao procurar #UsuarioDAO"+exception);}
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
renanr01 like
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.
publicUsuarioverificaUsuario(Stringlogin,Stringsenha)throwsExcessoesBD{Stringquery="SELECT * FROM USUARIO WHERE login_usu = ? AND senha_usu = ?";PreparedStatementps=prepareStatement(query);Usuariouser=newUsuario();try{ps.setString(1,login);ps.setString(2,senha);if(ps.execute()){}ResultSetrs=ps.executeQuery();//verificar esta funçãors.next();user.setLogin(rs.getString("login_usu"));user.setSenha(rs.getString("senha_usu"));user.setNome(rs.getString("nome_usu"));rs.close();ps.close();returnuser;}catch(SQLExceptionexception){thrownewExcessoesBD("Erro ao procurar #UsuarioDAO"+exception);}}
publicConnectiongetConnection()throwsExcessoesBD{try{//carregar o driverClass.forName(Driver);//pegando a conexao com o bdConnectioncx=DriverManager.getConnection(Conexao,Usuario,senha);//retornando a conexaoreturncx;}catch(ClassNotFoundExceptionex){thrownewExcessoesBD("Erro ao ler o driver mysql");}catch(SQLExceptionex){thrownewExcessoesBD("Erro ao conectar o mysql"+ex);}}//getConnectionpublicPreparedStatementprepareStatement(Stringquery)throwsExcessoesBD{try{returngetConnection().prepareStatement(query);}catch(SQLExceptionex){thrownewExcessoesBD("Erro no Statement");}}//Faz execução no bd de um query lançada pelo programa publicstaticvoidmain(String[]args)throwsExcessoesBD{Conexaocon=newConexao();con.getConnection();}}
rpguedes
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.
Solucao aceita
renanr0
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
renanr0
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