Consulta não retorna todos os dados [Resolvido]

9 respostas Resolvido
java
P

Ola amigos estou com problema tenho uma consulta que carrega somente a herança mais a parte que pega a tabela contato que esta ligada a classe pessoa não carrega seus dados.
Quando faço a consulta ela só pega os dados da classe pai e a filho mas da classe Contato que esta ligado a classe pessoa não retorna. como resolvo isso? olha o código.

public class Pessoa {

private int id_pessoa;
private String cep;
private String logradouro;
private String numero;
private String complemento;
private String bairro;
private String cidade;
private String uf;

}
public class pessoaFisica extends Pessoa {

private String cpf;
private String nome;
private String dataNasc;
private String rg;
private String orgemissor;
private String uforgE;
private String dataEmissao;

}
public class pessoaJuridica extends Pessoa {

private String cnpj;
private String razaosocial;
private String inscestadual;
private String inscmunicipal;

}
public class Contato {

private String telefonePri;
private String telefoneSec;
private String celularPri;
private String celularSec;
private String whatsAppPri;
private String whatsAppSec;
private String emailPri;
private String emailSec;
private Pessoa p; // Objeto que pega a classe Pessoa.

}

// consulta da camada daoPessoaFisica.

@Override
public ArrayList consultarPF(String cpf) {

ArrayList<pessoaFisica> lstPF = new ArrayList();

    try {
        sql = "SELECT * FROM pessoa INNER JOIN pessoafisica ON pessoafisica.id_pessoa = pessoa.id_pessoa INNER JOIN contato ON contato.id_pessoa = pessoafisica.id_pessoa AND pessoafisica.cpf=?";

        pst = cnx.getConnection().prepareStatement(sql);
        pst.setString(1, cpf);
        rs = pst.executeQuery();

        while (rs.next()) {

            pessoaFisica pf = new pessoaFisica();

            pf.setId_pessoa(rs.getInt("id_pessoa"));
            pf.setCpf(rs.getString("cpf"));
            pf.setNome(rs.getString("nome"));
            pf.setDataNasc(rs.getString("data_nasc"));
            pf.setRg(rs.getString("rg"));
            pf.setOrgemissor(rs.getString("orgEmissor"));
            pf.setUforgE(rs.getString("uf_orgE"));
            pf.setDataEmissao(rs.getString("data_emissao"));
            pf.setCep(rs.getString("cep"));
            pf.setLogradouro(rs.getString("logradouro"));
            pf.setNumero(rs.getString("numero"));
            pf.setComplemento(rs.getString("complemento"));
            pf.setBairro(rs.getString("bairro"));
            pf.setCidade(rs.getString("cidade"));
            pf.setUf(rs.getString("uf"));

            Contato c = new Contato(); 
           
            c.setTelefonePri(rs.getString("telefonePri"));
            c.setTelefoneSec(rs.getString("telefoneSec"));
            c.setCelularPri(rs.getString("celularPri"));
            c.setCelularSec(rs.getString("celularSec"));
            c.setWhatsAppPri(rs.getString("whatsAppPri"));
            c.setWhatsAppSec(rs.getString("whatsAppSec"));
            c.setEmailPri(rs.getString("emailPri"));
            c.setEmailSec(rs.getString("emailSec"));
            c.setP(pf);
            lstPF.add(pf);
        }
        pst.close();
        rs.close();
        return lstPF;

    } catch (SQLException ex) {
        ex.printStackTrace();
    }
    return null;
}

// VISÃO QUE FAZ A CONSULTA POR CPF.

