Olá pessoal estou enfrentando um problema que não tenho ideia do que esteja ocorrendo. O programa tem o objetivo de fazer a seguinte operação:
Na tela UserView.java possui um formulário para manter usuário, ao realizar uma busca deve trazer os dados cadastrados para todos os campos o código de sql está na minha DAO e está nessa seguinte estrutura:
USER.VIEW
DAO
// BUSCAR USUÁRIO
public boolean getUser(String name) throws SQLException {
String sql = “SELECT * FROM TBUSUARIO WHERE LOGIN LIKE ?”;
try {
UserView uv = new UserView();
ps = connection.prepareStatement(sql);
ps.setString(1, name + "%");
rs = ps.executeQuery();
if (rs.next()) {
UserView.txtIdCli.setText("id"); // id
uv.setTxtNomeUser("Nome"); // Nome usuário
uv.setTxtPerfilUser("Funcionário"); // perfil
uv.setTxtLoginUser("login"); // login
uv.setTxtSenhaUser("senha"); // senha
JOptionPane.showMessageDialog(null, "Busca realizada com sucesso!!!");
return true;
} else {
JOptionPane.showMessageDialog(null, "Usuário Não Encontrado....");
return false;
}
} catch (Exception error) {
System.out.println("Erro ao logar: " + error.getMessage());
return false;
} finally {
connection.close();
}
}
**VIEW**
// BOTÃO (PESQUISAR)
private void btnPesqCliActionPerformed(java.awt.event.ActionEvent evt) {
// tudo a baixo é referente a ação do botão pesquisar.
if (!this.validaPesquisa()) { // Se o campo estiver preenchido
try {
if (uc.getUser(this.txtPesqCli.getText())) { // Se a pesquisa for realizada.
System.out.println("Deu bom");
}
} catch (Exception e) {
System.out.println("erro ao fazer a busca: " + e.getMessage());
}
} else {
JOptionPane.showMessageDialog(null, "Preencha o campo pesquisa para realizar uma busca.", "MENSAGEM", JOptionPane.INFORMATION_MESSAGE);
}
}
MÉTODO DE ACESSO
public static void setTxtIdCli(String txtIdCli) { // ID User
UserView.txtIdCli.setText(txtIdCli);
}
Creio que o problema esteja nos meus métodos assessores
Coloquei nomes como id, nome, funcionário e etc só para fins de teste. Porém não está preenchendo minhas txt na minha view. Poderiam me ajudar nesse problema, desde já sou grato!!!
Tu tá criando uma nova view para cada consulta, provavelmente este seja o problema!
Faça sou método de consulta popular um objeto com os dados do usuário, depois faça o método retornar este objeto, na sua view recupere o objeto retornado e preencha os campos com os valores contidos neste objeto recuperado.
1 curtida
Desta Forma ?
// BUSCAR USUÁRIO
public UserModel getUser(String name) throws SQLException {
String sql = "SELECT * FROM TBUSUARIO WHERE LOGIN LIKE ?";
UserModel uM = new UserModel();
try {
ps = connection.prepareStatement(sql);
ps.setString(1, name + "%");
rs = ps.executeQuery();
if (rs.next()) {
UserView.txtIdCli.setText(rs.getString(1)); // ID
uM.setNome(rs.getString(2)); // NOME
uM.setPerfil(rs.getString(3)); // PERFIL
uM.setLogin(rs.getString(4)); // LOGIN
uM.setSenha(rs.getString(5)); // SENHA
JOptionPane.showMessageDialog(null, "Busca realizada com sucesso!!!");
} else {
JOptionPane.showMessageDialog(null, "Usuário Não Encontrado....");
}
} catch (Exception error) {
System.out.println("Erro ao getUser: " + error.getMessage());
} finally {
connection.close();
}
return uM;
}
O seu DAO não deve instanciar telas.
Quem deveria ter uma instância do DAO é o controller da sua tela ou, na pior das hipóteses, sua própria tela deveria ter uma instância do DAO.
Componentes da tela não devem ser estáticos.
Exato, desta forma mesmo!
1 curtida
Bom dia @staroski, obrigado pelas dicas.
Tenho uma dúvida, então minha controller deve fazer o meio campo entre view e dao é isso ?
Sendo assim instanciando somente minha controller dentro da view ? e fazendo todo tratamento dentro da controller ?
Obrigado Jonathan realmente o problema era isso, agora vou tentar fazer funcionar da forma na qual me instrui-o. Só uma dúvida devo passar como parâmetro uma String ou torno meu método boolean e passo um objeto ?
Pois no momento que instancio meu objeto na view acontece o mesmo que era na DAO. O retorno de tudo fica null.
Mantém o método do jeito que você mostrou na resposta anterior!
Se lá ainda está nulo pode ser alguma coisa na forma como você está tratando a informação do outro lado! (Isso tendo como base que sua consulta retorna um valor válido)
Como está seu código da view?
1 curtida
Consegui resolver, muito obrigado @Jonathan_Medeiros ajudou demais e obrigado e todos pelas dicas.
VIEW
private void btnPesqCliActionPerformed(java.awt.event.ActionEvent evt) {
// tudo a baixo é referente a ação do botão pesquisar.
UserModel um;
if (!this.validaPesquisa()) { // Se o campo estiver preenchido
try {
um = uc.getUser(this.txtPesqCli.getText());
//uc.getUser(this.txtPesqCli.getText()); // Se a pesquisa for realizada.
System.out.println(um.getNome());
this.txtNomeUser.setText(um.getNome()); // NOME
this.txtLoginUser.setText(um.getLogin()); // LOGIN
this.txtPerfilUser.setSelectedItem(um.getPerfil()); // PERFIL
this.txtSenhaUser.setText(um.getSenha()); // SENHA
} catch (Exception e) {
System.out.println("erro ao fazer a busca: " + e.getMessage());
}
} else {
JOptionPane.showMessageDialog(null, "Preencha o campo pesquisa para realizar uma busca.", "MENSAGEM", JOptionPane.INFORMATION_MESSAGE);
}
}
1 curtida