Newsgroup: it.comp.java
Titolo: ResultSet e chiusura di una connessione

Buongiorno a tutti!
Volendo fare una query su un db, apro la connessione, eseguo la query,
ottengo un ResultSet. Se faccio la close() il ResultSet viene
chiuso e non posso più leggere dati da esso.
Ho però bisogno di ritornare il ResultSet come risultato della
funzione per cui devo sì chiudere la connessione ma 
avere sempre a disposizione un ResulSet sul quale leggere.
Avevo pensato ad un clone() ma mi ha risposto "picche".
Avete per favore qualche idea?
Mille grazie ragazzi.
Riccardo

 Riccardo
Che io sappia la chiusura della connessione chiude automaticamente anche
il resultSet.
Non ne sono troppo sicura però.
Ale
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Ale
Grazie della risposta Ale.
Il ResultSet viene senz'altro chiuso ok, vorrei però trovare il modo
di accedere ai dati estratti anche a connessione chiusa.
Posso crearmi un ResulSet copia di quello ottenuto, che magari
non mi viene chiuso dalla close()?
Riccardo

 non mi viene chiuso dalla close()?
No.
Ma puoi creare degli oggetti con gli stessi campi e metterli in un vettore

Alessandro Campi wrote:

Oppure utilizzare un CachedRowSet

 Avete per favore qualche idea?
Un pattern che io uso č (se ne conoscete di meglio, vi prego si
segnalarmeli):
1. creare una classe (bean) che elenchi attributi privati che
    corrispondono ai campi della tabella.
2. la classe espone gli accessor metod "get"
3. la classe dispone di un costruttore privato o protetto
    che valorizzi tutti gli attributi
4. la classe espone uno o piů factory method per generare
    una propria istanza o una LinkedList di istanze corrispondenti
    alle righe prelevate dalla query.
ESEMPIO:
public class TDipendente{
  private String strNome;
  private String strCognome;
  private long pkDipendente;  //chiave primaria
  private long fkAzienda;        //chiave esterna
  private TDipendente(long pkDipendente, String strNome,
                                  String strCognome, long fkAzienda){
    this.strNome = ...
    ...
  }
  //Accessor method:
  public String getNome(){
    return strNome;
  }
  ...
  //Factory Method:
  //Data la chiave primaria, dovrebbe restituire una sola istanza i cui
attributi privati
  //copiano i campi della riga.
  static public TDipendente getDipendente(long pkDipendente,
                                                                Connection
con){
      ...
      if (rs.next())
        instance = new TDipendente(rs.getLong("PK_DIPENDENTE"), rs.get
....);
      rs.close()
      stm.close();
      //Non chiudere la connessione qui. La chide chi l'ha creata.
  }
  // Data la chiave esterna, restituisce una linkedList di istanze che
copiano
  // le righe restituite dalla query.
  static public LinkedList getTDipendenti(long fkAzienda,
                                                              Connection
con) {
     ...
     LinkedList listaDipendenti = new LinkedList();
     while(rs.next()){
        listaDipendenti.add(new TDipendente(rs.getLong("PK_DIPENDENTE"),
rs.getString("..."),... ));
     }
  }
}

 ha scritto nel messaggio news:Y_MSb.16983$VS6....@tornado.fastwebnet.it...
Scusate, ma dopo tutto questo lavoraccio che ho fatto,
Outlook mi spezza anche le righe di codice!
ripeto:
ESEMPIO:
public class TDipendente{
  private String strNome;
  private String strCognome;
  private long pkDipendente;  //chiave primaria
  private long fkAzienda;     //chiave esterna
  private TDipendente(long pkDipendente, String strNome,
                                  String strCognome, long fkAzienda){
    this.strNome = ...
    ...
  }
  //Accessor method:
  public String getNome(){
    return strNome;
  }
  ...
  //Factory Method:
  //Data la chiave primaria, dovrebbe restituire una sola istanza i cui attributi privati
  //copiano i campi della riga.
  static public TDipendente getDipendente(long pkDipendente, Connection con){
      ...
      if (rs.next())
        instance = new TDipendente(rs.getLong("PK_DIPENDENTE"), rs.get....);
      rs.close()
      stm.close();
      //Non chiudere la connessione qui. La chiude chi l'ha creata.


Come gia' consigliava Nicola, la cosa + semplice e' un CachedRowSet
http://www.jugtorino.it/newwiki/jsp/Wiki?CachedRowSet
Ciao,
    Bruno.
-- 
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
| Membro del JUG Torino - 
http://www.jugtorino.it