Nullpointer Exception when entering data into a Foreign key

Asked

Viewed 62 times

0

I am facing some problems with entering data in my clients table. Specifically with foreign keys fk_telefone_fisico and fk_telefone_juridico.

When I register the user ee gives me a NullPointerException, but I don’t know where this error comes from, since I can’t identify the null pointer. Follow the DAO Code:

public void Salvar (ClienteFisico cf, TelefoneFisico t, EnderecoFisico end) throws Exception{

    PreparedStatement ps = null;
    PreparedStatement ps2 = null;
    PreparedStatement ps3 = null;

    if (cf == null)
    {
        throw new Exception("Erro: Cliente não pode ser nulo!");
    }

    try {

        String sql2 ="insert into tbl_telefone_fisico (telefone_fixo_fisico, celular1_fisico, celular2_fisico, flag_ativo) values (?,?,?,1)";
        ps2 = this.con.prepareStatement(sql2, ps2.RETURN_GENERATED_KEYS);

        String sql3 = "insert into tbl_endereco_fisico (cidade_fisico, cep_fisico, estado_fisico, bairro_fisico, rua_fisico, numero_fisico, flag_ativo) values (?,?,?,?,?,?,1)";
        ps3 = this.con.prepareStatement(sql3, ps3.RETURN_GENERATED_KEYS);

        String sql = "insert into tbl_clientefisico(nome_cliente, sobrenome_cliente, cpf, rg, email,fk_telefone_fisico, fk_endereco_fisico, flag_ativo) values (?,?,?,?,?,?,?,1)";
        ps = this.con.prepareStatement(sql, ps.RETURN_GENERATED_KEYS);


        ps2.setString(1, t.getTelefoneFixo());
        ps2.setString(2, t.getCelular1());
        ps2.setString(3, t.getCelular2());


        ResultSet rs2 = ps2.getGeneratedKeys();
        while(rs2.next()){

        int idTelGerado = rs2.getInt(1);
        t.setIdTelefone(idTelGerado);
        }


        ps3.setString(1, end.getCidade());
        ps3.setString(2, end.getCep());
        ps3.setString(3, end.getEstado());
        ps3.setString(4, end.getBairro());
        ps3.setString(5, end.getRua());
        ps3.setString(6, end.getNumero());


        ResultSet rs3 = ps3.getGeneratedKeys();
        while(rs3.next()){

        int idEndGerado = rs3.getInt(1);
        end.setIdEndereco(idEndGerado);
        }


        ps.setString(1, cf.getSobrenomeCliente());
        ps.setString(2, cf.getCpfCliente());
        ps.setString(3, cf.getRgCliente());
        ps.setString(4, cf.getEmailCliente());
        ps.setInt(5, cf.getTelefoneCliente().getIdTelefone());
        ps.setInt(6, cf.getEndereçoCliente().getIdEndereco());


        ResultSet rs = ps.getGeneratedKeys();
        while (rs.next()){
        int idPessoaGerado = rs.getInt(1);
        cf.setIdCliente(idPessoaGerado);
        }


        ps2.executeUpdate();
        ps3.executeUpdate();
        ps.executeUpdate();

        ps2.close();
        ps3.close();
        ps.close();

    } catch (Exception e) {
        throw new Exception("Erro ao inserir os dados: " + e.toString());
    }
    finally{
        ConnectionFactory.CloseConnection(con, ps);
    }

As you can see, it seems all right, but when I click on register(Jbutton) it gives me a Nullpointer. Follow the code of the Sign Up Button:

 BotaoCadastrar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e)  {

            if(ClienteFisico == true)
            {

            EnderecoFisico end = new EnderecoFisico();
            TelefoneFisico tel = new TelefoneFisico();
            ClienteFisico cf = new ClienteFisico();


            tel.setCelular1(TxtCelular1.getText());
            tel.setCelular2(TxtCelular2.getText());
            end.setCidade(TxtCidadeCliente.getText());
            end.setCep(TxtCepCliente.getText());
            end.setBairro(TxtBairroCliente.getText());
            end.setEstado(TxtEstadoCliente.getText());
            end.setRua(TxtClientesRua.getText());
            end.setNumero(TxtNumCliente.getText());
            cf.setNomeCliente(TxtNomeCliente.getText());
            cf.setSobrenomeCliente(TxtSobreomeCliente.getText());
            cf.setCpfCliente(TxtCpfCnpjCliente.getText());
            cf.setRgCliente(TxtRgIeCliente.getText());
            cf.setEmailCliente(TxtEmailCliente.getText());
            tel.setTelefoneFixo(TxtTelFixo.getText());


            try{
                if(cfcont.Cadastrar(cf,tel,end))
                {
                    JOptionPane.showMessageDialog(null, "Cliente cadastrado com sucesso!", "FUNCIONOU!", JOptionPane.OK_OPTION);
                }
            }
            catch(Exception ex){

                  JOptionPane.showMessageDialog(null, "Erro ao cadastrar o Cliente " + ex.toString(), "ERROR", JOptionPane.ERROR_MESSAGE);

            }
        }
            else if (ClienteFisico == false)
            {
                JOptionPane.showMessageDialog(null, "Ainda não é possível cadastar cliente Jurídico", "Ops!", JOptionPane.ERROR_MESSAGE);
            }
        }
    });
  • Save the stack of errors? Edit the question and add this stack of errors.

  • Hello and thank you for answering, the problem has been solved. And just so you know, the stack of errors didn’t show up, the error appeared in a Joptionpane, which showed this Nullpointer. no Output showed "successfully assembled". I thank you for your attention and good morning!

