Por que objeto.setNome() nao está enviando?

15 respostas
C

pessoal nao sei porque justamente nesse caso nao está enviando
eis o código

public boolean Login(String login, String senha){
        boolean status = false;
        String login1, senha1;
            connection = ConnectionFactory.getConnection();
            sql =  "SELECT * FROM usuarios WHERE "
                    + "usu_login = ? AND "
                    + "usu_senha = ?";
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setString(1, login);
            stmt.setString(2, senha);
            resultSet = stmt.executeQuery();
            if(resultSet.next()){
                login1 = resultSet.getString("usu_login");
                senha1 = resultSet.getString("usu_senha");
                if(login1.equals(login) && senha1.equals(senha)){
                    Usuario usuario = new Usuario();
                    String user = resultSet.getString("usu_nome");
                    usuario.setNome(user);
                    //JOptionPane.showMessageDialog(null, "Usuario: "+user);
                    status =  true;
                }
            }
            else
                JOptionPane.showMessageDialog(null, "Login ou senha inválido "); 
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Login ou senha inválido \nErro: "+ex.getMessage());
        }
            
        
        return status;
        
    }

quando eu dou o comando usuario.getNome();
nao vem nada... alguem pode me ajudar?

Gratoo

15 Respostas

androidelp

Ele retornou algum erro?
Tente usar o depurador?

pelo que estou vendo você está tentando fazer uma query que busca senha e login, nçao sei se este jeito está certo.

Se for sql ou mysql tente assim

sql = "select * from usuarios where usu_login = '"+VariavelLogin+"' and usu_senha = '"+Varia+ "'";
drsmachado
cbcarlos07:
pessoal nao sei porque justamente nesse caso nao está enviando eis o código
public boolean Login(String login, String senha){
        boolean status = false;
        String login1, senha1;
            connection = ConnectionFactory.getConnection();
            sql =  "SELECT * FROM usuarios WHERE "
                    + "usu_login = ? AND "
                    + "usu_senha = ?";
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setString(1, login);
            stmt.setString(2, senha);
            resultSet = stmt.executeQuery();
            if(resultSet.next()){//Até onde entendi, só vai entrar aqui se e somente se houver um resultado, ou seja, se usu_login = login e usu_senha = senha
                login1 = resultSet.getString("usu_login");
                senha1 = resultSet.getString("usu_senha");
                if(login1.equals(login) && senha1.equals(senha)){//Assim sendo, se entrou no if, por que essa validação aqui???
                    Usuario usuario = new Usuario();//Não sei onde você chama esse método, só posso dizer que este aqui só vai viver até este if acabar. 
                    String user = resultSet.getString("usu_nome");
                    usuario.setNome(user);
                    //JOptionPane.showMessageDialog(null, "Usuario: "+user);
                    status =  true;
                }
            }
            else
                JOptionPane.showMessageDialog(null, "Login ou senha inválido "); 
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Login ou senha inválido \nErro: "+ex.getMessage());
        }
            
        
        return status;
        
    }

quando eu dou o comando usuario.getNome();
nao vem nada... alguem pode me ajudar?

Gratoo

LucasHP

Seria interessante você dar um println nas variaveis login1 e senha1 para ver se está recuperando corretamente do banco. Eu suponho que o erro seja esse.

Abraços.

drsmachado

LucasHP:
Seria interessante você dar um println nas variaveis login1 e senha1 para ver se está recuperando corretamente do banco. Eu suponho que o erro seja esse.

Abraços.


Supôs errado.
Olhe estas linhas

if(login1.equals(login) && senha1.equals(senha)){//Assim sendo, se entrou no if, por que essa validação aqui???  
                   Usuario usuario = new Usuario();//Não sei onde você chama esse método, só posso dizer que este aqui só vai viver até este if acabar.   
                   String user = resultSet.getString("usu_nome");  
                   usuario.setNome(user);  
                   //JOptionPane.showMessageDialog(null, "Usuario: "+user);  
                   status =  true;  
               }

E me diga se é isto mesmo…

drsmachado

androidelp:
Ele retornou algum erro?
Tente usar o depurador?

pelo que estou vendo você está tentando fazer uma query que busca senha e login, nçao sei se este jeito está certo.

Se for sql ou mysql tente assim

sql = "select * from usuarios where usu_login = '"+VariavelLogin+"' and usu_senha = '"+Varia+ "'";


A query está certa no modo como está, ele usa PreparedStatement e a forma como você indicou é uma péssima prática de programação.

C

[quote=cbcarlos07]pessoal nao sei porque justamente nesse caso nao está enviando
eis o código

