Estou com problemas com minha tela de login…
Sendo que somente a condição “else” é executada, independente do que digito nos campos, tendo o registro no bando ou não.
Segue o trecho do código:
[code] private void fazerLogin(java.awt.event.ActionEvent evt) {
try {
Class.forName(“com.mysql.jdbc.Driver”);
String url = “jdbc:mysql://localhost:3306/gerpro”;
String usuario = “root”;
String senha = “admin”;
Connection con;
con = DriverManager.getConnection(url, usuario, senha);
PreparedStatement ps = con.prepareStatement("SELECT login, senha, departamento FROM cadastro WHERE " +
"login = ? AND senha = ? AND departamento = ? ");
ps.setString(1, cxTxtLogLogin.getText());
ps.setString(2, String.valueOf(cxTxtLogSenha.getPassword()));
ps.setString(3, String.valueOf(comboLogDepartamento.getSelectedItem()));
ResultSet rs = ps.executeQuery();
if (rs.next()){
login.dispose();
}else{
JOptionPane.showMessageDialog(null, "Login Incorreto.\n" +
"Tente novamente.\n","Mensagem do Programa", JOptionPane.ERROR_MESSAGE);
}
}catch (ClassNotFoundException e){
JOptionPane.showMessageDialog(null, "Falha na conexão com o banco de dados.\n" + e.getMessage());
e.printStackTrace();
}catch (SQLException e){
e.printStackTrace();
}
}[/code]
Caso alquem possa me ajudar, fico etenamente grato.
O next so vai retornar true, caso exista algum valor na linha do ResultSet a ser chamada, então, se você diz que sempre ele vai para o else, seria bom ver (debug) o que está chegando nos metodos:
Bom achei melhor mudar de PreparedStatement para Statement.
Agora eu dou um clique no botão e não acontece nada, como se não tivesse código algum.
o código agora está assim:
[code] private void fazerLogin(java.awt.event.ActionEvent evt) {
try {
Class.forName(“com.mysql.jdbc.Driver”);
String url = “jdbc:mysql://localhost:3306/gerpro”;
String usuario = “root”;
String senha = “admin”;
Connection con;
con = DriverManager.getConnection(url, usuario, senha);
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(“SELECT login, senha, departamento FROM cadastro WHERE " +
“login =’”+cxTxtLogLogin.getText()+”’ AND senha =’"+cxTxtLogSenha.getPassword()+"’ AND " +
“departamento =’”+comboLogDepartamento.getSelectedItem()+"’");
if (rs.next()){
login.dispose();
}
}catch (ClassNotFoundException e){
JOptionPane.showMessageDialog(null, "Falha na conexão com o banco de dados.\n" + e.getMessage());
e.printStackTrace();
}catch (SQLException e){
JOptionPane.showMessageDialog(null, "Login Incorreto.\n" + e.getMessage() +
"Tente novamente.\n","Mensagem do Programa", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
} [/code]
caso tenha alguma ideia que possa me ajudar, desde já agradeço
a minha pista continua sendo no que está chegando naqueles metodos get, veja o que está sendo retornado ali, veja o que você tem no banco, ae você vai encontrar o “problema”. ( debuga, ou faz até com
obtendo essas informações você pode fazer a mesma consulta no seu banco e checar la o porque que não está sendo retornado ! [/quote]
Porém o resultado foi positivo.
Ou seja, o login retornou correto, a senha criptografada e o departamento correto.
Caso tenha outra ideia, por favor me ajude.
no segundo post você retirou a parte do else ou foi impressão minha ? o que está acontecendo agora ? antes ele sempre caia no else é isso e agora ele não faz nada é por ae ?
nao sei se estou passando por cima de algo, mas poderia dizer que com relação ao código está OK, a minha pista era quando tu fosse fazer a tua consulta os parametros estivem com algo diferente do que está no banco.
String sql = "SELECT login, senha, departamento FROM cadastro WHERE " +
"login ='"+cxTxtLogLogin.getText()+"' AND senha ='"+cxTxtLogSenha.getPassword()+"' AND " +
"departamento ='"+comboLogDepartamento.getSelectedItem()+"';
System.out.println(sql);
ResultSet rs = stm.executeQuery(sql);
...
quem sabe não é alguma onda dessas aspas, ae tu pega o sql que vai sair no teu terminal copia e cola no banco fazendo a consulta pra ver o que está errado!
O codigo sem comparar o JPasswordField funciona, mas quando eu o coloco não.
Ou seja, o problema está sendo na comparação do JPasswordField com os dados inseridos no banco de dados.
Talvez seja pela criptografia do campo JPasswordField quando inserido no banco de dados, ao qual, modifica os valores colocando carcteres a mais ou a menos.
Caso tenha alquma idéia sobre isso agradeço muito.
E me desculpe o incomodo, mas é que estou apanhando e muito nessa parte do código.
A parte do código sem o JPasswordField ao qual funciona é a seguinte:
[code] private void fazerLogin(java.awt.event.ActionEvent evt) {
try {
Class.forName(“com.mysql.jdbc.Driver”);
String url = “jdbc:mysql://localhost:3306/gerpro”;
String usuario = “root”;
String senha = “admin”;
Connection con;
con = DriverManager.getConnection(url, usuario, senha);
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(“SELECT login, departamento FROM cadastro WHERE " +
“login =’”+cxTxtLogLogin.getText()+”’ AND " +
“departamento =’”+comboLogDepartamento.getSelectedItem()+"’");
if (rs.next()){
login.dispose();
}
}catch (ClassNotFoundException e){
JOptionPane.showMessageDialog(null, "Falha na conexão com o banco de dados.\n" + e.getMessage());
e.printStackTrace();
}catch (SQLException e){
JOptionPane.showMessageDialog(null, "Login Incorreto.\n" + e.getMessage() +
"Tente novamente.\n","Mensagem do Programa", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}[/code]
o seu getPassword() é por um acaso de um JPasswordField ?
se sim, cara esse metodo retorna um array de char[]
ou seja, você vai precisar fazer
String login = cxTxtLogLogin.getText();
String senha = new String(cxTxtLogSenha.getPassword());
String departamento = comboLogDepartamento.getSelectedItem(); // nao sei se é String, fiz imaginando isso, se nao for tu altera ae !
String sql = "SELECT login, senha, departamento FROM cadastro WHERE " +
"login ='"+login+"' AND senha ='"+senha+"' AND " +
"departamento ='"+departamento+"';
ResultSet rs = stm.executeQuery(sql);
...
Tive que altera como era inserido no banco de dados da seguinte forma:
Colocando a linha de codigo abaixo:
Me dando assim a possibilidade de compara-la na consulta. da maneira em que me falou:
[code] String log = cxTxtLogLogin.getText();
String sen = new String(cxTxtLogSenha.getPassword());
String dep = (String) comboLogDepartamento.getSelectedItem();
String sql = “SELECT login, senha, departamento FROM cadastro WHERE " +
“login =’”+log+”’ AND senha =’"+sen+"’ AND " +
“departamento =’”+dep+"’";