Newsgroup: it.comp.java
Titolo: Fondere più ResultSet

Sto  scrivedo una  servlet che  accede ad  un database  Postgres, esegue
delle query e per ognuna ottiene  un ResultSet. Terminate tutte le query
vorrei poter fondere tutti i ResultSet in uno solo, in modo da non dover
passare un vettore di ResultSet e  da non avere dupilcati. E' possibile?
Esiste qualcosa del tipo
resultset = union(resultset1, resultset 2); ?
-- 
Non c'è più forza nella normalità: c'è solo monotonia.

Non puoi eseguire una sola query unendo le SELECT con l'operatore UNION ?
Ciao, Cris

-- 
Cristian Veronesi - CRPA SpA - Reggio Emilia, Italy
Man survived hither to / because he was too ignorant /
to know how to realize his wishes (William Carlos Williams)

 resultset = union(resultset1, resultset 2); ?
Puoi fare una
SELECT * FROM TABLE1
UNION
SELECT * FROM TABLE2
se le colonne hanno la stessa struttura; potresti anche fare qualcosa del
tipo
SELECT Nome, Cognome, "TABLE1" AS Provenienza FROM TABLE1
UNION
SELECT Name as Nome, FName as Cognome, "TABLE2" AS Provenienza FROM TABLE2
Rimuovere le righe duplicate in questo caso è un po' complicato; non sono un
ottimo conoscitore di SQL ma probabilmente o crei una tabella temporanea
nella quale infili i risultati delle singole query e poi fai una SELECT
DISTINCT, oppure te li filtri a mano dopo averli scaricati.
Spero di essere stato di aiuto.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------

 DISTINCT, oppure te li filtri a mano dopo averli scaricati.


 comportano gli altri DB a riguardo.
per eliminare  i duplicati dovrebbe  bastare la SELECT DISTINCT  Il mio
problema è che devo fare una serie  di query diverse e poi vorrei avere
un unico  resultset, molto più  comodo da gestire rispetto  a qualsiasi
enumerazione.                                                          


 
Scusa, ma ribadisco anch'io quanto ti hanno suggerito gli altri
colleghi del gruppo: se devi "vedere" il risultato di piu' query 
come un unico ResultSet, cio' significa che i dati hanno una certa
omogeneita' di struttura, quindi la soluzione e' usare la UNION di SQL.
Se invece i dati non hanno omogeneita' di struttura, allora ti devi
rassegnare a usare piu' ResultSet, oppure a crearti una tua struttura
dati + relativo enumeratore.
Buon lavoro
Ciao
Roberto
-- 
+---------------------------+
| Roberto Bagnoli           |
| 
robe...@comune.modena.it
 |
+---------------------------+


ResultSet e' un'interfaccia, che modella la nozione di "lista di risultati" (o 
cursore SQL, se vogliamo). Basta reimplementarla in termini di chiamate 
successive a ResultSet "veri" precedentemente memorizzati, con tutti i caveat 
del caso sul mantenere aperti piu' ResultSet sulla stessa connessione in 
parallelo. L'unica "difficolta'" e' nell'implementazione di next().
Ad esempio:
public class MergedResultSet implements ResultSet {
 private Vector sets = new Vector();
 ResultSet currentSet;
 int currentSetNumber=0;
 public MergedResultSet(ResultSet initial) {
  this.currentSet=initial;
  set.addElement(initial);
 }
 public void addResultSet(ResultSet rs) { sets.addElement(rs); }
 public boolean next() throws SQLException {
  if (currentSet==null) return false; // Oppure una SQLException che ti crei tu
  if (! currentSet.next()) {
    currentSetNumber++;
    if (currentSetNumber == sets.size()) return false;
    currentSet=sets.elementAt(currentSetNumber);
  }
  return true;
 } 
 ..tutti gli altri metodi sono dei bridge al metodo equivalente invocato su 
   currentSet, ad esempio:
 public int getInt(int n) throws SQLException { return currentSet.getInt(n); }
 ..ecc..
 
}
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/