private void btnprocuraActionPerformed(java.awt.event.ActionEvent evt) {

if (!v.validaCPF(txtcpf.getText().replace(".", "").replace("-", ""))) {
        JOptionPane.showMessageDialog(null, "CAMPO CPF EM BRANCO OU INVÁLIDO POR FAVOR REDIGITE NOVAMENTE!!!", "MENSAGEM:", JOptionPane.ERROR_MESSAGE, new ImageIcon(getToolkit().createImage(getClass().getResource("/icones/iconeCancela.png"))));
        txtcpf.setValue(null);
        txtcpf.requestFocus();
        this.limparCampos();
        this.desabilitaTudo();
    } else if (daoPF.consultarPF(txtcpf.getText().replace(".", "").replace("-", "")).isEmpty()) {
        JOptionPane.showMessageDialog(null, "CONSULTA NÃO ENCONTADA!!!", "MENSAGEM:", JOptionPane.ERROR_MESSAGE, new ImageIcon(getToolkit().createImage(getClass().getResource("/icones/iconeCancela.png"))));
        txtcpf.setText(null);
        txtcpf.requestFocus();
        this.limparCampos();
        this.desabilitaTudo();

    } else {

        this.habilitaTudo();

        for (pessoaFisica pf : daoPF.consultarPF(txtcpf.getText().replace(".", "").replace("-", ""))) {

            //Dados Pessoais da Pessoa Fisica.
            id = String.valueOf(pf.getId_pessoa());
            txtnome.setText(pf.getNome());
            dataNasc.setDate(Date.valueOf(pf.getDataNasc()));
            txtrg.setText(pf.getRg());
            txtorgemissor.setText(pf.getOrgemissor());
            txtuf_orgE.setText(pf.getUforgE());
            dataEmissao.setDate(Date.valueOf(pf.getDataEmissao()));

            //Dados de Localização da Pessoa Fisica.
            txtcep.setText(pf.getCep());
            txtlogradouro.setText(pf.getLogradouro());
            txtnro.setText(pf.getNumero());
            txtcomplemento.setText(pf.getComplemento());
            txtbairro.setText(pf.getBairro());
            txtcidade.setText(pf.getCidade());
            txtuf.setText(pf.getUf());
            
            //Dados dos Contatos da Pessoa Fisica. -> AQUI QUE ESTA O ERRO NÃO CARREGA A CONSULTA NESTA PARTE.
            txtTelPri.setText(c.getTelefonePri());
            txtTelSec.setText(c.getTelefoneSec());
            txtCelPri.setText(c.getCelularPri());
            txtCelSec.setText(c.getCelularSec());
            txtWSPri.setText(c.getWhatsAppPri());
            txtWSSec.setText(c.getWhatsAppSec());
            txtEmailP.setText(c.getEmailPri());
            txtEmailS.setText(c.getEmailSec());
            c.setP(pf);
        }
    }

}

9 Respostas

S

Boa noite, com o modificador de acesso private você só tem acesso na própria classe, logo seus filhos não herdam os atributos ou métodos definidos como private.

Mais sobre modificadores de acesso.

OBS: Lembrando que classes sempre devem começar com letras maiúsculas e seguir o padrão CamelCase.

P

SkyGOD eu sei não coloquei os gets e sets para não deixar o codigo extenso de mais aqui no Forum ok!!!

S

Ah sim, desculpa.

Não deveria ser um ArrayList de contatos? Já que a classe Contato tem uma pessoa, mas a classe Pessoa não sabe nem da existência da classe Contato.

Nesse caso o contato não esta fazendo nada?

ArrayList<pessoaFisica> lstPF = new ArrayList();

            // resto do código...

            Contato c = new Contato(); 
           
            c.setTelefonePri(rs.getString("telefonePri"));
            c.setTelefoneSec(rs.getString("telefoneSec"));
            c.setCelularPri(rs.getString("celularPri"));
            c.setCelularSec(rs.getString("celularSec"));
            c.setWhatsAppPri(rs.getString("whatsAppPri"));
            c.setWhatsAppSec(rs.getString("whatsAppSec"));
            c.setEmailPri(rs.getString("emailPri"));
            c.setEmailSec(rs.getString("emailSec"));
            c.setP(pf);
            lstPF.add(pf);
        }

E de onde vem essa variável c?

//Dados dos Contatos da Pessoa Fisica. -> AQUI QUE ESTA O ERRO NÃO CARREGA A CONSULTA NESTA PARTE.
            txtTelPri.setText(c.getTelefonePri());
            txtTelSec.setText(c.getTelefoneSec());
            txtCelPri.setText(c.getCelularPri());
            txtCelSec.setText(c.getCelularSec());
            txtWSPri.setText(c.getWhatsAppPri());
            txtWSSec.setText(c.getWhatsAppSec());
            txtEmailP.setText(c.getEmailPri());
            txtEmailS.setText(c.getEmailSec());
            c.setP(pf);
P

Esse C e uma instancia da Classe Contato que tem por sua vez um Objeto chamado Pessoa dentro da sua classe que encapsula o objeto pf da classe Pessoa Fisica. E representada por uma associação um para um.
Veja minhas Classes que descrevi a cima.

P

Mas como indicado, o objecto Pessoa não tem qualquer relação com Contacto, apenas o contrário. Retornas uma lista de pessoas mas não tens como obter o contacto a partir de uma Pessoa.

P

pmlm olha meu diagrama de classe amigo.

