Bom,e que estou com problema na validação ,sempre quando eu digito login e senha independente se estar certo ou errado ele me aplica essa mensagem sempre
,"O login/senha atual não confere.","Validação"
Aqui e meu botão
try{Validacaov=newValidacao();if(!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getPassword().toString()))){JOptionPane.showMessageDialog(this,"O login/senha atual não confere.","Validação",JOptionPane.WARNING_MESSAGE);jPasswordFieldSenha.requestFocus();jPasswordFieldSenha.selectAll();return;}else{JOptionPane.showMessageDialog(this,"Logado no Sistema","Validação",JOptionPane.WARNING_MESSAGE);}}catch(SQLExceptionex){Logger.getLogger(TelaLoguin.class.getName()).log(Level.SEVERE,null,ex);}// TODO add your handling code here:}
Classe dao.
publicBooleanlogin(Stringusuario,Stringsenha)throwsSQLException{booleanexiste=false;PreparedStatementstm=conexao.prepareStatement("SELECT * FROM usuario WHERE usuario.usuario = ? AND senha = ?");stm.setString(1,usuario);stm.setString(2,senha);ResultSetrs=stm.executeQuery();Usuariod=newUsuario();if(rs.next()){existe=true;}returnexiste;}
Obrigado.
Se der para alguém me mostrar em como eu poderia fazer com perfil de usuário ou administrador ,caso um dos dois estiver logo ficaria grato.
Faz tempo que não utilizo consulta direto com sql.Acredito que o problema esta no teu if.
quando você faz if(rs.next()), ele vai para o proximo registro e como você ja esta no registro que buscou no banco ele não tem mais para onde ir e então diz que não existe.
tenta colocar antes do teu if o código abaixo, assim ele vai para antes do primeiro registro, quando você fizer o if ele vai para o primeiro e então vai existir.
rs.beforeFirst();
F
flavio56
Ola
Essa código abaixo não esta funcionando ele esta pedindo void.
rs.beforeFirst();
Obrigado
R
rpassos81
a principio é esta codigo mesmo. Voce esta utilizando os import correto?
para o resultset por exemplo é
importjava.sql.ResultSet;
Veja um código que achei aqui e ve se te ajuda.
publicStringgetEcfCaixa(){retorno="";IntegertotalRegistros;List<EcfCaixa>listEcfCaixa;EcfCaixaecfCaixa;try{stm=bd.conectar().createStatement();rs=stm.executeQuery("select COUNT(*) as TOTAL from ECF_CAIXA");rs.first();totalRegistros=rs.getInt("TOTAL");if(totalRegistros>0){stm=bd.conectar().createStatement();rs=stm.executeQuery("select * from ECF_CAIXA");rs.beforeFirst();listEcfCaixa=newArrayList<>();while(rs.next()){ecfCaixa=newEcfCaixa();ecfCaixa.setId(BigInteger.valueOf(rs.getInt("ID")));if(rs.getDate("DATA_CADASTRO")!=null){ecfCaixa.setDataCadastro(rs.getDate("DATA_CADASTRO").toString());}else{ecfCaixa.setDataCadastro("");}ecfCaixa.setNome(rs.getString("NOME"));listEcfCaixa.add(ecfCaixa);}retorno=escreveXMLEcfCaixa(listEcfCaixa);}returnretorno;}catch(Exceptione){e.printStackTrace();returne.getMessage();}finally{bd.desconectar();}}
F
flavio56
Cara ,não me ajudou .estou com problema nesse login,não sei pq esta dano esse erro.
Obrigado
R
rpassos81
faz o seguinte, altera o código
public Boolean login(String usuario, String senha) throws SQLException{
boolean existe = false;
PreparedStatement stm = conexao.prepareStatement("SELECT * FROM usuario WHERE usuario.usuario = ? AND senha = ?");
stm.setString(1, usuario);
stm.setString(2, senha);
ResultSet rs = stm.executeQuery();
Usuario d = new Usuario();
if(rs.next()){
existe = true;
}
return existe;
}
por
public Boolean login(String usuario, String senha) throws SQLException{
boolean existe = false;
Statement stm = conexao.createStatement();
ResultSet rs = stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = " + usuario + " AND senha = " + senha);
Usuario d = new Usuario();
if(rs.next()){
existe = true;
}
return existe;
}
fabiocortolan
Posso estar enganado mas vc não precisa de aspas simples nos textos mesmo com o ponto de interrogação?
ResultSetrs=stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = '?' AND senha = '?'");// aki não é necessário aspas?// No caso do exemplo do rpassos81 tenho certeza d q é necessário colocar as aspas simplesResultSetrs=stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = ' "+usuario+" ' AND senha = ' "+senha+" ' ");
F
flavio56
Galera Ainda estou com mesmo problema,Ele mostra a mesma mensagem , que o loguin e senha atual nao confere,mesmo eu colocando os mesmo vlores que contem no banco.
Aqui esta os codigo que modifiquei.
Minha classe dao
publicBooleanlogin(Stringusuario,Stringsenha)throwsSQLException{booleanexiste=false;Statementstm=conexao.createStatement();ResultSetrs=stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = ' "+usuario+" ' AND senha = ' "+senha+" ' ");Usuariod=newUsuario();if(rs.next()){existe=true;}returnexiste;}}
Aqui e meu form
try{Validacaov=newValidacao();if(!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getPassword().toString()))){JOptionPane.showMessageDialog(this,"O login/senha atual não confere.","Validação",JOptionPane.WARNING_MESSAGE);jPasswordFieldSenha.requestFocus();jPasswordFieldSenha.selectAll();return;}else{JOptionPane.showMessageDialog(this,"Logado no Sistema","Validação",JOptionPane.WARNING_MESSAGE);}}catch(SQLExceptionex){Logger.getLogger(TelaLoguin.class.getName()).log(Level.SEVERE,null,ex);}// TODO add your handling code here:}
obrigado galera.
fabiocortolan
Vc colocou espaço entre as aspas simples e as duplas, dessa forma vc está fazendo a busca pelo usuário com espaço no nome, ex:
Usuário: ‘Fabio’
Está pesquisando por ’ Fabio ’ (com espaços)
// Modifique seu código de:ResultSetrs=stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = ' "+usuario+" ' AND senha = ' "+senha+" ' ");// ParaResultSetrs=stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = '"+usuario+"' AND senha = '"+senha+"' ");
Obs.: no último post separei as aspas com espaço e só agora percebi, desculpe por ter separado mas qdo coloquei junto pensei q ficaria difícil de perceber q tinha as aspas simples!
F
flavio56
Fabio,ainda continua com erro,sempre mostrando a mensagem:O login/senha atual não confere.", "Validação. muito estranho
obrigado a quem estar me ajudando.
fabiocortolan
Vc já fez um debug para ver se os parâmetros passados na linha abaixo estão corretos?
Outra coisa, a senha q vc salvou no banco é criptografada? Já tentou utilizar o comando diretamente no gerenciador do banco de dados p/ ver se retorna alguma informação?
F
flavio56
eu fiz um debug da linha que vc me mostrou .mas não deu nenhum problema
aqui meu banco php ele esta retornando sim um valor.
fiz um select tmb para ver se retorna.
3flavio[C@495bb7b7
A senha e criptografada sim, eu jogo a senha crip mas mesmo assim nada.ele só muda o mensagem quando mudo o boolean,coloco o primeiro true.ai ele so me da loguin correto mesmo eu colocando errado.
fabiocortolan
Vc disse q a senha no banco é criptgrafada, mas pelo q vi vc tá passando a senha sem criptografia na consulta, vc comparou os valores do debug com o resultado do banco de dados? O usuário e senha estão idênticos mesmo vc passando sem criptografia?
F
flavio56
Ate sem criptografia esta dano esse erro.
F
flavio56
Agora sei o que era. o campo formatado que eu estava usando estava passando o valor errado para comparacao.
Com o campo Jpassword.,cada valor q eu passo ele muda a senha pq?
Agora eu te pergunto.Como eu posso usar o campo password do netbens, para ele não passar os valores diferentes na hora do login.pq eu vou ter que usar o campo password.
Se puder me ajudar eu agradeço.
F
flavio56
Galera eu não estou conseguindo pegar o campo formatado do banco e comparar com a senha do login que q eu digito.Se eu jogar um valor 123 no banco e digitar no login 123 ele loga
mas ,não e assim eu quero o campo invés de aparecer 123 apareça *** tem que aparecer os asteriscos .
Meu botão
try{Validacaov=newValidacao();if(!(v.login(jTLoguin.getText(),jPasswordFieldSenha.getText()))){JOptionPane.showMessageDialog(this,"O login/senha atual não confere.","Validação",JOptionPane.WARNING_MESSAGE);jPasswordFieldSenha.requestFocus();jPasswordFieldSenha.selectAll();System.out.println();return;}else{JOptionPane.showMessageDialog(this,"Logado no Sistema","Validação",JOptionPane.WARNING_MESSAGE);newOutraTela().setVisible(true);}}catch(SQLExceptionex){Logger.getLogger(TelaLoguin.class.getName()).log(Level.SEVERE,null,ex);}
Meu dao
publicBooleanlogin(Stringusuario,Stringsenha)throwsSQLException{booleanexiste=false;Statementstm=conexao.createStatement();ResultSetrs=stm.executeQuery("SELECT * FROM usuario WHERE usuario.usuario = '"+usuario+"' AND senha = '"+senha+"' ");System.out.println(usuario);System.out.println(senha);if(rs.next()){existe=true;}returnexiste;}
Como eu posso resolver isto?Alguém me ajuda .
fabiocortolan
Algo q eu não tinha me atentado antes, troque o getText() do JPasswordField por getPassword(), o único problema é q vc terá q fazer uma conversão para String pois ele retorna char[], pode fazer dessa forma:
Quando eu digito a senha 123 no login dar errado .ele nao passa o mesmo valor do banco que e [C@f37742d.
por que já dei um system.print e me retorna 123.
Obrigado .
fabiocortolan
Mas como vc gravou esse valor no banco, vc pegou o valor do getPassword() do JPasswordField? Se for isso não vai funcionar mesmo, faz sua própria criptografia para salvar no banco, segue um dos muitos exemplos para criptografar senhas q vc encontra http://www.guj.com.br/articles/32.
Depois de criptografar e gravar no banco, leia o texto digitado (ex: 123) faça a mesma criptografia e compare com o valor salvo.