Banco de Dados

Bom dia, sempre estou aqui no guj tirando minha duvidas, e hoje não é diferente kkk, estou com um problema com meu banco. Estou fazendo um sistema web de denuncia, nesse sistema ja tem a tabela cliente com id, nome, telefone, cpf, endereço, até aqui está funcionando. Só que na tela denuncia onde tem os atributos, idD, endeD, fotoD, tioD, e a chave estrangeira do cliente, não cadastrado, ele não mostra erros só não vai pro banco, alguém pode me tirar essa duvida, pois quero cadastrar uma denuncia e nela pegar o ID do cliente, dai quando for gerado o relatória terá todos os dados do cliente e da denuncia.
Amigo aqui esta as classes, a primeira é Cliente DAO
public class ClienteDAO {

public void salvar(Cliente c) throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("INSERT INTO cliente ");
sql.append("( nome, endereco, cpf, telefone) ");
sql.append(" VALUES (?, ?, ?, ?)");

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());

comando.setString(1, c.getNome());
comando.setString(2, c.getEndereco());
comando.setString(3, c.getCpf());
comando.setString(4, c.getTelefone());

comando.executeUpdate();

}

public void excluir(Cliente c) throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("DELETE FROM cliente ");
sql.append("WHERE   CodigoCliente = ? ");

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());

comando.setLong(1, c.getCodigoCliente());

comando.executeUpdate();

}

public void editar(Cliente c) throws SQLException {

StringBuilder sql = new StringBuilder();
sql.append("UPDATE cliente ");
sql.append("SET nome= ? , endereco = ? , cpf =? , telefone= ? ");
sql.append("WHERE CodigoCliente = ?");

Connection conexao = ConexaoFactory.conectar();
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, c.getNome());
comando.setString(2, c.getEndereco());
comando.setString(3, c.getCpf());
comando.setString(4, c.getTelefone());

comando.executeUpdate();

}

public Cliente buscarPorCodigo(Cliente c) throws SQLException {

StringBuilder sql = new StringBuilder();
sql.append("SELECT  CodigoCliente, nome , cpf, endereco, telefone ");
sql.append("FROM cliente ");
sql.append("WHERE CodigoCliente = ?");

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());

comando.setLong(1, c.getCodigoCliente());

ResultSet resultado = comando.executeQuery();

Cliente retorno = null;

if (resultado.next()) {

    retorno = new Cliente();
    retorno.setCodigoCliente(resultado.getLong("codico"));

    retorno.setNome(resultado.getString("nome"));
    retorno.setCpf(resultado.getString("cpf"));
    retorno.setEndereco(resultado.getString("endereco"));
    retorno.setTelefone(resultado.getString("telefone"));
}
return retorno;

}

public ArrayList listar() throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("SELECT CodigoCliente , nome , cpf, endereco , telefone ");
sql.append("FROM cliente ");
sql.append("ORDER BY nome ASC");

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());
ResultSet resultado = comando.executeQuery();

ArrayList<Cliente> lista = new ArrayList<Cliente>();

while (resultado.next()) {

    Cliente c = new Cliente();

    c.setNome(resultado.getString("nome"));
    c.setCpf(resultado.getString("cpf"));
    c.setEndereco(resultado.getString("endereco"));
    c.setTelefone(resultado.getString("telefone"));
    c.setCodigoCliente(resultado.getLong("codigoCliente"));

    lista.add(c);

}

return lista;

}

public ArrayList buscarPorNome(Cliente c) throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("SELECT CodigoCliente , nome, cpf , endereco, telefone ");
sql.append("FROM cliente ");
sql.append("WHERE nome LIKE ?");
sql.append("ORDER BY  nome ASC");

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, "%" + c.getNome() + "%");
comando.setString(2, "%" + c.getCpf() + "%");
comando.setString(3, "%" + c.getEndereco() + "%");
comando.setString(4, c.getTelefone());

ArrayList<Cliente> lista = new ArrayList<Cliente>();
comando.setString(1, c.getNome());
comando.setString(2, c.getCpf());
comando.setString(3, c.getEndereco());
comando.setString(4, c.getTelefone());
ResultSet resultado = comando.executeQuery();

while (resultado.next()) {

    Cliente item = new Cliente();

    item.setCodigoCliente(resultado.getLong("codico"));

    item.setNome(resultado.getString("nome"));
    item.setCpf(resultado.getString("cpf"));
    item.setEndereco(resultado.getString("endereco"));
    item.setTelefone(resultado.getString("telefone"));
    lista.add(item);

}

return lista;

}
}

e a classe DenunciaDAO
package br.com.sam.dao;

import br.com.sam.damain.Cliente;
import br.com.sam.factory.ConexaoFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

@author alexandre
*/
public class ClienteDAO {

public void salvar(Cliente c) throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append(“INSERT INTO cliente “);
sql.append(”( nome, endereco, cpf, telefone) “);
sql.append(” VALUES (?, ?, ?, ?)”);

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());

comando.setString(1, c.getNome());
comando.setString(2, c.getEndereco());
comando.setString(3, c.getCpf());
comando.setString(4, c.getTelefone());

comando.executeUpdate();
}

public void excluir(Cliente c) throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("DELETE FROM cliente ");
sql.append("WHERE CodigoCliente = ? ");

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());

comando.setLong(1, c.getCodigoCliente());

comando.executeUpdate();
}

public void editar(Cliente c) throws SQLException {

StringBuilder sql = new StringBuilder();
sql.append("UPDATE cliente ");
sql.append("SET nome= ? , endereco = ? , cpf =? , telefone= ? ");
sql.append(“WHERE CodigoCliente = ?”);

Connection conexao = ConexaoFactory.conectar();
PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, c.getNome());
comando.setString(2, c.getEndereco());
comando.setString(3, c.getCpf());
comando.setString(4, c.getTelefone());

