Pessoal tenho o método abaixo para validar acesso em um formulário de login. Só que mesmo quando coloco a senha incorreta ele acessa o formulário principal:
Alguém poderia me auxiliar.
publicvoidChecarLogin(Stringuser,Stringpass){
try{
Stringsql="Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";PreparedStatementstmt=this.conexao.prepareStatement(sql);stmt.setString(1,user);stmt.setString(2,pass);ResultSetrs=stmt.executeQuery();if(rs.next()){
if(user.equals(user)&&pass.equals(pass)){
JOptionPane.showMessageDialog(null,"Logado");rs.close();stmt.close();}else{
JOptionPane.showMessageDialog(null,"Usuário ou Senha incorreto");}
}
}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,"Houve algum erro no Login"+e);}
}
O seu método pra validar tem que retornar boolean true quando o usuario e o login forem encontrados no banco , do contrário false.Retornando void ChecarLogin não impede de exebir a tela caso os dados não sejam encontrados no banco.
Daí antes de exibir sua tela vc checa o método de validação.
Outra dica: nesse método de validação não deve-se exibir mensagens ou fazer coisas da interface gráfica, ele deve somente verificar login e senha.
Se a validação for falsa (ChecarLogin for false) vc exibe uma mensagem.
E outra :procure usar nomes de métodos iniciando em minúsculo.
C
CaioNascimento
Luiz,
Valeu pelas dicas NOVATO em java já viu neh…HEHE
Você poderia me dar um exemplo de como ficaria esse meu código com um método boolean?
ederson_js
Olá Caio, pelo que ví o seu método não está comparando o retorno do banco, e sim os mesmos dados que recebeu na invocação do método.
Pos isso sempre entrará no IF.
sammers21
Tecnicamente seria assim!
publicbooleanChecarLogin(Stringuser,Stringpass){try{Stringsql="Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?"; PreparedStatementstmt=this.conexao.prepareStatement(sql); stmt.setString(1,user); stmt.setString(2,pass); ResultSetrs=stmt.executeQuery(); if(rs.next()){if(user.equals(user)&&pass.equals(pass)){JOptionPane.showMessageDialog(null,"Logado"); rs.close(); stmt.close(); returntrue;}else{JOptionPane.showMessageDialog(null,"Usuário ou Senha incorreto"); returnfalse;}}}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Houve algum erro no Login"+e); }}
A maneira citada pelo Luiz seria a mais indicada, mas não se esqueça de fazer a comparação corretamante.
ederson_js
Tente isso :
publicbooleanChecarLogin(Stringuser,Stringpass){StringresultPass=null;StringresultUser=null;try{Stringsql="Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?"; PreparedStatementstmt=this.conexao.prepareStatement(sql); stmt.setString(1,user); stmt.setString(2,pass); ResultSetrs=stmt.executeQuery(); if(rs.next()){resultPass=rs.getString("password"); // nome de senha campo em seu bancoresultUser=rs.getString("user"); //nome do campo de nome de usuario em seu bancoif(user.equals(resultUser)&&pass.equals(resultPass)){JOptionPane.showMessageDialog(null,"Logado"); rs.close(); stmt.close(); returntrue;}else{JOptionPane.showMessageDialog(null,"Usuário ou Senha incorreto"); returnfalse;}}}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Houve algum erro no Login"+e); }}
luiz_renato
sim:
publicbooleanchecarLogin(Stringuser,Stringpass)throwsSQLException{booleanisValido=false;//avariavelquevaiteroresultadoStringsql="Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";PreparedStatementstmt=this.conexao.prepareStatement(sql);stmt.setString(1,user);stmt.setString(2,pass);ResultSetrs=stmt.executeQuery();if(rs.next()){isValido=true;}else{isValido=false;}rs.close();stmt.close();returnisValido;}
No evento do teu form vc chama (use dentro de um bloco try/catch pois lança SQLException e não vou entrar nesse detalhe)