Olá pessoal, estou com dúvidas no código de validação de login. Se eu digito um nome existe no bd, ele tambem informa que não existe. Não entendi o que está acontecendo com esse código.
FuncionarioDAO
public boolean existeUnico(Funcionario funcionario) throws SQLException {
PreparedStatement stmt = connection.prepareStatement
("select *from funcionarios where usuario=? and senha=?");
stmt.setString(1, funcionario.getUsuario());
stmt.setString(2, funcionario.getSenha());
ResultSet rs = stmt.executeQuery();
try{
if(!rs.next()){
return false;
}
return !rs.next();
}
finally {
rs.close();
stmt.close();
}
}
LoginAction, onde eu envio o usuario e a senha para o FuncionarioDAO pra retornar true ou false.
Da maneira como está implementado… sempre vai retornar false devido return !rs.next(); quando deveria ser return rs.next();.
Também pode refatorar seu código conforme joao.junior sugeriu.
S
santos.fernando
Se eu fizer assim
try{
if(rs.next()){
return true;
}else{
return false;
}
}
sempre entrará no if e nunca no else, qualquer coisa que eu digito entra no sistema.
S
santos.fernando
O problema que está ocorrendo sempre entra no if, e nunca no else, não importa o que digite. Então será executado apenas o return do if.
joao.junior
Eu utilizo esta mesma logica em um sistema de login aqui, e funciona.
se getRow() retornar zero não existem usuários com os dados informados, se retornar mais que 1 então eu estou com um problema de usuário duplicado (nome/senha o que deveria se evitado no cadastro)… e não valido a entrada do usuário. Coisa que eu não conseguiria usando apenas “!resultSet().next” se você gostar da idéia tenta.