Inserir dados de multiplas tabelas

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

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);

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

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…

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

É 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!

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 tê-lo inserido por padrão, i.e.,
execute("INSERT INTO pessoa (nome) VALUES ('Blaise Pascal')");
novo_id = execute("SELECT currval('pessoa_id_seq')");