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