Dúvida com JDBC e chave primaria auto-increment

Boa noite a todos,

Eu estou com uma pequena dúvida sobre persistência utilizando JDBC.
Como eu recupero um objeto que acabou de ser persistido no banco e que a chave primária é auto-increment, ou seja, não temos a chave primária que acabou de ser gerada?
Por exemplo tenho a seguinte classe:

public class Registro {

Integer id;
String usuario;
Date dtCriacao;

// Métodos getters e setters

}

Nesse exemplo o atributo usuario é o único que é populado pela aplicação, os demais são preenchidos pelo banco.
Agora vamos supor que eu salve este objeto no banco e preciso recupera-lo para continuar utilizando, como faço isso se ainda não tenho a chave primária?

Hum, não sei se vai dar certo, mas eu pensei nessa solução. O que voce acha??

[code]ResultSet rs = stm.executeQuery();//Executa um SELECT * FROM tabela
Registro reg = new Registro();//Objeto que deseja com a chave-primaria
while(rs.next()){
reg.setNome(rs.getString(“nome”));
reg.setId(rs.getString(“id”));
//etc
}

//Ao final desse while o objeto “reg” será o mesmo salvo na última chave adicionada
[/code]

Não sei se essa é uma boa solução pois neste caso o programa percorre toda a tabela até encontrar o registro que você deseja. Mas espero ter te ajudado.

Abraços

tente o método getGeneratedKeys().

no Statement/PreparedStatement você precisa colocar RETURN_GENERATED_KEYS… não tenho nenhum exemplo, mas você pode procurar aqui no forum.

abraço.

Tenta isso, tem varias opções dentro desse metodo, um deles é oque vc quer, so nao to podendo testar agora…mas qq coisa add no msn ae…

if(stm.execute("insert into teste(a, b, c) values('a', 'b', 'c')")){ int chave = stm.getGeneratedKeys().getRow(); }

Blz galera, consegui.
Caso mais alguém tenha esse problema o código fica mais o menos o seguinte:

stm.execute("insert into teste(a, b, c) values('a', 'b', 'c')");
ResultSet result = stm.getGeneratedKeys();
result.next();
int chave = result.getInt(1);

Não sei se dá pra simplificar, mais pelo menos fununcia.

Abraços.

[quote=rogeriuslima]Blz galera, consegui.
Caso mais alguém tenha esse problema o código fica mais o menos o seguinte:

stm.execute("insert into teste(a, b, c) values('a', 'b', 'c')");
ResultSet result = stm.getGeneratedKeys(); 
result.next();
int chave = result.getInt(1);

Não sei se dá pra simplificar, mais pelo menos fununcia.

Abraços.[/quote]

ResultSet result = stm.getGeneratedKeys();

Como esse método funciona? ele pega a chave primária da tabela que está relacionada?
ele pega sempre a próxima chave primaria?

Mnha dúvida:

Tabela usuario

idUsuario pk;
nome;
telefone;
idLogin fk;

Tabela login

idLogin pk;
email;
senha;

Para eu inserir dados primeiro tenho que inserir dados na tabela login:

INSERT INTO login (’’,email,senha) values(?,?,?)

Agora para inserir dados na tabela Usuario :

stm.execute("insert into teste(a, b, c) values('a', 'b', 'c')");
ResultSet result = stm.getGeneratedKeys(); 
result.next();
int chave = result.getInt(1);

INSERT INTO usuario(’’,nome,telefone,CHAVE )

É isso mesmo? alguém pode me ajudar?

A minha principal dúvida é : Tenho que inserir dados na tabela login primeiro pois tenho uma chave estrangeira em usuario não tem como eu fugir disso depois de gerada a chave pimaria como auto_incremento, quero pegar essa chave primária gerada
na tabela login e ligar ela na tabela usuario.

Ou seja aquele usuario cadastrado é referente aquela senha e email…