Na minha consulta ele pega somente as partes da classe pai e filho mas o q esta ligado a classe pai que é a classe contato ele não carrega nada.
Queria tambem na consulta do sql trazer os dados da tabela contatos.

P

No SQL estás a trazer os dados da tabela Contatos. Mas depois essa entidade não é referenciada pelo teu objecto Pessoa e o que tu devolves na tua consulta é uma lista de pessoas.

Contato c = new Contato();
c.setTelefonePri(rs.getString(telefonePri));

c.setTelefoneSec(rs.getString(telefoneSec));

c.setCelularPri(rs.getString(celularPri));

c.setCelularSec(rs.getString(celularSec));

c.setWhatsAppPri(rs.getString(whatsAppPri));

c.setWhatsAppSec(rs.getString(whatsAppSec));

c.setEmailPri(rs.getString(emailPri));

c.setEmailSec(rs.getString(emailSec));

c.setP(pf);

Este Contato c é criado e tem dados mas depois não estás a guardar em lado nenhum.

Quando depois tentas acedea c no teu actionperformed essa variavel não existe uma vez que o scope já é completamente diferente. Para manter a lógica que tens, o teu contato tem de ir dentro de pessoa e não o contrário.

P

pmlm então o objeto contato deve estar dentro da classe pessoa e não ao contrario objeto pessoa dentro da classe contato e isso? mas tambem eu fiz isso e nao deu certo? pode me esclarecer?

P
Solucao aceita

Consegui poxa amigo pmlm não sei como te agradecer pela ajuda de bom grado que você me cedeu, mas uma vez fico grato pela ajuda.
Abraço amigo!!!

Olha o codigo como ficou.

private void btnprocuraActionPerformed(java.awt.event.ActionEvent evt) {

if (!v.validaCPF(txtcpf.getText().replace(".", "").replace("-", ""))) {
        JOptionPane.showMessageDialog(null, "CAMPO CPF EM BRANCO OU INVÁLIDO POR FAVOR REDIGITE NOVAMENTE!!!", "MENSAGEM:", JOptionPane.ERROR_MESSAGE, new ImageIcon(getToolkit().createImage(getClass().getResource("/icones/iconeCancela.png"))));
        txtcpf.setValue(null);
        txtcpf.requestFocus();
        this.limparCampos();
        this.desabilitaTudo();
    } else if (daoPF.consultarPF(txtcpf.getText().replace(".", "").replace("-", "")).isEmpty()) {
        JOptionPane.showMessageDialog(null, "CONSULTA NÃO ENCONTADA!!!", "MENSAGEM:", JOptionPane.ERROR_MESSAGE, new ImageIcon(getToolkit().createImage(getClass().getResource("/icones/iconeCancela.png"))));
        txtcpf.setText(null);
        txtcpf.requestFocus();
        this.limparCampos();
        this.desabilitaTudo();

    } else {

        this.habilitaTudo();

        for (pessoaFisica pf : daoPF.consultarPF(txtcpf.getText().replace(".", "").replace("-", ""))) {

            //Dados Pessoais da Pessoa Fisica.
            id = String.valueOf(pf.getId_pessoa());
            txtnome.setText(pf.getNome());
            dataNasc.setDate(Date.valueOf(pf.getDataNasc()));
            txtrg.setText(pf.getRg());
            txtorgemissor.setText(pf.getOrgemissor());
            txtuf_orgE.setText(pf.getUforgE());
            dataEmissao.setDate(Date.valueOf(pf.getDataEmissao()));

            //Dados de Localização da Pessoa Fisica.
            txtcep.setText(pf.getCep());
            txtlogradouro.setText(pf.getLogradouro());
            txtnro.setText(pf.getNumero());
            txtcomplemento.setText(pf.getComplemento());
            txtbairro.setText(pf.getBairro());
            txtcidade.setText(pf.getCidade());
            txtuf.setText(pf.getUf());
                            
            //Dados dos Contatos da Pessoa Fisica.
            
            txtTelPri.setText(pf.getC().getTelefonePri());
            txtTelSec.setText(pf.getC().getTelefoneSec());
            txtCelPri.setText(pf.getC().getCelularPri());
            txtCelSec.setText(pf.getC().getCelularSec());
            txtWSPri.setText(pf.getC().getWhatsAppPri());
            txtWSSec.setText(pf.getC().getWhatsAppSec());
            txtEmailP.setText(pf.getC().getEmailPri());
            txtEmailS.setText(pf.getC().getEmailSec());                
        }
    }

}
Criado 31 de julho de 2020
Ultima resposta 5 de ago. de 2020
Respostas 9
Participantes 3