JTextField não recebe valores de pesquisa

8 respostas Resolvido
javamysqlprogramação
Carlos_Daniel1

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

<strong>DAO</strong>

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

8 Respostas

Jonathan_Medeiros
Solucao aceita

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.

Carlos_Daniel1

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;
}
staroski

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.

Jonathan_Medeiros

Exato, desta forma mesmo!

Carlos_Daniel1

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 ?

Carlos_Daniel1

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.

Jonathan_Medeiros

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?

Carlos_Daniel1

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);
    }
}
Criado 22 de junho de 2021
Ultima resposta 22 de jun. de 2021
Respostas 8
Participantes 3