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
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
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