comando.executeUpdate();
}

public Cliente buscarPorCodigo(Cliente c) throws SQLException {

StringBuilder sql = new StringBuilder();
sql.append("SELECT CodigoCliente, nome , cpf, endereco, telefone ");
sql.append("FROM cliente ");
sql.append(“WHERE CodigoCliente = ?”);

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());

comando.setLong(1, c.getCodigoCliente());

ResultSet resultado = comando.executeQuery();

Cliente retorno = null;

if (resultado.next()) {

 retorno = new Cliente();
 retorno.setCodigoCliente(resultado.getLong("codico"));

 retorno.setNome(resultado.getString("nome"));
 retorno.setCpf(resultado.getString("cpf"));
 retorno.setEndereco(resultado.getString("endereco"));
 retorno.setTelefone(resultado.getString("telefone"));

}
return retorno;
}

public ArrayList listar() throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("SELECT CodigoCliente , nome , cpf, endereco , telefone ");
sql.append("FROM cliente ");
sql.append(“ORDER BY nome ASC”);

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());
ResultSet resultado = comando.executeQuery();

ArrayList lista = new ArrayList();

while (resultado.next()) {

 Cliente c = new Cliente();

 c.setNome(resultado.getString("nome"));
 c.setCpf(resultado.getString("cpf"));
 c.setEndereco(resultado.getString("endereco"));
 c.setTelefone(resultado.getString("telefone"));
 c.setCodigoCliente(resultado.getLong("codigoCliente"));

 lista.add(c);

}

return lista;
}

public ArrayList buscarPorNome(Cliente c) throws SQLException {

StringBuffer sql = new StringBuffer();
sql.append("SELECT CodigoCliente , nome, cpf , endereco, telefone ");
sql.append("FROM cliente ");
sql.append(“WHERE nome LIKE ?”);
sql.append(“ORDER BY nome ASC”);

Connection conexao = ConexaoFactory.conectar();

PreparedStatement comando = conexao.prepareStatement(sql.toString());
comando.setString(1, “%” + c.getNome() + “%”);
comando.setString(2, “%” + c.getCpf() + “%”);
comando.setString(3, “%” + c.getEndereco() + “%”);
comando.setString(4, c.getTelefone());

ArrayList lista = new ArrayList();
comando.setString(1, c.getNome());
comando.setString(2, c.getCpf());
comando.setString(3, c.getEndereco());
comando.setString(4, c.getTelefone());
ResultSet resultado = comando.executeQuery();

while (resultado.next()) {

 Cliente item = new Cliente();

 item.setCodigoCliente(resultado.getLong("codico"));

 item.setNome(resultado.getString("nome"));
 item.setCpf(resultado.getString("cpf"));
 item.setEndereco(resultado.getString("endereco"));
 item.setTelefone(resultado.getString("telefone"));
 lista.add(item);

}

return lista;
}

}

Fica inviável alguém te ajudar sem você postar a estrutura completa das tabelas e pelo menos os scripts SQL que deveriam cadastrar os registros nas tabelas.

Bom dia, sim ontem tava corrido aqui, mas posto hoje, tentei ontem de tudo e nada deu certo, já li vários livros e nada, só me resta aqui mesmo!

Amigo aqui esta as classes, a primeira é Cliente DAO
public class ClienteDAO {

public void salvar(Cliente c) throws SQLException {

    StringBuffer sql = new StringBuffer();
    sql.append("INSERT INTO cliente ");
    sql.append("( nome, endereco, cpf, telefone) ");
    sql.append(" VALUES (?, ?, ?, ?)");

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());

    comando.setString(1, c.getNome());
    comando.setString(2, c.getEndereco());
    comando.setString(3, c.getCpf());
    comando.setString(4, c.getTelefone());

    comando.executeUpdate();

}

public void excluir(Cliente c) throws SQLException {

    StringBuffer sql = new StringBuffer();
    sql.append("DELETE FROM cliente ");
    sql.append("WHERE   CodigoCliente = ? ");

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());

    comando.setLong(1, c.getCodigoCliente());

    comando.executeUpdate();
}

public void editar(Cliente c) throws SQLException {

    StringBuilder sql = new StringBuilder();
    sql.append("UPDATE cliente ");
    sql.append("SET nome= ? , endereco = ? , cpf =? , telefone= ? ");
    sql.append("WHERE CodigoCliente = ?");

    Connection conexao = ConexaoFactory.conectar();
    PreparedStatement comando = conexao.prepareStatement(sql.toString());
    comando.setString(1, c.getNome());
    comando.setString(2, c.getEndereco());
    comando.setString(3, c.getCpf());
    comando.setString(4, c.getTelefone());

    comando.executeUpdate();

}

public Cliente buscarPorCodigo(Cliente c) throws SQLException {

    StringBuilder sql = new StringBuilder();
    sql.append("SELECT  CodigoCliente, nome , cpf, endereco, telefone ");
    sql.append("FROM cliente ");
    sql.append("WHERE CodigoCliente = ?");

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());

    comando.setLong(1, c.getCodigoCliente());

    ResultSet resultado = comando.executeQuery();

    Cliente retorno = null;

    if (resultado.next()) {

        retorno = new Cliente();
        retorno.setCodigoCliente(resultado.getLong("codico"));

        retorno.setNome(resultado.getString("nome"));
        retorno.setCpf(resultado.getString("cpf"));
        retorno.setEndereco(resultado.getString("endereco"));
        retorno.setTelefone(resultado.getString("telefone"));
    }
    return retorno;

}

