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:
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:
e confirma se isso iria devolver alguma valor na consulta.
t+
wamarra
olá sudeval!
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:
caso tenha alguma ideia que possa me ajudar, desde já agradeço
Wesley Marra
sudeval
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 !
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.
Desde já agradeço mesmo a força.
Abraços
Wesley Marra
sudeval
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.
Stringsql="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!
espero ter ajudado !
wamarra
E ae Sudeval,
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:
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
Stringlogin=cxTxtLogLogin.getText();Stringsenha=newString(cxTxtLogSenha.getPassword());Stringdepartamento=comboLogDepartamento.getSelectedItem();// nao sei se é String, fiz imaginando isso, se nao for tu altera ae !Stringsql="SELECT login, senha, departamento FROM cadastro WHERE "+"login ='"+login+"' AND senha ='"+senha+"' AND "+"departamento ='"+departamento+"'; ResultSet rs = stm.executeQuery(sql);...
wamarra
a
wamarra
oi Sudeval,
Lembrando que fico muito agradecido a ajuda que está me fornecendo.
Quanto ao codigo, seria isso:
privatevoidfazerLogin(java.awt.event.ActionEventevt){try{Class.forName("com.mysql.jdbc.Driver");Stringurl="jdbc:mysql://localhost:3306/gerpro";Stringusuario="root";Stringsenha="admin";Connectioncon;con=DriverManager.getConnection(url,usuario,senha);Statementstm=con.createStatement();Stringlog=cxTxtLogLogin.getText();Stringsen=newString(cxTxtLogSenha.getPassword());Stringdep=(String)comboLogDepartamento.getSelectedItem();Stringsql="SELECT login, senha, departamento FROM cadastro WHERE "+"login ='"+log+"' AND senha ='"+sen+"' AND "+"departamento ='"+dep+"'";ResultSetrs=stm.executeQuery(sql);if(rs.next()){login.dispose();}else{JOptionPane.showMessageDialog(null,"Login Incorreto.\nTente novamente.","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);}}catch(ClassNotFoundExceptione){JOptionPane.showMessageDialog(null,"Falha na conexão com o banco de dados.\n"+e.getMessage());e.printStackTrace();}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Login Incorreto.\n"+e.getMessage()+"Tente novamente.\n","Mensagem do Programa",JOptionPane.ERROR_MESSAGE);e.printStackTrace();}}
Pois agora só cai no else novamente.
Caso tenha algo errado me dê um alô.
Novamente valeu
wamarra
Cara até que em fim consegui!!!!
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:
Stringlog=cxTxtLogLogin.getText();Stringsen=newString(cxTxtLogSenha.getPassword());Stringdep=(String)comboLogDepartamento.getSelectedItem();Stringsql="SELECT login, senha, departamento FROM cadastro WHERE "+"login ='"+log+"' AND senha ='"+sen+"' AND "+"departamento ='"+dep+"'";ResultSetrs=stm.executeQuery(sql);
Valeu mesmo a força
Abraços
Wesley Marra
sudeval
legal!
agora tu ja pode voltar a usar o prepared… que é mais feliz e limpo
t+
Ironlynx
E de preferência usando uma classe separada para não misturar o acesso ao BD com a GUI!
wamarra
Valeu Galera,
Brigadão mesmo.
Forte Abraço
Wesley Marra