Estou com uma pequena dúvida de como fazer para verificar se a senha pertence ao usuario e vice-versa em uma tela de login.
Estou usando o Hibernate com Netbeans e Banco SQL Server 2008
Na tela de login tenho o seguinte código no botão entrar:
if (txUsuario.getText().isEmpty() || Password.getPassword().length == 0) {
JOptionPane.showMessageDialog(this, "Não é possível efetuar login com campos vazios!");
} else {
try {
usuarios = UsuarioDAO.fabricaUsuarioDAO().BuscaSenhaELogin(txUsuario.getText(), Password.getPassword());
//Neste if preciso informa se usuario e senha conferem.
if () {
JOptionPane.showMessageDialog(this, "SEJA BEM VINDO AO SISTEMA!");
TelaPrincipal CodTelaPrincipal = new TelaPrincipal();
CodTelaPrincipal.setVisible(true);
dispose();
} else {
JOptionPane.showMessageDialog(this, "Usuário e/ou senha incorreto(s)!");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Erro ao efetuar login! Causa: " + e);
}
}
}
Neste metodo BuscaSenhaELogin fica na UsuarioDAO, eis o codigo:
public List<Usuario> BuscaSenhaELogin(String usuario, char[] senha) {
String VerificacaoLogin = "FROM Bibliotecario WHERE TxLogin like '" + usuario + "'and NuSenhaAcesso like'" + senha + "'";
return getSession().createQuery(VerificacaoLogin).list();
}
Bem… Se no teste usuarios.getSize() ele vai bater no else então é porque o banco não tá retornando nada…
Sobre o buscaSenhaELogin() aparentemente está correto, as únicas coisas que questiono é que você poderia usar uniqueResult() para retornar apenas um resultado em vez de list(), a outra coisa é: pra quê usar um array de char se uma String dá no mesmo? Se você tivesse limitando o tamanho da string ainda seria entendível isso mas como não está então pode passar String usuario, String senha sem problemas…
Password.getPassword() ??? Pelo o que eu entendi ‘txUsuario’ e ‘Password’ são as variáveis que representam os campos de texto na tela certo? Então se você quer pegar o valor que está no campo ‘Password’ você tem que usar o método getText() também pois esse método é o que faz você obter o valor do JTextField, ok? Provavelmente deu null porquê ele tentou chamar esse método aí (getPassword()) e esse métódo não existe para essa variável (Password) que é um JTextField, entendeu? =)
Algumas dicas:
[list]Tem horas que você foge do padrão de escrita de código, lembre-se: nomes de métodos começam sempre em minúsculo. Errado: BuscaSenhaELogin(), Certo: buscaSenhaELogin()[/list]
[list]Mesma coisa pra variáveis. Errado: Password, VerificacaoLogin, Certo: password, verificacaoLogin[/list]
[list]Não sei se você está usando algum framework de persistência como Hibernate ou JPA, essas ferramentas ajudam muito a agilizar a forma de mexer no banco de dados, na maioria das vezes ausentando você de usar essas consultas SQL no código… Se tiver usando, dá uma olhada na API Criteria, se não estiver, dá uma olhada nesse artigo do GUJ ensinando a usar PreparedStatement, fica muito mais elegante, seguro e vai te dar menos dor de cabeça =) http://guj.com.br/articles/115[/list]
[list]Ainda continuo não entendendo porquê não deu certo trocar o char[] senha por String senha, basta você efetuar as mudanças de todos os char[] senha por String senha, uma string já representa um array de char dinâmico que aumenta e diminui conforme a necessidade, a gente usa char geralmente quando se quer limitar o tamanho, por exemplo char[10]… Pra você ver, os campos JTextField da sua aplicação vão retornar um string quando você der um getText pra obter o valor que tá lá ;)[/list]