public ArrayList<Cliente> listar() throws SQLException {

    StringBuffer sql = new StringBuffer();
    sql.append("SELECT CodigoCliente , nome , cpf, endereco , telefone ");
    sql.append("FROM cliente ");
    sql.append("ORDER BY nome ASC");

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());
    ResultSet resultado = comando.executeQuery();

    ArrayList<Cliente> lista = new ArrayList<Cliente>();

    while (resultado.next()) {

        Cliente c = new Cliente();

        c.setNome(resultado.getString("nome"));
        c.setCpf(resultado.getString("cpf"));
        c.setEndereco(resultado.getString("endereco"));
        c.setTelefone(resultado.getString("telefone"));
        c.setCodigoCliente(resultado.getLong("codigoCliente"));

        lista.add(c);

    }

    return lista;
}

public ArrayList<Cliente> buscarPorNome(Cliente c) throws SQLException {

    StringBuffer sql = new StringBuffer();
    sql.append("SELECT CodigoCliente , nome, cpf , endereco, telefone ");
    sql.append("FROM cliente ");
    sql.append("WHERE nome LIKE ?");
    sql.append("ORDER BY  nome ASC");

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());
    comando.setString(1, "%" + c.getNome() + "%");
    comando.setString(2, "%" + c.getCpf() + "%");
    comando.setString(3, "%" + c.getEndereco() + "%");
    comando.setString(4, c.getTelefone());

    ArrayList<Cliente> lista = new ArrayList<Cliente>();
    comando.setString(1, c.getNome());
    comando.setString(2, c.getCpf());
    comando.setString(3, c.getEndereco());
    comando.setString(4, c.getTelefone());
    ResultSet resultado = comando.executeQuery();

    while (resultado.next()) {

        Cliente item = new Cliente();

        item.setCodigoCliente(resultado.getLong("codico"));

        item.setNome(resultado.getString("nome"));
        item.setCpf(resultado.getString("cpf"));
        item.setEndereco(resultado.getString("endereco"));
        item.setTelefone(resultado.getString("telefone"));
        lista.add(item);

    }

    return lista;
}

}

e a classe DenunciaDAO
package br.com.sam.dao;

import br.com.sam.damain.Cliente;
import br.com.sam.factory.ConexaoFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

  • @author alexandre
    */
    public class ClienteDAO {

    public void salvar(Cliente c) throws SQLException {

     StringBuffer sql = new StringBuffer();
     sql.append("INSERT INTO cliente ");
     sql.append("( nome, endereco, cpf, telefone) ");
     sql.append(" VALUES (?, ?, ?, ?)");
    
     Connection conexao = ConexaoFactory.conectar();
    
     PreparedStatement comando = conexao.prepareStatement(sql.toString());
    
     comando.setString(1, c.getNome());
     comando.setString(2, c.getEndereco());
     comando.setString(3, c.getCpf());
     comando.setString(4, c.getTelefone());
    
     comando.executeUpdate();
    

    }

    public void excluir(Cliente c) throws SQLException {

     StringBuffer sql = new StringBuffer();
     sql.append("DELETE FROM cliente ");
     sql.append("WHERE   CodigoCliente = ? ");
    
     Connection conexao = ConexaoFactory.conectar();
    
     PreparedStatement comando = conexao.prepareStatement(sql.toString());
    
     comando.setLong(1, c.getCodigoCliente());
    
     comando.executeUpdate();
    

    }

    public void editar(Cliente c) throws SQLException {

     StringBuilder sql = new StringBuilder();
     sql.append("UPDATE cliente ");
     sql.append("SET nome= ? , endereco = ? , cpf =? , telefone= ? ");
     sql.append("WHERE CodigoCliente = ?");
    
     Connection conexao = ConexaoFactory.conectar();
     PreparedStatement comando = conexao.prepareStatement(sql.toString());
     comando.setString(1, c.getNome());
     comando.setString(2, c.getEndereco());
     comando.setString(3, c.getCpf());
     comando.setString(4, c.getTelefone());
    
     comando.executeUpdate();
    

    }

    public Cliente buscarPorCodigo(Cliente c) throws SQLException {

     StringBuilder sql = new StringBuilder();
     sql.append("SELECT  CodigoCliente, nome , cpf, endereco, telefone ");
     sql.append("FROM cliente ");
     sql.append("WHERE CodigoCliente = ?");
    
     Connection conexao = ConexaoFactory.conectar();
    
     PreparedStatement comando = conexao.prepareStatement(sql.toString());
    
     comando.setLong(1, c.getCodigoCliente());
    
     ResultSet resultado = comando.executeQuery();
    
     Cliente retorno = null;
    
     if (resultado.next()) {
    
         retorno = new Cliente();
         retorno.setCodigoCliente(resultado.getLong("codico"));
    
         retorno.setNome(resultado.getString("nome"));
         retorno.setCpf(resultado.getString("cpf"));
         retorno.setEndereco(resultado.getString("endereco"));
         retorno.setTelefone(resultado.getString("telefone"));
     }
     return retorno;
    

    }

    public ArrayList listar() throws SQLException {

     StringBuffer sql = new StringBuffer();
     sql.append("SELECT CodigoCliente , nome , cpf, endereco , telefone ");
     sql.append("FROM cliente ");
     sql.append("ORDER BY nome ASC");
    
     Connection conexao = ConexaoFactory.conectar();
    
     PreparedStatement comando = conexao.prepareStatement(sql.toString());
     ResultSet resultado = comando.executeQuery();
    
     ArrayList<Cliente> lista = new ArrayList<Cliente>();
    
     while (resultado.next()) {
    
         Cliente c = new Cliente();
    
         c.setNome(resultado.getString("nome"));
         c.setCpf(resultado.getString("cpf"));
         c.setEndereco(resultado.getString("endereco"));
         c.setTelefone(resultado.getString("telefone"));
         c.setCodigoCliente(resultado.getLong("codigoCliente"));
    
         lista.add(c);
    
     }
    
     return lista;
    

    }

    public ArrayList buscarPorNome(Cliente c) throws SQLException {

     StringBuffer sql = new StringBuffer();
     sql.append("SELECT CodigoCliente , nome, cpf , endereco, telefone ");
     sql.append("FROM cliente ");
     sql.append("WHERE nome LIKE ?");
     sql.append("ORDER BY  nome ASC");
    
     Connection conexao = ConexaoFactory.conectar();
    
     PreparedStatement comando = conexao.prepareStatement(sql.toString());
     comando.setString(1, "%" + c.getNome() + "%");
     comando.setString(2, "%" + c.getCpf() + "%");
     comando.setString(3, "%" + c.getEndereco() + "%");
     comando.setString(4, c.getTelefone());
    
     ArrayList<Cliente> lista = new ArrayList<Cliente>();
     comando.setString(1, c.getNome());
     comando.setString(2, c.getCpf());
     comando.setString(3, c.getEndereco());
     comando.setString(4, c.getTelefone());
     ResultSet resultado = comando.executeQuery();
    
     while (resultado.next()) {
    
         Cliente item = new Cliente();
    
         item.setCodigoCliente(resultado.getLong("codico"));
    
         item.setNome(resultado.getString("nome"));
         item.setCpf(resultado.getString("cpf"));
         item.setEndereco(resultado.getString("endereco"));
         item.setTelefone(resultado.getString("telefone"));
         lista.add(item);
    
     }
    
     return lista;
    

    }

}

