Gravar um campo codigo de uma tabela (pai) em outra (filho) campos chave primaria e estrangeira

Pessoal, impaquei e atolei aqui.

1-O banco é mysql.
2-Tenho duas tabelas ‘dados’ e ‘historicos’
3-Tenho o campo ‘codigo_dados’ nas duas tabelas.
4-Na tabela ‘historicos’, o campo ‘codigo_dados e filho da código_dados da tabela ‘dados’.
5-Como eu gravo o código da tabela dados no código da tabela históricos após a seleção escolhida?
6-Eu consigo pegar o código da tabela dados, escolhendo o comboBox num_serie com os seguintes comandos:

public void adicionar() {

String sql = “select codigo_dados from dados where num_serie = ?”;
try {
pst = conexao.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pst.setString(1, (String) cmbSerial.getSelectedItem());
rs = pst.executeQuery();
if (rs.next()) {

int codigo=rs.getInt(1);
System.out.println("O codigo selecionado foi: "+codigo); 
  } 

} catch (Exception e) { JOptionPane.showMessageDialog(null, e);
}

7-Mas não consigo pegar esse código (código) para inserir na tabela de historicos com os comandos abaixo que pego de uma tela:

String sql1 = “insert into historicos(serial_number,data_hist,tecn_hist,hist_oricos,codigo_dados)”

+ "values(?,?,?,?,?)";   //  código de dados é o quinto ponto de interrogação
    try {
        pst = conexao.prepareStatement(sql1);
          
pst.setString(1, (String) cmbSerial.getSelectedItem());
pst.setString(2, txtDataHist.getText());
pst.setString(3, txtTecnico.getText());
pst.setString(4, txtDescricao.getText()); 

pst.setString(5,“3”); // Aqui é o galho !!!

8-Como pegar a variável ‘codigo’ encontrada na tabela dados e jogar na tabela de históricos no campo (filho) de código ???
Ou tem uma maneira ‘automatica’ de tratar chave estrangeira?
9-Obrigado

1 curtida

Não compreendi bem qual é a sua dúvida, mas sua pergunta é uma questão bem lógica!

Basta executar o código a seguinte ordem:
1º - Insira o registro na tabela pai
2° - Recupere o valor do último ID gerado para codigo_dados na tabela dados através de uma consulta simples
3° - Insira o registro na tabela filho
4° - Se ocorrer conforme esperado faça commit da transação, caso contrário rollback

A implementação dos códigos fica por sua conta!

Obrigado Jonathan, o problema é que eu não estou conseguindo inserir o codigo que eu já peguei (peguei no primeiro script).

Tento ‘pegar’ essa variável codigo no segundo script,mas não consigo. Só consigo pegar os 4 primeiros que são gerados na tela. O quinto campo (pst.setString(5, na script, está errado…

Já ouviu falar de @Embeddable?

Teria que pesquisar sobre…

Ao invés de passar o valor como uma string você já tentou passar o inteiro ?

pst.setInt(5, codigo);

Quando coloco, pst.setInt(5, codigo); dá erro: cannot find symbol, variable codigo. Ele não reconhece a variavel codigo gerado nas linhas anteriores (pst.setInt(5, codigo):wink:
Funciona se eu colocar: pst.setInt(5, 3); ou pst.setInt(5, “3”); usando o numero 3 como exemplo. Ele grava 3 na tabela…

É porque você declarou a variável dentro do escopo do método, faça a declaração dela globalmente na classe, depois só faça a referência a ela na atribuição do valor código no momento em que você recupera o ID, depois jogue a mesma para o pst, aí acredito que irá funcionar.

Isso mesmo… consegui pegar agora… valeu obrigado
Estou convertendo um sistema desenvolvido em PHP/html para Java aproveitando o banco Mysql. Muitas emoções…

1 curtida