[RESOLVIDO] Pegar outro campo além do Login e Senha

Olá! Minha dúvida é como durante o login, pegar um terceiro dado (ou seja, além de usuário e senha) para poder ser manipulado futuramente. Atualmente, eu pego tudo que é digitado no form e utilizo, porém gostaria de refinar pegando o nome real do usuário e exibir.
Exemplo: Login = WSGUJ, Senha = 123456, Nome = Wilian.

Esse é o código que utilizo no DAO:

public boolean checkLogin(String login, String senha) {
        User u = new User();
        Connection con = ConnectionFactory.getConnection();
        PreparedStatement stmt = null;
        ResultSet rs = null;

        boolean check = false;
        String nome = null;
        try {

            stmt = con.prepareStatement("SELECT * FROM user WHERE login = ? and senha = ?");
            stmt.setString(1, login);
            stmt.setString(2, senha);

            rs = stmt.executeQuery();
            
            if (rs.next()) {
                u.setNome(rs.getString("nome"));
                nome = u.getNome();
                check = true;
            }

        } catch (SQLException ex) {
            Logger.getLogger(UserDAO.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            ConnectionFactory.closeConnection(con, stmt, rs);
        }
        System.out.println(nome); //consigo pegar e printar, mas não receber em outras janelas...
        return check;
    }

e para fazer o login, utilizo esse código em um btn:

UserDAO dao = new UserDAO();
        if (dao.checkLogin(usrField.getText(), passField.getText())) {
            new ViewHome().setVisible(true); // Nesse caso, é a ViewHome quem irá receber o nome do sujeito
            this.dispose();
        } else {
            new ViewLoginError().setVisible(true);
        }

Agradeço desde já e mais uma vez, desculpe o incomodo com perguntas…

Apenas uma crítica, não seria mais interessante fornecer ao interessado o login por nome de [(usuário ou email) + senha], já que os dados pessoais dele migram do banco de dados.
O nome real não pode ser uma chave única, diferente do email.
Mas tratando-se de preferência, da mesma forma que você valida o nome de usuário, pode ser validado o nome real, bastaria adicionar apenas o campo necessário no formulário de login e fazer outros ajustes em métodos e nas requisições SQL.

1 curtida

Na realidade, só quero utilizar o nome real da pessoa, para mostrar uma mensagem de boas-vindas, pois como eu disse, a mensagem pega o text digitado no form e quero mudar isso.
Irei tentar da forma que você disse. Obrigado :slight_smile:

Vamos la @Wilian_Silva

1.     package view;
2.     /**
3.      * Classe de login do usuário
4.      * @author vonquelbe.caldeira
5.      */
6.     public class User {
7.     //  Variável estática que conterá a instancia da classe
8.         private static User instance;
9.     //  Objetos privadas - Dados do usuário
10.         private String login;
11.         private String senha;
12.         private String nome;
13.         private String email;
14.     //  Construtores padrão
15.         public User() {
16.         }    
17.     // Getters e Setters
18.         public String  getLogin () {return login;}
19.         public String  getSenha () {return senha;}
20.         public String  getNome  () {return nome;}
21.         public String  getEmail () {return email;}
22.         public void setLogin (String login)  {this.login  = login;}
23.         public void setSenha (String senha)  {this.senha  = senha;}
24.         public void setNome  (String nome)   {this.nome   = nome;}
25.         public void setEmail (String email)  {this.email  = email;}
26.     //  Método público estático de acesso único ao objeto!
27.         public static User getInstance() {
28.             if (instance == null) {
29.                 instance = new User();
30.             }
31.             return instance;
32.         }
33.     }

Repare o seguinte:

  • Na linha 8 eu instancia um objeto estático da própria classe
  • Das linhas 27 a 32 tenho um método que me retorna a instância dessa classe

Quando faço o login no sistema guardo os dados do usuário:

            User usr = User.getInstance();
            usr.setLogin("Login");
            usr.setSenha("Senha");
            usr.setNome ("Vonquelbe Caldeira");
            usr.setEmail("vonkall@meu-email");

Obviamente vc deve pegar esses dados do seu DAO. Forcei apenas pra exemplificar e mostrar o resultado.

Depois vc invoca o mesmo método de qualquer lugar do seu sistema e terá os dados para exibir como quiser:

User usr = User.getInstance();
System.out.println("Nome: "+usr.getNome());
System.out.println("Email: "+usr.getEmail());

Faço isso no meu sistema tanto para exibir os dados do usuário na tela principal quanto pra validar ou guardar as ações do usuário

Da até pra pegar direto:

System.out.println("Nome direto: "+User.getInstance().getNome());
System.out.println("Email direto: "+User.getInstance().getEmail());

2 curtidas

Isso me ajudou MUITO. Obrigado :grinning:
E desculpe pela minha ignorância, estou tendo que absorver MUITA coisa ao mesmo tempo e isso tem me deixado um pouco confuso. Tenha um bom dia e obrigado novamente.

Agradeço também ao @addller pela sugestão e por ajudar também!

1 curtida