modelagem

Amigo pelo que entendi este é o modelo do teu banco de dados, e para salvar a denuncia tu estas precisando do id do cliente, antes de tudo é bom ter uma boa lógica pro teu banco, como não cadastrar duas vezes o CPF de um cliente. depois fica fácil. Cria uma query para verificar se o CPF do cliente já esta cadastrado, caso faça o cadastro dele, se já estiver cadastrado, tu só vais precisar de uma query para recuperar o id do cliente já cadastrado no sistema ou do novo cliente cadastrado.

Pessoalmente é assim que trabalho, isso ao meu vê da mais segurança ao meu banco de dados, sempre fazendo consultas antes de incluir, remover ou alterar qualquer coisa.

Sim com certeza, eu to fazendo teste sabe, por exemplo cadastrar o cliente e depois a denuncia, só que ele não cadastra a denuncia. aqui está o XHTM Cliente ui:define name=“menu”>
<ui:include src="/includes/menuSMA.xhtml" />
</ui:define>

<ui:define name="conteudo">
    <f:event listener="#{MBDenuncia.carregarListagem()}" 
             type="preRenderView"/>       

    <h:form id="frmDenListagem">

        <p:dataTable id="tblDenListagem" widgetVar="tabelaDenListagem"
                     value="#{MBDenuncia.itens}" var="item"
                     emptyMessage="Nem Registro Encontrado!!"

                     paginator="true" rows="8" 
                     filteredValue="#{MBDenuncia.itensFiltrados}">
            <f:facet name="header">

                <h:outputText value="Lista de Denuncias"/>
            </f:facet> 

            <p:column headerText="Códico" 
                      filterBy="#{item.codigoDenuncia}" sortBy="#{item.codigoDenuncia}">

                <h:outputText value="#{item.codigoDenuncia}"/>

            </p:column>

            <p:column headerText="Tipo de Denuncia"
                      filterBy="#{item.tip_Denuncia}" sortBy="#{item.tip_Denuncia}">

                <h:outputText value="#{item.tip_Denuncia}"/>

            </p:column>
            <p:column headerText="Endereço Denuncia" filterBy="#{item.ende_Denuncia}"
                      sortBy="#{item.ende_Denuncia}">

                <h:outputText value="#{item.ende_Denuncia}">



                </h:outputText>

            </p:column>

            <p:column headerText="Data Denuncia"  sortBy="#{item.dataDenuncia}"
                      filterBy="#{item.dataDenuncia}">

                <h:outputText value="#{item.dataDenuncia}"/>

            </p:column>

            <p:column headerText="Clientes" filterBy="#{item.cliente.nome}" 
                      sortBy="#{item.cliente.nome}">

                <h:outputText value="#{item.cliente.nome}"/>

            </p:column>

            <p:column headerText="Opções">

                <p:commandButton icon="ui-icon-trash"
                                 oncomplete="PF('dlgDenExcluir').show();"
                                 update=":frmDenExcluir:pnlDenExcluir">

                    <f:setPropertyActionListener target="#{MBDenuncia.denuncia}" value="#{item}" />

                </p:commandButton>

                <p:commandButton icon="ui-icon-pencil"
                                 actionListener="#{MBDenuncia.prepararEditar()}"
                                 oncomplete="PF('dlgDenEditar').show();"
                                 update=":msgGlobal :frmDenEditar:pnlDenEditar" >
                    <f:setPropertyActionListener target="#{MBDenuncia.denuncia}" value="#{item}">



                    </f:setPropertyActionListener>


                </p:commandButton>

            </p:column>

            <f:facet name="footer">

                <p:commandButton value="Novo" 
                                 oncomplete="PF('dlgDenNovo').show();"
                                 actionListener="#{MBDenuncia.prepararNovo()}"
                                 update=":frmDenNovo:pnlDenNovo :msgGlobal"/>

            </f:facet>

        </p:dataTable>
    </h:form>

    <p:dialog widgetVar="dlgDenNovo" closable="false" draggable="false" resizable="false"
              appendTo="@(body)"
              header="Denuncia- Nova">

        <h:form id="frmDenNovo">                
            <h:panelGrid id="pnlDenNovo" columns="2">                    
                <p:outputLabel for="txtDenTNovo" value="Tipo Denuncia"/>
                <p:inputText id="txtDenTNovo" value="#{MBDenuncia.denuncia.tip_Denuncia}" 
                             maxlength="50" size="30"
                             required="true"
                             requiredMessage="O campo Tipo De Denuncia  è Obrigatório "/>

                <p:outputLabel value="Foto Denuncia"/>
                <h:inputFile  value="#{MBDenuncia.denuncia.foto}"
                              />

                <p:outputLabel for="textEnNovo" value="Endereço Denuncia"/>
                <p:inputText id="textEnNovo" value="#{MBDenuncia.denuncia.ende_Denuncia}" 
                             size="10"
                             required="true"
                             requiredMessage="Endereço Denuncia é Obrigatorio"

                             />



                <p:outputLabel  value="Data Denuncia"/>

                <label>
                    <input type="date" value="#{MBDenuncia.denuncia.dataDenuncia}" />


                </label>

                <p:outputLabel for="CliNovo" value="Cliente"/>
                <p:selectOneMenu id="CliNovo" value="#{MBDenuncia.denuncia.cliente.codigoCliente}" 
                                 filter="true"
                                 required="true" requiredMessage="O campo Cliente é Obrigatório">
                    <f:selectItem itemValue="" itemLabel="Selecione um Cliente"/>

                    <f:selectItems value="#{MBDenuncia.comboClientes}"
                                   var="item"
                                   itemValue="#{item.codigoCliente}" itemLabel="#{item.nome}"/>



                </p:selectOneMenu>

            </h:panelGrid>   

            <h:panelGrid columns="2">

                <p:commandButton value="Gravar" actionListener= "#{MBDenuncia.novo()}" 
                                 update=":msgGlobal :frmDenListagem:tblDenListagem" 
                                 oncomplete="verificar(xhr, status, args,'dlgDenNovo', 'tabelaDenListagem');"/>

                <p:commandButton value="Cancelar" process="@this"
                                 oncomplete="PF('dlgDenNovo').hide();">
                    <p:resetInput target="pnlDenNovo"/>             
                </p:commandButton>



            </h:panelGrid>



        </h:form>

    </p:dialog> 

    <p:dialog widgetVar="dlgDenExcluir"
              draggable="false"
              closable="false" resizable="false"
              header=" Produto- Excluir">

        <h:form id="frmDenExcluir">                
            <h:panelGrid  id="pnlDenExcluir" columns="2">                    
                <p:outputLabel value="Códico"/>
                <h:outputText value="#{MBDenuncia.denuncia.codigoDenuncia}"/>

                <p:outputLabel value="Tipo Denuncia"/>
                <h:outputText value="#{MBDenuncia.denuncia.tip_Denuncia}"/>

                <p:outputLabel value="Data Denuncia"/>
                <h:outputText value="#{MBDenuncia.denuncia.dataDenuncia}">
                    <f:convertNumber />

                </h:outputText>

                <p:outputLabel value="Endereço Denuncia"/>

                <h:outputText value="#{MBDenuncia.denuncia.ende_Denuncia}"/>

                <p:outputLabel value="Cliente"/>                    
                <h:outputText value="#{MBDenuncia.denuncia.cliente.nome}"/>                

            </h:panelGrid>

            <p:panelGrid columns="2"> 

                <p:commandButton value="Excluir"
                                 actionListener="#{MBDenuncia.excluir()}"
                                 update=":msgGlobal :frmDenListagem:tblDenListagem"
                                 oncomplete="PF('dlgDenExcluir').hide(); tabelaDenListagem.clearFilters();"/>

                <p:commandButton value="Cancelar" 
                                 oncomplete="PF('dlgDenExcluir').hide();"/>
            </p:panelGrid>

        </h:form> 
    </p:dialog>         

    <p:dialog widgetVar="dlgDenEditar"
              closable="false"
              draggable="false"
              resizable="false" 
              header=" Denuncia Editada">

        <h:form id="frmDenEditar">

            <p:panelGrid id="pnlDenEditar" columns="2">

                <p:outputLabel value="Códico"/>
                <h:outputText value="#{MBDenuncia.denuncia.codigoDenuncia}"/>

                <p:outputLabel value="Descrição Denuncia"/>
                <h:inputText value="#{MBDenuncia.denuncia.ende_Denuncia}" 
                             maxlength="50" size="30"/>
                <p:outputLabel value="Endereço Denuncia"/>

                <h:inputText value="#{MBDenuncia.denuncia.ende_Denuncia}">
                    />

                </h:inputText>


                <p:outputLabel value="Cliente"/>

                <p:selectOneMenu value="#{MBDenuncia.denuncia.cliente}"
                                 filter="true">
                    <f:selectItem itemValue=""  itemLabel="Selecione um Cliente "/>
                    <f:selectItems  value="#{MBDenuncia.comboClientes}" var="item" itemValue="#{item.codigoCliente}" itemLabel="#{item.nome}"/>

                </p:selectOneMenu>



            </p:panelGrid> 



            <h:panelGrid columns="2">

                <p:commandButton value="Editar" actionListener="#{MBDenuncia.editar()}"
                                 update=":msgGlobal :frmDenListagem:tblDenListagem"
                                 oncomplete="verificar(xhr, status, args,'dlgDenEditar', 'tabelaDenListagem')"/>


                <p:commandButton value="Cancelar" process="@this"
                                 oncomplete="PF('dlgDenEditar').hide();">
                    <p:resetInput target="pnlDenEditar" />

                </p:commandButton>
            </h:panelGrid>

        </h:form>


    </p:dialog>

