Fórum Inserir dados em varias tabelas com chaves estrangeiras com o PreparedStatement #520584
22/05/2015
0
Os try e catchs comentados foi um filtro que fiz para ver se o programa chegava até lá... mas ele não entra lá.
Abaixo do código java está o código SQL, para melhor entendimento.
try {
//carregando o JDBC
Class.forName("org.postgresql.Driver");
//Construindo a conexão com banco de dados
Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/dados","postgres","12345");
JOptionPane.showMessageDialog(null, "Conectado");
PreparedStatement gravar = con.prepareStatement("Insert into Pessoas values(?,?,?,?)");
gravar.setString(1,jTCPF.getText());
gravar.setString(2, jTNome.getText());
gravar.setString(3, jTObservacoes.getText());
gravar.setString(4,"PessoaFisica");
gravar.executeUpdate();
//try{
gravar = con.prepareStatement("Insert into PessoaFisica values(?,?,?,?,?,?,?,?,?,?,?,?,?)");
gravar.setString(1, jTCPF.getText());
gravar.setString(2,jTRG.getText());
gravar.setString(3,jTOrgEmissor.getText());
gravar.setDate(4, (Date) jDDataEmissao.getDate());
gravar.setString(5,jTProfissao.getText());
gravar.setString (6,jCEstadoCivil.getToolTipText());
gravar.setString(7,jTnacionalidade.getText());
gravar.setString(8,jTNaturalidade.getText());
gravar.setString(9,jCEstadoNat.getToolTipText());
gravar.setDate(10, (Date) jDNascimento.getDate());
gravar.setString(11, jTAtendente.getText());
gravar.executeUpdate();
//}catch (SQLException ex){
//JOptionPane.showMessageDialog(null, "Erro nos dados básicos informados: "+ex.getMessage());
//}
//try{
gravar = con.prepareStatement("Insert into EnderecoPessoa values(?,?,?,?,?,?,?,?,?)");
gravar.setString(1,jTCPF.getText());
gravar.setString(2, jCLogradouro.getToolTipText());
gravar.setString(3,jTLogradouro.getText());
gravar.setString(4,jTNumero.getText());
gravar.setString(5, jTComplemento.getText());
gravar.setString(6,jTBairro.getText());
gravar.setString(7,jTCidade.getText());
gravar.setString(8,jCEstado.getToolTipText());
gravar.setString(9,jTCEP.getText());
//}catch (SQLException ex){
//JOptionPane.showMessageDialog(null, "Erro nos campos de endereço: "+ex.getMessage());
//}
//try{
gravar = con.prepareStatement("Insert into ContatoPessoa values(?,?,?,?,?,?,?,?)");
gravar.setString(1,jTCPF.getText());
gravar.setString(2,jCTipo1.getToolTipText());
gravar.setString(3,jTTel1.getText());
gravar.setString(4,jCTipo2.getToolTipText());
gravar.setString(5,jTTel2.getText());
gravar.setString(6,jCtipo3.getToolTipText());
gravar.setString(7,jTTel3.getText());
gravar.setString(8,jTEmail.getText());
gravar.executeUpdate();
//}catch (SQLException ex){
//JOptionPane.showMessageDialog(null, "Erro nos campos de contato: "+ex.getMessage());
//}
}catch (SQLException ex){
JOptionPane.showMessageDialog(null, "ERRO SQL: "+ex.getMessage());
}catch (ClassNotFoundException ex){
JOptionPane.showMessageDialog(null, "ERRO CLASSE: "+ex.getMessage());
}create table Pessoas( CPF_CNPJ varchar (14) primary key not null, Nome varchar(40)not null, Observacoes varchar(1500), Tipo varchar(14) ); create table PessoaFisica( CPF varchar(14) primary key not null, RG varchar(12)not null, Org_emissor varchar(10)not null, Data_emiss date, Profissao varchar(15)not null, Estado_civil varchar(12)not null, Nacionalidade varchar(12)not null, Naturalidade varchar(20)not null, Estado_nat varchar(2)not null, Nascimento date, Atendente varchar(12) not null, Documentos OID, foreign key (CPF) references Pessoas(CPF_CNPJ) ); create table PessoaJuridica( CNPJ varchar(14)primary key not null, Nome_fantasia varchar(40), Pessoa_responsavel varchar(15), Insc_estadual varchar(14), Insc_municipal varchar(10), foreign key (CNPJ) references Pessoas(CPF_CNPJ) ); create table EnderecoPessoa( Pessoa varchar(14) primary key not null, Logradouro varchar (12) not null, Nome_logradouro varchar(20) not null, Numero varchar(10) not null, Complemento varchar(20)not null, Bairro varchar(20) not null, Cidade varchar(20) not null, Estado varchar(2) not null, CEP varchar(10), foreign key (Pessoa) references Pessoas(CPF_CNPJ) ); create table ContatoPessoa( Pessoa varchar(14) primary key not null, Tipo1 varchar(12) not null, Telefone1 varchar (15)not null, Tipo2 varchar (12), Telefone2 varchar(15), Tipo3 varchar (12), Telefone3 varchar(15), Email varchar(20), foreign key (Pessoa) references Pessoas(CPF_CNPJ) );
Bruno Oliveira
Curtir tópico
+ 0Posts
15/06/2015
Marisiana Battistella
Você está utilizando o campo CPF_CNPJ como Primary Key e está definindo um campo pessoa como Primary Key nas demais tabelas.
O campo CPF_CNPJ deve ser um atributo da tabela pessoa que deverá ser único, não podendo haver duplicidade dessa informação.
Para criar as Primary Key nas tabelas, utilize sempre um campo sequencial do tipo integer e defina ele como Primary Key.
Cada tabela deve possui o seu campo sequencial e você pode segui um padrão, como poe exemplo: idpessoa, idpessoafisica, idpessoajuridica, idendereco, idcontato,...
Nas tabelas que referenciam a pessoa (PessoaFisica, PessoaJuridica, EnderecoPessoa, ContatoPessoa) você irá utilizar o campo identificador da tabela pessoa (idpessoa) e irá definí-lo como Foreign Key referenciando o idpessoa da tabela pessoa.
Assim você criará o vinculo correto entre as tabelas.
Gostei + 0
15/06/2015
Marisiana Battistella
Não é uma boa prática fazer isso, pois, por ser um campo VARCHAR, ele irá comprometer a performance das consultas.
Gostei + 0
15/06/2015
Bruno Oliveira
Bom, eu vou tentar o que você disse no primeiro post, e então eu posto o resultado.
Abraços!
Gostei + 0
15/06/2015
Marisiana Battistella
Se tiver dúvidas, vá questionando... te ajudarei no que estiver ao meu alcance.
Gostei + 0
18/06/2015
Bruno Oliveira
Porém eu creio que essa parte do codigo está errada, pois aparece o seguinte código, "Erro SQL: Nenhum valor especificado para parâmetro 1.
sql = "SELECT MAX(ID) as id_pessoa FROM Pessoas";
PreparedStatement stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
rs.next();
int lastId = rs.getInt("id_pessoa");
rs.close();
stmt.close();
Não sei o porque do erro
Gostei + 0
19/06/2015
Fernando C
CPF_CNPJ varchar (14) primary key not null,
Nome varchar(40)not null,
Observacoes varchar(1500),
Tipo varchar(14)
);
não há a coluna "ID".. verifique..
Gostei + 0
19/06/2015
Marisiana Battistella
Você pediu pra selecionar uma informação de um campo que não existe.
Se você executar esse código no banco de dados
SELECT MAX(ID) as id_pessoa FROM Pessoas
Gostei + 0
19/06/2015
Marisiana Battistella
Gostei + 0
07/07/2015
Bruno Oliveira
Desculpem a demora, estive ausente de internet por uns dias
create table Pessoas( id_pessoa serial primary key not null, CPF_CNPJ varchar (14) unique not null, Nome varchar(40)not null, Observacoes varchar(1500), Tipo varchar(14) ); create table PessoaFisica( id_pessoa serial primary Key not null, RG varchar(12)not null, Org_emissor varchar(10)not null, Data_emiss date, Profissao varchar(15)not null, Estado_civil varchar(12)not null, Nacionalidade varchar(12)not null, Naturalidade varchar(20)not null, Estado_nat varchar(2)not null, Nascimento date, Atendente varchar(12) not null, Documentos OID, foreign key (id_pessoa) references Pessoas(id_pessoa) ); create table PessoaJuridica( id_pessoa serial primary key not null, Nome_fantasia varchar(40), Pessoa_responsavel varchar(15), Insc_estadual varchar(14), Insc_municipal varchar(10), foreign key (id_pessoa) references Pessoas(id_pessoa) ); create table EnderecoPessoa( id_pessoa serial primary key not null, Logradouro varchar (12) not null, Nome_logradouro varchar(20) not null, Numero varchar(10) not null, Complemento varchar(20)not null, Bairro varchar(20) not null, Cidade varchar(20) not null, Estado varchar(2) not null, CEP varchar(10), foreign key (id_pessoa) references Pessoas(id_pessoa) ); create table ContatoPessoa( id_pessoa serial primary key not null, Tipo1 varchar(12) not null, Telefone1 varchar (15)not null, Tipo2 varchar (12), Telefone2 varchar(15), Tipo3 varchar (12), Telefone3 varchar(15), Email varchar(20), foreign key (id_pessoa) references Pessoas(id_pessoa) ); create table AlteracoesFisica( id_pessoa serial primary key not null, User_insercao varchar(10)not null, User_alteracao varchar(10), Numero_alteracoes int, foreign key (id_pessoa) references Pessoas(id_pessoa) ); create table Advogado( id_pessoa serial primary key not null, CPF varchar (11) unique not null, Nome varchar(40)not null, OAB varchar(12)not null, Estado_Emiss char(2), Data_emiss date, Especialização varchar(15)not null, Estado_civil varchar(12)not null, Nacionalidade varchar(12)not null, Naturalidade varchar(20), Estado_nat varchar(2), Nascimento date, Observacoes varchar(1500) ); create table EnderecoAdvogados( id_pessoa serial primary key not null, Logradouro varchar (12) not null, Nome_logradouro varchar(20) not null, Numero varchar(10) not null, Complemento varchar(20)not null, Bairro varchar(20) not null, Cidade varchar(20) not null, Estado varchar(2) not null, CEP varchar(10), foreign key (id_pessoa) references Advogado(id_pessoa) ); create table ContatoAdvogado( id_pessoa serial primary key not null, Tipo1 varchar(12) not null, Telefone1 varchar (15)not null, Tipo2 varchar (12), Telefone2 varchar(15), Tipo3 varchar (12), Telefone3 varchar(15), Email varchar(20), foreign key (id_pessoa) references Advogado(id_pessoa) ); create table AlteracoesAdvogado( id_pessoa serial primary key not null, User_insercao varchar(10)not null, User_alteracao varchar(10), Numero_alteracoes int, foreign key (id_pessoa) references Advogado(id_pessoa) ); create table Processo( Autor varchar(14) primary key not null, Reu varchar(14) not null, Num_processo varchar(20) not null, Comarca varchar(20) not null, Estado varchar(2), Vara varchar(25) not null, Tipo_processo varchar(10), Tipo_acao varchar(10), Adv_responsavel varchar(11), Observacoes varchar(1500), Data_inclusao date not null, Valor_pedido real not null, Data_audiencia date, Acordo varchar(3), Julgado varchar(3), Valor_acordo_sentenca real, Status varchar(9), Desfecho varchar(15), foreign key (Autor) references Pessoas(CPF_CNPJ), foreign key (Reu) references Pessoas(CPF_CNPJ), foreign key (Adv_responsavel) references Advogado(CPF) );
Gostei + 0
07/07/2015
Marisiana Battistella
SELECT MAX(id_pessoa) as id_pessoa FROM Pessoas
Gostei + 0
08/07/2015
Fernando C
Gostei + 0
09/07/2015
Fernando C
[img]http://arquivo.devmedia.com.br/forum/imagem/0-20150709-102841.jpg[/img]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)