Ola amigos. Sou iniciante em java, mas já tento a dias solucionar o problema. quero colocar os atributos usuário, fone, login, perfil e senha pegos do banco de dados e com eles preencherem os campos de mesmo do formulário usuário. Isso após entrar com um numero no campo id_usuario. Acontece que nenhum campo no formulário está sendo preenchido. alguém pode avaliar meu código e ajudar na sequencia de meu aprendizado? O programa nao gera nehum erro.
O código é esse:
public class UsuarioDto {
private int iduser;
private String usuario, fone, login, senha, perfil;
public void setIduser(int iduser) {
this.iduser = iduser;
}
public int getIduser() {
return iduser;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public String getUsuario() {
return usuario;
}
public void setFone(String fone) {
this.fone = fone;
}
public String getFone() {
return fone;
}
public void setLogin(String login) {
this.login = login;
}
public String getLogin() {
return login;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getSenha() {
return senha;
}
public void setPerfil(String perfil) {
this.perfil = perfil;
}
public String getPerfil() {
return perfil;
}
}
public void consultar (){
try {
int funcId= Integer.parseInt(txtUsuarId.getText());
UsuarioDto objUserDTO = new UsuarioDto();
objUserDTO.setIduser(funcId);
UsuarioDAO objUserDAO = new UsuarioDAO();
objUserDAO.consultarUsuario(objUserDTO);
ResultSet retUsuarioDao = objUserDAO.consultarUsuario(objUserDTO);
txtUsuarNome.setText(objUserDTO.getUsuario());
txtUsuarFone.setText(objUserDTO.getFone());
txtUsuarLogin.setText(objUserDTO.getLogin());
txtUsuarSenha.setText(objUserDTO.getSenha());
cboUsuarPerfil.setSelectedItem(objUserDTO.getPerfil());
} catch (Exception erro) {
JOptionPane.showMessageDialog(null,"Erro ao cosultar usuario"+ erro);
}
}
}
public class UsuarioDAO {
Connection conexao;
PreparedStatement pst;
/*result set tras informações do banco dados*/
ResultSet rs;
public ResultSet consultarUsuario(UsuarioDto objUsuarDTO) {
String sql = "select *from tbUsuarios where iduser=?";
conexao = new ModConexaoDAO().conector();
try {
UsuarioDto objUsuarioDTO = new UsuarioDto();
pst = conexao.prepareStatement(sql);
pst.setInt(1, objUsuarDTO.getIduser());
System.out.println("O conteudo em IdUser é: "+ pst);
rs = pst.executeQuery();
if (rs.next()) {
objUsuarioDTO.setUsuario(rs.getString("usuario"));
objUsuarioDTO.setFone(rs.getString("fone"));
objUsuarioDTO.setLogin(rs.getString("login"));
objUsuarioDTO.setSenha(rs.getString(5));
objUsuarioDTO.setPerfil(rs.getString(6));
} else {
System.out.println("Não há mais dados......");
JOptionPane.showMessageDialog(null, "Usuario nao cadastrado..... ");
}
return rs;
} catch (Exception erro) {
JOptionPane.showMessageDialog(null, "Erro consultar usuario: " + erro);
return null;
}
}
}
Em vez de passar o UsuarioDto como parâmetro no método consultarUsuario. Faça o método retornar um UsuarioDto e receber o ID do funcionário como parâmetro. Assim:
public UsuarioDto consultarUsuario(int idFuncionario) {
}
Após fazer essa alteração, execute sua aplicação no modo debug e inspecione o valor retornado pelo método consultarUsuario da classe UsuarioDAO, e veja se os valores estão sendo retornados corretamente do banco de dados.
Estou tentando a sua dica, mas ainda fica a duvida sobre meu código, o porque de nao retornar o get, retorna como null. fiz um print no get public String getUsuario() {
System.out.println("O usuario em getUsuario é…: "+ usuario);
return usuario;
} está retornando null.
Não entendi essa parte. Como assim retornar o get? O que é esse get?
O teste que vc precisa fazer é, depois de alterar o método conforme falei, verificar se o usuário está sendo retornado com os valores corretos, assim:
int funcId = Integer.parseInt(txtUsuarId.getText());
UsuarioDAO objUserDAO = new UsuarioDAO();
UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario()); // veja se o valor está sendo retornado igual o valor que está no banco
Olá. quando me referi, talvez de forma errônea a retorna o get, é pegar os dados get, e passar para os campos do formulario view. estou testando sua dia. Obrigado, retorno par dizer se deu certo.
Olá, sua dica UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario()); nao retorna o usuario cadastrado no banco. O retorno conitua sendo null. se voce observar no meu código no trecho txtUsuarNome.setText(objUserDTO.getUsuario()); já pedia o mesmo retorno, que também retorna null. AInda tenho o mesmo problema.
já o set recebe exatamente o que digito no campo do formulário.
public void setIduser(int iduser) {
this.iduser = iduser;
System.out.println("O valor em setIduser é: " + iduser);
} ou seja set ok, get é null.
Acho que estou agarrado em coisa muito básica, e não consigo continuar com meus estudos sem entender o que está acontecendo.
UsuarioDto usuario = objUserDAO.consultarUsuario(funcId);
System.out.println(usuario.getUsuario()); deveria imprimir o nome do usuario, se não imprimi no console é porque nao há nada dentro do getUsuario();
Vc teve que alterar o método consultarUsuario, pois antes ele recebia um UsuarioDto como parâmetro e, depois da alteração, ele está recebendo um int como parâmetro, ou seja, a implementação do método tem que ter sido alterada, senão não vai funcionar.
Mas se é para passar um int id_funcionário como parâmetro, o conceito de encapsulamento de classe perde o valor, pois nao estarei usando get() set() da classe encapsulada, e não é isso que eu quero, pois estou no momento testando exatamente o modelo de 3 camadas…
Passar um int como parâmetro não quebra conceito nenhum não uai. É que, se vc quer recuperar algo pelo ID, vc soh precisa passar o ID. A responsabilidade do método é, receber o ID e devolver o objeto referente à esse ID.
Na verdade, alterar um parâmetro recebido é uma prática ruim.
Sobre o encapsulamento de classe, a camada DAO tem que saber usar a classe que será usada como entidade para mapear uma tabela do banco de dados, pois é assim que essa camada irá usar os dados do banco na aplicação.
Repare que o Model faz o acesso ao banco de dados. A forma de representar a tabelas do banco na aplicação é através de classe geralmente chamadas de Entidade. Pense no DAO como parte da camada Model.