</ui:define>

</ui:composition>

e aqui o XHTML denuncia
ui:define name=“menu”>
<ui:include src="/includes/menuSMA.xhtml"/>
</ui:define>
<ui:define name=“conteudo”>
<h:form id=“frmCliListagem”>

        <p:dataTable  id="tblClientes" widgetVar="tabelaCliente" 
                      emptyMessage="Nenhum Reegistro Encotrado!!"

                      value="#{MBCliente.itens}" 
                      var="item"
                      filteredValue="#{MBCliente.intensFiltrados}"
                      paginator="true"
                      rows="10">

            <f:facet name="header">                
                Clientes Cadastrados

            </f:facet>

            <p:column headerText="Código" sortBy="#{item.codigoCliente}"
                      filterBy="#{item.codigoCliente}">

                <h:outputText value="#{item.codigoCliente}" />
            </p:column>
            <p:column headerText="Nome" sortBy="#{item.nome}"
                      filterBy="#{item.nome}">
                <h:outputText value="#{item.nome}" />
            </p:column>


            <p:column headerText="Cpf" sortBy="#{item.cpf}"
                      filterBy="#{item.cpf}">
                <h:outputText value="#{item.cpf}" />
            </p:column>

            <p:column headerText="Endereco" sortBy="#{item.endereco}"
                      filterBy="#{item.endereco}">
                <h:outputText value="#{item.endereco}" />

            </p:column>

            <p:column headerText="Telefone" sortBy="#{item.telefone}"
                      filterBy="#{item.telefone}">
                <h:outputText value="#{item.telefone}" />

            </p:column>

            <p:column headerText="Opções">                   
                <p:commandButton icon="ui-icon-trash" 
                                 oncomplete="PF('dlgCliExcluir').show();"                                     
                                 update=":frmCliExcluir:pnlCliExcluir">
                    <f:setPropertyActionListener 
                        target="#{MBCliente.cliente}" value="#{item}"/>

                </p:commandButton>

                <p:commandButton icon="ui-icon-pencil" oncomplete="PF('dlgCliEditar').show();"
                                 update=":frmCliEditar:pnlCliEditar">

                    <f:setPropertyActionListener target="#{MBCliente.cliente}" value="#{item}"/>
                </p:commandButton>
            </p:column>

            <f:facet name="footer">

                <p:commandButton value="Novo Cadastro"
                                 actionListener="#{MBCliente.prepararNovo}" 
                                 oncomplete ="PF('dlgCliNovo').show();"
                                 update=":frmCliNovo:pnlCliNovo"/>




            </f:facet>
        </p:dataTable>
    </h:form>        
    <p:dialog widgetVar="dlgCliNovo"
              closable="false"
              draggable="false"
              resizable="false"
              modal="true" appendTo="@(body)"
              header="Cliente - Novo">

        <h:form id="frmCliNovo">                
            <h:panelGrid  id="pnlCliNovo" columns="2">

                <p:outputLabel for="txtNomCliNovo" value="Nome:"/>
                <p:inputText  id="txtNomCliNovo" size="30" maxlength="50" 
                              value="#{MBCliente.cliente.nome}"
                              required="true"
                              requiredMessage="Campo Nome é Obrigatório!"/>

                <p:outputLabel for="txtCpfCliNovo" value="Cpf:"/>
                <p:inputText  id="txtCpfCliNovo" size="30" maxlength="50" 
                              value="#{MBCliente.cliente.cpf}"
                              required="true"
                              requiredMessage="Campo Cpf é Obrigatório!"/>

                <p:outputLabel for="txtEndCliNovo" value="Endereço:"/>
                <p:inputText  id="txtEndCliNovo" size="30" maxlength="50" 
                              value="#{MBCliente.cliente.endereco}"
                              required="true"
                              requiredMessage="Campo Endereço é Obrigatório!"/>

                <p:outputLabel for="txtTelCliNovo" value="Telefone:"/>
                <p:inputText  id="txtTelCliNovo" size="30" maxlength="50" 

                              value="#{MBCliente.cliente.telefone}"
                              required="true"
                              requiredMessage="Telefone é Obrigatório!"/>


            </h:panelGrid>  

            <p:panelGrid columns="2">
                <p:commandButton value="Salvar" actionListener="#{MBCliente.novo}"
                                 oncomplete="verificar(xhr, status, args, 'dlgCliNovo', 'tabelaCliente');"
                                 update=":frmCliListagem:tblClientes :msgGlobal"/>
                <p:commandButton value="Cancelar" process="@this"
                                 onclick="PF('dlgCliNovo').hide();">

                    <p:resetInput target="pnlCliNovo" />
                </p:commandButton>                    
            </p:panelGrid>

        </h:form>
    </p:dialog>

    <p:dialog widgetVar="dlgCliExcluir" 
              closable="false"
              draggable="false"
              resizable="false"
              modal="true" 
              appendTo="@(body)"
              header=" Excluir Cliente"> 

        <h:form id="frmCliExcluir">                
            <h:panelGrid id="pnlCliExcluir" columns ="2" >                    
                <h:outputText value="Códico"/>                    
                <h:outputText  value="#{MBCliente.cliente.codigoCliente}"/>

                <h:outputText value="Nome:"/>
                <h:outputText value="#{MBCliente.cliente.nome}"/>
                <h:outputText value="Endereço:"/>
                <h:outputText value="#{MBCliente.cliente.endereco}"/>
                <h:outputText value="Cpf:"/>
                <h:outputText value="#{MBCliente.cliente.cpf}"/>
                <h:outputText value="Telefone:"/>
                <h:outputText value="#{MBCliente.cliente.telefone}"/>

            </h:panelGrid>


            <h:panelGrid columns="2">
                <p:commandButton value="Excluir" actionListener="#{MBCliente.excluir()}"
                                 oncomplete="PF('dlgCliExcluir').hide(); tabelaCliente.clearFilters();"
                                 update=":frmCliListagem:tblClientes :msgGlobal"/>
                <p:commandButton value="Cancelar" onclick="PF('dlgCliExcluir').hide();"/>




            </h:panelGrid>
        </h:form>
    </p:dialog>

    <p:dialog widgetVar="dlgCliEditar"
              draggable="false"
              resizable="false"                          
              closable="false"
              modal="true"
              appendTo ="@(body)"

              header=" Editar Cliente"> 

        <h:form id="frmCliEditar">

            <p:panelGrid id="pnlCliEditar" columns="2">                            
                <h:outputText value="Códico"/>
                <h:outputText value="#{MBCliente.cliente.codigoCliente}"
                              />

                <h:outputLabel for="txtNomProdEditar" value="Nome"/>
                <p:inputText  id="txtNomProdEditar" value="#{MBCliente.cliente.nome} " 
                              size="30" maxlength="50"
                              required="true"
                              />


                <h:outputLabel for="txtEndeProdEditar" value="Endereço"/>
                <p:inputText  id="txtEndeProdEditar" value="#{MBCliente.cliente.endereco} " 
                              size="30" maxlength="50"
                              required="true"/>
                <h:outputLabel for="txtTelProdEditar" value="Nome"/>
                <p:inputText  id="txtTelProdEditar" value="#{MBCliente.cliente.telefone} " 
                              size="30" maxlength="50"
                              required="true"/>
                <h:outputLabel for="txtCpfProdEditar" value="Cpf"/>
                <p:inputText  id="txtCpfProdEditar" value="#{MBCliente.cliente.cpf} " 
                              size="30" maxlength="50"/>
            </p:panelGrid>                        
            <p:panelGrid columns="2">
                <p:commandButton value="Ok"
                                 actionListener="#{MBCliente.editar}"                                              
                                 oncomplete="verificar(xhr, status, args,'dlgCliEditar', 'tabelaCliente');"
                                 update=":frmCliListagem:tblClientes :msgGlobal"/>                          
                <p:commandButton value="Cancelar" process="@this"
                                 onclick="PF('dlgCliEditar').hide();">
                    <p:resetInput target="pnlCliEditar" />             

                </p:commandButton>

            </p:panelGrid>

        </h:form>            






    </p:dialog>
