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.
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;
}
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…
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')");