Fechando a conexão com o database

Boa tarde galera, gostaria de alguma sugestão ou dica pra resolver esse probleminha.
Crio uma conexão com o database, faço uma consulta e retorno o ResultSet.
Bom o problema é na hora de fechar a conexão pois se eu fechar perco o ResultSet.
No java tem alguma estrutura, tipo um ResultSet que permança em memória após o fechamento da conexão para que eu possa fechar a depois retornar o ResultSet?
Devo usar uma Collection pra isso?

Agradeço qualquer esclarecimento ou sugestão!!

Abraço!

public ResultSet consulta(long codigo) {
        PreparedStatement stmt = null;        
        Connection conn = null;
        try {
            conn = new Conexao().getConnection();
            stmt = conn.prepareStatement("select cd_produto, nm_produto, vl_venda from produto where cd_produto = ?");
            stmt.setLong(1, codigo);
            ResultSet rs = stmt.executeQuery();
            conn.close(); // Close aqui mata o ResultSet
            return rs;
        } catch (Exception ex) {            
            return null;
        }        
    }
}

Em Java não é recomendado retornar um ResultSet a partir de um método, até porque ele está “amarrado” à conexão. É diferente de outras linguagens como o VB, onde você tem algo como um RecordSet “desconectado”.

Se quiser mesmo um ResultSet “desconectado”, você pode tentar isto aqui:

http://www.onjava.com/pub/a/onjava/2004/06/23/cachedrowset.html

http://java.sun.com/javase/6/docs/api/javax/sql/rowset/CachedRowSet.html

Opa era exatamente disso que eu precisava :slight_smile:

Obrigado!!!

Abraço!