</ui:define>

</ui:composition>

não sei se la no banco ta o erro ou na html

Bem, como tu disseste, teu método cadastra a o cliente, mas não a denuncia, vamos começar por ai, mostra teu código INSERT INTO denuncias, e vamos analisar o código.

Nos POSTS acima você só postou o INSERT INTO clientes.

public class DenunciaDAO {

public void salvar(Denuncia d) throws SQLException {

    StringBuilder sql = new StringBuilder();
    sql.append(" INSERT INTO denuncia ");
    sql.append(" SELECT CPF from denuncia where CPF = Cpf");
    sql.append("(Tip_Denuncia, Ende_Denuncia, foto, DataDenuncia , CodigoCliente )");
    sql.append("VALUES (?, ?, ?, ? , ? ) ");

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());
    comando.setString(1, d.getTip_Denuncia());
    comando.setString(2, d.getEnde_Denuncia());
    comando.setBlob(3, d.getFoto());
    comando.setDate(4, d.getDataDenuncia());
    comando.setLong(5, d.getCliente().getCodigoCliente());

    comando.executeUpdate();

}

Acho que já sei qual é o problema, vamos fazer assim:

1° Cria um método que pesquisa e retorna o ID do usuário, pelo CPF.
SELECT id FROM cliente WHERE cpf = ‘000.000.000-00’;

