Duvida em fazer uma comparação de um banco de dados. (RESOLVIDO!)

Senhores, estou com o seguinte problema.

tenho um cadastro de usuario, e com esse cadastro uso para acessar o programa, atraves de uma tela de login.O problema é que não consigo fazer o sistema comparar a senha digitada.Quando eu comento a linha ( && (TxtSenha.getText().equals(usuario.getSenha()))){ ) ele faz a comparação correta com o usuario. O atributo senha é do tipo String. Como eu resolvo esse problema e faço para que compare o Nome e a Senha simultaneamente. Muito obrigado!Segue abaixo o codigo que estou trabalhando.

    private void BtnEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    SessionFactory sfac = new Configuration().configure().buildSessionFactory();
    Session se = sfac.openSession();
    Transaction tx = se.beginTransaction();

    Query sql = se.createQuery("from Usuario where Nome = (?)").setString(0,TxtUsuario.getText());
    Usuario usuario = (Usuario) sql.uniqueResult();
        
    if((TxtUsuario.getText().equals(usuario.getNome()))
            && (TxtSenha.getText().equals(usuario.getSenha()))){       [color=red]// ->não consigo fazer essa comparação.[/color]
        
        JOptionPane.showMessageDialog(this,"Bem vindo ao Gerenciador Pessoal!");
    
        new frmPrincipal().setVisible(true);
        this.setVisible(false);
    }
    else{
        JOptionPane.showMessageDialog(this,"Usuario ou senha incorretos.");

        TxtSenha.setText(null);
        TxtUsuario.setText(null);
    }
    }

Da algum erro ?? Você chegou a depurar os valores que estão retornando dentro da consulta do criteria ?

Não deu erro…simplesmente ele não faz nada…

Você não consegue depurar e ver por onde esta passando. Assim fica muito genérico para poder ajudar…

Já ouviu falar em short-circuit operators?

Então, java possui:

& , |, &&, ||

&& , || testam as duas condições no seu teste.
Enquanto & , | se contentam com o "left-hand " ou seja, a primeira parte da condição.

Então parece que o problema está na sua senha.

Coloca um System.out.print(TxtSenha.getText()); e um System.out.print(usuario.getSenha()); antes do teste if, e ve se os valores são iguais mesmo.

Se TxtSenha for do tipo javax.swing.JPasswordField

então você deve substituir

TxtSenha.getText()

por

TxtSenha.getPassword()

Espero ter ajudado.

Você pode tambem tentar fazer a validação do logine senha separado para verificar se o problema é na sixtaxe ou na sua lógica

if((TxtUsuario.getText().equals(usuario.getNome())) { //Põe algo aqui para dizer se o login esta correto ou não e manda armazenar isso }
e

if(TxtSenha.getText().equals(usuario.getSenha())){ //Põe algo aqui tb para dizer se a senha é valida tb. ai armazena. e manda exibir. Se a validação der certo, então o problema é no If composto que você fez. }

[quote=leorbarbosa]Já ouviu falar em short-circuit operators?

Então, java possui:

& , |, &&, ||

&& , || testam as duas condições no seu teste.
Enquanto & , | se contentam com o "left-hand " ou seja, a primeira parte da condição.

[/quote]

É ao contrário!

&& e || só testam o que necessitam até terem um resultado que lhes permita saber o resultado final da expressão.
Um && para no primeiro false e devolve false
Um || para no primeiro true e devolve true.

& e | testam todas as condições independentemente de já saberem o resultado que vai ser retornado no final.

[quote=pmlm][quote=leorbarbosa]Já ouviu falar em short-circuit operators?

Então, java possui:

& , |, &&, ||

&& , || testam as duas condições no seu teste.
Enquanto & , | se contentam com o "left-hand " ou seja, a primeira parte da condição.

[/quote]

É ao contrário!

&& e || só testam o que necessitam até terem um resultado que lhes permita saber o resultado final da expressão.
Um && para no primeiro false e devolve false
Um || para no primeiro true e devolve true.

& e | testam todas as condições independentemente de já saberem o resultado que vai ser retornado no final.[/quote]

Perfeita observação :slight_smile:

Muito obrigado…
deu certo senhores…para resolver, passei o atributo Senha para String, e usei o seguinte codigo.


    SessionFactory sfac = new Configuration().configure().buildSessionFactory();
    Session se = sfac.openSession();
    Transaction tx = se.beginTransaction();

    Query sql = se.createQuery("from Usuario where Nome = (?)").setString(0,TxtUsuario.getText());
    Usuario usuario = (Usuario) sql.uniqueResult();

    String A = usuario.getNome();
    String B = usuario.getSenha();

    //JOptionPane.showMessageDialog(this, A);
    //JOptionPane.showMessageDialog(this, B);

    try{
    if(TxtUsuario.getText().equals(A) && (TxtSenha.getText().equals(B))){ 
        JOptionPane.showMessageDialog(this,"Bem vindo ao Gerenciador Pessoal!");
    
        new frmPrincipal().setVisible(true);
        this.setVisible(false);
    }
}
    catch(Exception erro){
        JOptionPane.showMessageDialog(this,"Usuario ou senha incorretos.");

        TxtSenha.setText(null);
        TxtUsuario.setText(null);
}