1 answer

0


No Fim das contas, resolvi o problema! We use sequences in BD for the bank itself to do the job for us. Follow the code Updated:

public void Salvar (ClienteFisico cf, TelefoneFisico t, EnderecoFisico end) throws Exception{

    PreparedStatement ps = null;
    PreparedStatement ps2 = null;
    PreparedStatement ps3 = null;

    if (cf == null)
    {
        throw new Exception("Erro: Cliente não pode ser nulo!");
    }

    try {

        String sql2 ="insert into tbl_telefone_fisico (id_telefone, telefone_fixo_fisico, celular1_fisico, celular2_fisico, flag_ativo)"
                + " values (NEXTVAL('sequencia_telefone_fisico'), ?, ?, ?, 1)";
        ps2 = this.con.prepareStatement(sql2);

        String sql3 = "insert into tbl_endereco_fisico (id_endereco, cidade_fisico, cep_fisico, estado_fisico, bairro_fisico, rua_fisico, numero_fisico, flag_ativo)"
                + " values (NEXTVAL('sequencia_endereco_fisico'), ?, ?, ?, ?, ?, ?, 1)";
        ps3 = this.con.prepareStatement(sql3);

       String sql = "insert into tbl_clientefisico(id_cliente_fisico, nome_cliente, sobrenome_cliente, cpf, rg, email,fk_telefone_fisico, fk_endereco_fisico, flag_ativo)"
                + " values (NEXTVAL('sequencia_cliente_fisico'), ?, ?, ?, ?, ?, CURRVAL('sequencia_telefone_fisico'), CURRVAL('sequencia_endereco_fisico'), 1)";
        ps = this.con.prepareStatement(sql);

        ps2.setString(1, t.getTelefoneFixo());
        ps2.setString(2, t.getCelular1());
        ps2.setString(3, t.getCelular2());





        ps3.setString(1, end.getCidade());
        ps3.setString(2, end.getCep());
        ps3.setString(3, end.getEstado());
        ps3.setString(4, end.getBairro());
        ps3.setString(5, end.getRua());
        ps3.setString(6, end.getNumero());


        ps.setString(1, cf.getNomeCliente());
        ps.setString(2, cf.getSobrenomeCliente());
        ps.setString(3, cf.getCpfCliente());
        ps.setString(4, cf.getRgCliente());
        ps.setString(5, cf.getEmailCliente());




        ps2.executeUpdate();
        ps3.executeUpdate();
        ps.executeUpdate();

        ps2.close();
        ps3.close();
        ps.close();

    } catch (Exception e) {
        throw new Exception("Erro ao inserir os dados: " + e.toString());
    }
    finally{
        ConnectionFactory.CloseConnection(con, ps);
    }



}

No changes needed to the button itself, so I don’t think you need to post the button code again.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.