PDA

View Full Version : [JAVA] Database (result set)


Edde
18-09-2006, 21:46
Ciao :)

Ho questo pezzo di codice:
------------------------------------------------

public static Vector findDB(String lemma, Connection conn)
{

try{

if(conn!=null)
{
Statement st = conn.createStatement();
String query= ("select * from Ontologie where lemma='"+lemma+"'");

ResultSet rs = st.executeQuery(query);
ResultSet rsIpo;
ResultSet rsIper;

String significato, sinonimi;
Vector ipernomi = new Vector();
Vector iponomi = new Vector();
Vector vect = new Vector();


//Le righe hanno 3 campi
while(rs.next())
{
significato = rs.getString(2);
sinonimi = rs.getString(3);

rsIpo = st.executeQuery("select * from Iponomi where significato='"+significato+"'");
while(rsIpo.next())
iponomi.addElement(rsIpo.getString(3));

rsIper = st.executeQuery("select * from Ipernomi where significato='"+significato+"'");
while(rsIper.next())
ipernomi.addElement(rsIper.getString(3));


vect.addElement(new Word(lemma, significato, sinonimi, ipernomi, iponomi));
}

st.close();


return vect;

}
else return null;



}catch(Exception e) {e.printStackTrace(); return null;}

}//Fine findDB

------------------------------------------

Prima iponomi e ipernomi erano una semplice stringa, e non avevo quindi bisogno dei due pezzi:

rsIpo = st.executeQuery("select * from Iponomi where significato='"+significato+"'");
while(rsIpo.next())
iponomi.addElement(rsIpo.getString(3));

e

rsIper = st.executeQuery("select * from Ipernomi where significato='"+significato+"'");
while(rsIper.next())
ipernomi.addElement(rsIper.getString(3));

E funzionava tutto a meraviglia.
Ora mi sono però reso conto che con quelle due chiamate è come se "azzerassero" il ResultSet iniziale (rs).

Ad esempio, per Lemma="dog" rs dovrebbe avere 7 righe.
E se elimino quei due passaggi è ciò che succede(nel vettore "vect" che mi viene restituito, ho in effetti 7 oggetti). Lasciandoli invece, mi restituisce un "vect" con un oggetto solo... E' come se leggesse la prima riga di rs, e poi, dopo le successive chiamate sullo statement st, azzerasse il result set, uscendo quindi immediatamente alla successiva iterazione del ciclo più esterno.
Come posso procedere?

Spero di essere stato comprensibile :doh:

Edde
18-09-2006, 22:30
Ho risolto... avevo provato a creare più statement, ma mi dava un'eccezione e quindi pensavo fosse sbagliato. Invece il problema era un altro...