Em algumas situações é interessante termos acesso ao ID (autonumerado) gerado pelo banco de dados para um objeto recém persistido.
Por exemplo, se estivermos salvando um agregado, composto por alguns objetos, é importante termos acesso ao ID do objeto raíz, para criarmos os relacionamentos nas tabelas de um banco de dados.
![]() |
| Figura 1. Exemplo de Agregado com raíz em 'Pedido' |
Sendo assim, vou mostrar como podemos fazer isso utilizando o JDBC. Neste exemplo, utilizei o banco de dados SQL Server 2005 para testes.
/**
* Método que insere objeto no banco e retorna o ID gerado
*/
public int inserir(MeuObjeto obj) throws Exception{
int idObjeto = 0;
// Algum código para abrir conexão com o banco
PreparedStatement statement = conn.prepareStatement("INSERT INTO " +
"minha_tabela " +
"(meu_objeto_campo1, " +
"meu_objeto_campo2, " +
"meu_objeto_campo3) " +
"VALUES (?, ?, ?)",
PreparedStatement.RETURN_GENERATED_KEYS);
statement.setString(1, obj.getAtributo1());
statement.setString(2, obj.getAtributo2());
statement.setString(3, obj.getAtributo3());
statement.executeUpdate();
// recupera chave do objeto
ResultSet rs = statement.getGeneratedKeys();
while(rs.next()){
idObjeto = rs.getInt(1);
}
conn.close();
// retorna o id do objeto recém inserido
return idObjeto;
}
O código acima parece muito com que estamos acostumados a fazer, a diferença está na construção do nosso PreparedStatement. Além da SQL que será executada, passamos também o parâmetro PreparedStatement.RETURN_GENERATED_KEYS. É este parâmetro que faz a "mágica" acontecer.
Ao executarmos o statement, o INSERT é realizado e o id gerado pelo banco é retornado em um ResultSet. Desta forma, temos acesso ao id do objeto, recém cadastrado, em nossa aplicação.

0 comentários:
Postar um comentário