Inserir dados de multiplas tabelas

6 respostas
FSRech
Olá a todos, deixa eu tentar explicar meu problema:

Eu possuo duas tabelas, como por exemplo

Casa(

codigoCasa;

CorCasa;

ruaCasa;

);

e

Morador(

codigoMorador;

NomeMorador;

cod_casa;

);

Acontece que o cod_casa da tabela morador é uma referencia a Casa.codigoCasa,

e eu estou gravando os dois juntos na minha classe, mas como o codigoCasa é um campo do tipo serial do postgree, eu pergunto, como vou saber em tempo de execucão qual o código que o postgre forneceu para o objeto que acabei de gravar ? pois como poderei manter a relacao correta na gravacao se ainda nao sei qual o codigo do mesmo.

Obrigado

6 Respostas

Pedrosa

Apos gravar na primeira tabela faça um select para obter o ultimo id e faça o insert na próxima tabela, OBS esse id precisa ser autoincrement, pois vou obter sempre o maior ou seja o ultimo,

Exemplo em MYSQL:

public int ultimoRegistro() throws SQLException{
    sql = "SELECT max(cod_cliente)as codigo FROM `cliente`";
    PreparedStatement stmt = this.connection.prepareStatement(sql);
    ResultSet rs = stmt.executeQuery();
    rs.next();
    int ultimo = rs.getInt("codigo") ;
    System.out.println("ultimo " + ultimo);
    stmt.close();
    return ultimo;
}
obj.insertTab1(dados);
dados.setCodxxx(obj.ultimoRegistro())
obj.insertTab2(dados);
FSRech

Beleza, eu achei no google tb, muito obrigado pela resposta!

Maniezo

Pedrosa,

Nesse seu exemplo pode dar problema! Imagine varios insert acontecendo ali simultaneos… pode acontecer de alguem tentar inserir um cod_cliente que ja esta no banco porque outro acesso foi mais rapido…

Pedrosa

Exatamente, nesse caso precisamos criar métodos sincronizados, ou existe alguma outra forma de pegar o registro 100% certo?

Maniezo

É Pedrosa ta certo…

Mas achei meio estranho… não sei uma solução mesmo…

Não sei se java tem algo do tipo (não sou expert) mas no PHP tem um esquema legal pra isso:

$query = mysql_query("insert");
$id = mysql_insert_id(); // Aqui retorna o id que foi inserido
//facilita pra inserir na proxima tabela

Se souber como fazer isso no JAVA vai me ajudar tambem!

Valew!

FSRech

eu vou usar isto que achei no FAQ do postgreSQL

Alternativamente, você poderia obter o valor SERIAL atribuído com a
função currval() depois de -lo inserido por padrão, i.e.,
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
novo_id = execute("SELECT currval('pessoa_id_seq')");
Criado 20 de outubro de 2006
Ultima resposta 20 de out. de 2006
Respostas 6
Participantes 3