public boolean Login(String login, String senha){
        boolean status = false;
        Usuario usuario = null;
        String user = null;
        String login1, senha1;
            connection = ConnectionFactory.getConnection();
            sql =  "SELECT * FROM usuarios WHERE "
                    + "usu_login = '"+login+"' AND "
                    + "usu_senha = '"+senha+"'";
        try {
            
            stmt = connection.prepareStatement(sql) ;           
            resultSet = stmt.executeQuery();
            if(resultSet.next()){ //verifica se  retorno
                login1 = resultSet.getString("usu_login");
                senha1 = resultSet.getString("usu_senha");
                if(login1.equals(login) && senha1.equals(senha)){ //compara se está exatamente igual MAIUSCULA e minúscula
                    usuario = new Usuario(); //chama a classe para setar no método setNome o nome do usuario
                     resultSet.getString("usu_nome");
                    usuario.setNome(user);
                    //JOptionPane.showMessageDialog(null, "Usuario: "+user);
                    status =  true;
                }
            }
            else
                JOptionPane.showMessageDialog(null, "Login ou senha inválido "); 
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Login ou senha inválido \nErro: "+ex.getMessage());
        }
            
        
        return status;
        
    }        
    }
como o MySQL nao é case senstive exemplo: se a minha senha é 'CARLOS' e eu digitasse 'carlos' ele aceitaria Por isso estou fazendo outra verificação no caso do
if (login.equals(login2) && senha.equals(senha2)){

}
Não retorna erro.
boolean status = controllerUsuario.login("admin", "admin");
        if(status == true){
            JOptionPane.showMessageDialog(null, "Bem vindo "+usuario.getNome());
            
        }
A mensagem retorna Bem Vindo null
drsmachado

Camarada, entenda uma coisa.
No código do tópico original, você declarava e instanciava o objeto usuario dentro do if. Ou seja, o escopo dele era até que o if acabasse.
Neste último, você o declara dentro do método Login (sim, com nome fugindo da especificação javaBeans). Isso aumenta o escopo dele, mas não faz milagres. Ou seja, quando o return é chamado, o usuario (objeto do método Login) morre.
Se você quer que o nome seja recebido, precisa fazer com que o mesmo deixe o método (o que não é possível, tendo em vista que você informa que o retorno é um boolean).
Sugestão, modifique o método, faça-o retornar o próprio objeto de usuario, caso exista e, caso não, retorne null.

C

drsmachado:
Camarada, entenda uma coisa.

Sugestão, modifique o método, faça-o retornar o próprio objeto de usuario, caso exista e, caso não, retorne null.

É que eu tentei fazer uma mundança pra tentar fazer o milagre como vc disse rsrs

Mas tentarei fazer o que vc me sugeriu … Vlw

C

tentei fazer assim:

public Usuario loginUser(String login, String senha){
        Usuario usuario =  null;
        String user = null;
        String login1, senha1;
            connection = ConnectionFactory.getConnection();
            sql =  "SELECT * FROM usuarios WHERE "
                    + "usu_login = '"+login+"' AND "
                    + "usu_senha = '"+senha+"'";
        try {
            
            stmt = connection.prepareStatement(sql) ;           
            resultSet = stmt.executeQuery();
            if(resultSet.next()){
                login1 = resultSet.getString("usu_login");
                senha1 = resultSet.getString("usu_senha");
                if(login1.equals(login) && senha1.equals(senha)){
                     usuario =  new Usuario();
                     user = resultSet.getString("usu_nome");
                     usuario.setNome(user);
                    // JOptionPane.showMessageDialog(null, "Usuario: "+user);
                }
            }
            else
                JOptionPane.showMessageDialog(null, "Login ou senha inválido "); 
        } catch (SQLException ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Login ou senha inválido \nErro: "+ex.getMessage());
        }
        return usuario;
    }// fim do método Login

Não sei se eu fiz certo.
Porque ainda retornando null.

Help me lol

C

E ai o que acham?

ViniGodoy

Acho que como o drsmachado falou, seu código estava melhor antes, com PreparedStatement. Agora você não só não corrigiu o problema, como também adicionou uma péssima prática de programação ao código, e tornou-o vulnerável a bugs. Por exemplo, tente o login do sr. MacDonald’s.

Eu sugeriria que você use o depurador e rode o programa passo a passo. Aí você observa se o código entrou no if resultSet.next().

Além disso, elimine o if da linha 16:

if(login1.equals(login) && senha1.equals(senha)){

Pois ele é totalmente inútil.

C

Deixa eu ver se eu entendi rsrs…

com o

stmt.prepareStatement(sql);
stmt.setString(1, nome);
stmt.executeQuery();

Ele fica case sensitve?

Por favor perdoem minha inexperiencia;

C

Você sabe porque usuario.getNome();
ta retornando null?

Eu ainda nao entendi…

ViniGodoy

Só por desencargo de consciência, posta sua classe Usuário.

C

Desculpa a demora...
Taí minha classe usuário.

public class Usuario {
    
    private String nome;
    private String login;
    private String senha;    

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
    
}
Criado 18 de dezembro de 2012
Ultima resposta 18 de dez. de 2012
Respostas 15
Participantes 5