Trabalhando com chaves estrangeiras

7 respostas
analuiza.fagundes

[color=blue][/color][size=18][/size]
Boa noite , sou iniciante neste fórum , e estou fazendo um projeto onde preciso cadastrar cargos Ex : médico , enfermeiro … minha tela possui um codigo e o nome do cargo , minha classe a mesma coisa , só que no projeto do banco de dados ele recebe também outras duas chaves estrangeiras e se eu tento cadastrar o cargo dá um SQLException porque eu tento inserir na tabela mas sem as chaves estrangeiras , alguém sabe me dizer o que eu faço com as chaves estrangeiras ???

7 Respostas

jurunaloco

está usando jdbc puro ou hibernate?

yoshikichi

analuiza.fagundes:
[color=blue][/color][size=18][/size]
Boa noite , sou iniciante neste fórum , e estou fazendo um projeto onde preciso cadastrar cargos Ex : médico , enfermeiro … minha tela possui um codigo e o nome do cargo , minha classe a mesma coisa , só que no projeto do banco de dados ele recebe também outras duas chaves estrangeiras e se eu tento cadastrar o cargo dá um SQLException porque eu tento inserir na tabela mas sem as chaves estrangeiras , alguém sabe me dizer o que eu faço com as chaves estrangeiras ???

Ficou meio vago sua pergunta, mas td bem.
Vc não pode esquecer das dependencia, lembra. Primeiro a tabela sem foreign key, depois as tabelas q puxam a foreign key dela.
Por exemplo: Tabela A puxa a chave de B. Então deve persistir a classe mapeada para B primeiro, sacou?
Depois vc persiste a classe mapeada para A.

Posta suas duas classes ai, e sua persistencia tb. há entre [CODE]

Falow, até.

analuiza.fagundes

Olá eu tenho uma classe cargo com cod e nom , já fiz os metodos de cadastrar cargo tá tudo certo , ja fiz as tabelas com as chaves estrangeiras no postgre e quando clico em incluir dá uma SQLExceotion dizendo que tenho que preencher as chaves estrangeiras da tabela cargo só que nao sei como fazer isso porque a tela so possui dois capo a serem preenchidos o conteudo das chaves primarias nao sei de onde pegar.
Minhas classes abaixo :

package modelo;

public class Cargo

{

private int cod;

private String nome;
public int getCod() {
	return cod;
}
public void setCod(int cod) {
	this.cod = cod;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}

}

Classe ControleCargo

// extrai os componentes da tela

JTextField tx_cod = (JTextField)painel_dados.getComponent(1);

JTextField tx_nome = (JTextField)painel_dados.getComponent(3);
// cadastra no banco

if ( e.getActionCommand().equals(Incluir))

{

if(tx_cod.getText().equals("")||tx_nome.getText().equals(""))

{

JOptionPane.showMessageDialog(null,Por favor preencha o campo COD e NOME para realizar o cadastro,Atenção, JOptionPane.ERROR_MESSAGE);

}

else

{

daocg.cadastrar ©;

JOptionPane.showMessageDialog(null,Cargo cadastrada com sucesso !!!”,null,JOptionPane.INFORMATION_MESSAGE);

}
}

Classe DAOCargo

public void cadastrar(Cargo c)

{

try

{

PreparedStatement ps = DAOFactoryPSQL.getConnection ().prepareStatement ( insert into cargo values (?,?));

ps.setInt(1,c.getCod());

ps.setString(2,c.getNome());

ps.executeUpdate() ;

}

catch ( Exception e )

{

System.out.println(e.getMessage());

}
}

a tabela no banco de dados …

CREATE TABLE cargo
(
cod integer NOT NULL,
funcionario_pessoa_cpf character varying NOT NULL,
funcionario_matricula integer NOT NULL,
nome character varying,
CONSTRAINT cargo_pkey PRIMARY KEY (cod),
CONSTRAINT cargo_funcionario_matricula_fkey FOREIGN KEY (funcionario_matricula)
REFERENCES funcionario (matricula) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT cargo_funcionario_pessoa_cpf_fkey FOREIGN KEY (funcionario_pessoa_cpf)
REFERENCES pessoa (cpf) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)

E o erro …
ERROR: null value in column “funcionario_matricula” violates not-null constraint sei o que significa o erro , só nao sei como concertar na implementação.

Mais uma vez obrigada a todos pela disponibilidade!

analuiza.fagundes

estou usando JDBC com o banco de dados postgresql

Jarf

Coloque o código entre a tag [code] para ficar melhor a vizualização do código :wink:

yoshikichi

estou usando JDBC com o banco de dados postgresql
Entendi.
O seguinte, Controle_de_cargo puxa as chaves das outras tabelas.
como puxa, vc tem q dar um select nas tabelas q controledecargo depende.
vc tb pode colocar dois campos a mais, para as repectivas chaves estrangeiras. e add no insert tb.
Depois vc arruma, é so para vc ter uma ideia.
Há detalhe como é ControleCargo tem q ter cadastrado essas duas chave estrangeiras nas tabelas q ControleCargo depende.
Outra coisa, qndo vc postar um codigo coloca entre as tag e em minusculo.
at+

analuiza.fagundes

Aos amigos que me ajudaram , muito obrigado , só estava faltando o select no meu código …
Gostei muito deste fórum e prometo participar mais vezes , não so postando minhas duvidas como tambem tenando ajudar.

Criado 5 de novembro de 2008
Ultima resposta 6 de nov. de 2008
Respostas 7
Participantes 4