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.
[code]public void ChecarLogin(String user, String pass) {
try {
String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, user);
stmt.setString(2, pass);
ResultSet rs = 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 (SQLException e) {
JOptionPane.showMessageDialog(null, "Houve algum erro no Login" + e);
}
}
[/code]
No evento do botão:
private void jBLogarActionPerformed(java.awt.event.ActionEvent evt) {
try {
ManipulaDAO obj = new ManipulaDAO();
obj.ChecarLogin(this.jtUsuario.getText(), this.jtSenha.getText());
this.dispose();
new jFramePrincipal().setVisible(true);
// TODO add your handling code here:
} catch (SQLException ex) {
Logger.getLogger(jFrameLogin.class.getName()).log(Level.SEVERE, null, ex);
}
}
CaioNascimento,
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.
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?
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.
Tecnicamente seria assim!
[code] public boolean ChecarLogin(String user, String pass) {
try {
String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, user);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
if (user.equals(user) && pass.equals(pass)) {
JOptionPane.showMessageDialog(null, "Logado");
rs.close();
stmt.close();
return true;
} else{
JOptionPane.showMessageDialog(null, "Usuário ou Senha incorreto");
return false;
}
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, “Houve algum erro no Login” + e);
}
} [/code]
No evento do botão:
[code]private void jBLogarActionPerformed(java.awt.event.ActionEvent evt) {
try {
ManipulaDAO obj = new ManipulaDAO();
if(obj.ChecarLogin(this.jtUsuario.getText(), this.jtSenha.getText())){
this.dispose();
new jFramePrincipal().setVisible(true);
// TODO add your handling code here:
}
} catch (SQLException ex) {
Logger.getLogger(jFrameLogin.class.getName()).log(Level.SEVERE, null, ex);
}
} [/code]
A maneira citada pelo Luiz seria a mais indicada, mas não se esqueça de fazer a comparação corretamante.
Tente isso :
public boolean ChecarLogin(String user, String pass) {
String resultPass = null;
String resultUser = null;
try {
String sql = "Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, user);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
resultPass = rs.getString("password"); // nome de senha campo em seu banco
resultUser = rs.getString("user"); //nome do campo de nome de usuario em seu banco
if (user.equals(resultUser) && pass.equals(resultPass)) {
JOptionPane.showMessageDialog(null, "Logado");
rs.close();
stmt.close();
return true;
} else{
JOptionPane.showMessageDialog(null, "Usuário ou Senha incorreto");
return false;
}
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Houve algum erro no Login" + e);
}
}
sim:
[code]
public boolean checarLogin(String user, String pass) throws SQLException {
boolean isValido=false; // a variavel que vai ter o resultado
String sql = “Select idUsuario,idSenha from usuarios WHERE idUsuario=? AND idSenha =?”;
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, user);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
isValido = true;
} else{
isValido=false;
}
rs.close();
stmt.close();
return isValido;
}[/code]
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)
ManipulaDAO obj = new ManipulaDAO();
if (obj.checarLogin(this.jtUsuario.getText(), this.jtSenha.getText()) ) {
this.dispose();
new jFramePrincipal().setVisible(true);
} else {
//mostra mensagem de erro e o q vc quizer mais
}
Tenta entender pra implementar…
A maneira como o Luiz postou realmente é a melhor por ser a mais otimizada… não copie somente, tente compreender…
Puts bem simples, porém eficaz…HEH
Valeu gente Brigadão!