2° No teu método INSERT INTO denuncia tu tens que informa o ID do CLIENTE que esta fazendo a denuncia. Partindo dai tu tens recuperar o retorno do método criado acima no item .

3° Lembra que a chave estrangeira não pode ficar vazia, logo é mais que necessário você informe ela pro método INSERT INTO denuncias para todas as informações serem incluídas juntas, no teu caso ela é simplesmente o ID do CLIENTE que fez a denuncia.

4° Ao que tudo indica esse é o erro que tu estas cometendo, pois tu não estás informando a chave estrangeira e ela não é carregada sozinha.

1 curtida

Bha tu estas me ajudando muito, só mas uma duvidas eu crio esses dois metodos na denuncia ne?

Sim! Na verdade depende, tu podes criar os métodos na tua classe que contem todo o teu CRUD e depois cria um objeto na hora da ação quando a denuncia for enviada, você chamar os métodos pelo objeto para validar tudo e executar a inclusão no banco.

O importante é que os dois métodos trabalhem juntos no momento da ação quando o usuário clicar para enviar a denuncia, porque a partir dai tu podes retornar mensagens de erro, como por exemplo: O CPF é inválido, usuário não cadastrado. etc… depois de validar tudo, tu podes incluir no banco a denuncia.

seria isso?
public ArrayList pesquisa() throws SQLException {

    StringBuffer sql = new StringBuffer();
    sql.append("SELECT CodigoCliente ");
    sql.append("FROM cliente WHERE cpf = ‘000.000.000-00’; ");
    

    Connection conexao = ConexaoFactory.conectar();

    PreparedStatement comando = conexao.prepareStatement(sql.toString());
    ResultSet resultado = comando.executeQuery(); 
       return pesquisa() ;

Sim, primeiro recupera o ID, depois faz o cadastro no banco. Eu fiz um exemplo bem explicado.

1° CONEXÃO

package connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionFactory {

private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USER = "root";
private static final String PASS = "";

public static Connection getConnection() {
    try {
        Class.forName(DRIVER);
        return (Connection) DriverManager.getConnection(URL, USER, PASS);
    } catch (ClassNotFoundException | SQLException ex) {
        throw new RuntimeException("Erro na conexão: ", ex);
    }
}

public static void closseConnection(Connection con) {
    try {
        if (con != null) {
            con.close();
        }
    } catch (SQLException ex) {
        Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public static void closseConnection(Connection con, PreparedStatement pst) {
    closseConnection(con);
    try {
        if (pst != null) {
            pst.close();
        }
    } catch (SQLException ex) {
        Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public static void closseConnection(Connection con, PreparedStatement pst, ResultSet rs) {
    closseConnection(con, pst);
    
    try {
        if (rs != null) {
            rs.close();
        }
    } catch (SQLException ex) {
        Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex);
    }
}

}

2° ATRIBUTOS

package model.bean;

public class Atributos {

private int id;
private String nome;
private String endereco;
private String telefone;
private String decricao;
private String foto;
private String cpf;
private String tio;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getEndereco() {
    return endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getDecricao() {
    return decricao;
}

public void setDecricao(String decricao) {
    this.decricao = decricao;
}

public String getFoto() {
    return foto;
}

public void setFoto(String foto) {
    this.foto = foto;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getTio() {
    return tio;
}

public void setTio(String tio) {
    this.tio = tio;
}

}

3° METODOS

package model.dao;

import connection.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import model.bean.Atributos;

public class AtributosDAO {

public void createDenuncia(Atributos at) {
    Connection con = ConnectionFactory.getConnection();
    PreparedStatement pst = null;

    try {
        pst = con.prepareStatement("INSERT INTO denuncia (cliente_id, decricaoD, endeD, fotoD) VALUES (?, ?, ?, ?)");
        pst.setInt(1, at.getId());
        pst.setString(2, at.getDecricao());
        pst.setString(3, at.getEndereco());
        pst.setString(4, at.getFoto());
        pst.executeUpdate();
        JOptionPane.showMessageDialog(null, "Denuncia salva com sucesso!", "Aviso", 1);
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Error ao salvar denuncia: " + ex, "Aviso", 0);
    } finally {
        ConnectionFactory.closseConnection(con, pst);
    }
}

public List<Atributos> readID(String cpf) {
    Connection con = ConnectionFactory.getConnection();
    PreparedStatement pst = null;
    ResultSet rs = null;
    List<Atributos> atributos = new ArrayList<>();

    try {
        pst = con.prepareStatement("SELECT id FROM cliente WHERE cpf = ?");
        pst.setString(1, cpf);
        rs = pst.executeQuery();
        while (rs.next()) {
            Atributos atb = new Atributos();
            atb.setId(rs.getInt("id"));
            atributos.add(atb);
        }
    } catch (SQLException ex) {
        Logger.getLogger(AtributosDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        ConnectionFactory.closseConnection(con, pst, rs);
    }
    return atributos;
}

}

4° HORA DO SHOW

import javax.swing.JOptionPane;
import model.bean.Atributos;
import model.dao.AtributosDAO;

public class Principal {

public static void main(String[] args) {

    AtributosDAO atDAO = new AtributosDAO();
    Atributos atributos = new Atributos();

    String cpf = "000.000.000-01"; //CPF da pessoa que esta fazendo a denuncia
    String decricao = "Os politicos sao corruptos."; //Decricao que a pessoa forneceu.
    String endereco = "Av. fulano de tal, n° 200."; //Endereço da pessoa que esta fazendo a denuncia
    String foto = "1b0cb3c696ae03c65e0d5ccad1fe5742.jpg"; //Foto da pessoa que esta fazendo a denuncia
    int id = 0;

    for (Atributos at : atDAO.readID(cpf)) {
        id = at.getId();
    }

    if (id != 0) {
        
        //Setando informações a serem mandadas ao banco.
        atributos.setId(id);
        atributos.setDecricao(decricao);
        atributos.setEndereco(endereco);
        atributos.setFoto(foto);
        
        atDAO.createDenuncia(atributos); //Cadastrando denuncia no banco.

    } else {
        JOptionPane.showMessageDialog(null, "Usuário não cadastrado!");
    }

}

}

Velho, vou te dar um método que valida CPF, dai você usa no teu código para não mandar qualquer consulta pro teu banco.

/**
* Método valida um CPF por completo com todas as proteções possíveis.
*
* @param cpf String do CPF que deve ser tratado.
* @return boolean caso o cpf passe ou não pela analise.
*/

public static boolean validadorCPF(String cpf) {
    String cpfAnalise = cpf.replaceAll("[^0-9]", ""); //REMOVE PONTOS E TRAÇOS
    String[] array = new String[1];
    array = cpf.split("-");
    array[0] = array[0].replace(".", "");
    char arrayCharUm[] = array[0].toCharArray();
    int digGeradoUm = 0;
    int digGeradoDois = 0;
    
    if (cpfAnalise.length() != 11) {return false;} //VERIFICA O TAMANHO DA STRING
    if (cpfAnalise.matches("(\\d)\\1{10}")) {return false;} //VERIFICA SE NAO TEM VALORES REPETIDOS COMO EX: 111.111.111-11
    
    //CALCULANDO PRIMEIRO DIGITO
    for (int sobe = 0, desce = 10; sobe <= arrayCharUm.length && desce >= 2; sobe++, desce--) {
        digGeradoUm += (arrayCharUm[sobe] - 48) * desce;
    }
    digGeradoUm = 11 - (digGeradoUm % 11);
    String strFirstDig = Integer.toString(digGeradoUm);
    String novaString = new String(arrayCharUm);
    novaString = novaString + strFirstDig;
    
    //CALCULANDO SEGUNDO DIGITO
    char arrayCharDois[] = novaString.toCharArray();
    for (int sobe = 0, desce = 11; sobe <= arrayCharDois.length && desce >= 2; sobe++, desce--) {
        digGeradoDois += (arrayCharDois[sobe] - 48) * desce;
    }
    digGeradoDois = 11 - (digGeradoDois % 11);
    String strSecundDig = Integer.toString(digGeradoDois);
   

    return array[1].equals(strFirstDig + strSecundDig);
}