Imbrication de resultset [Résolu]

Signaler
Messages postés
6
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
12 janvier 2011
-
oxy87
Messages postés
1
Date d'inscription
dimanche 21 juin 2009
Statut
Membre
Dernière intervention
30 septembre 2011
-
Bonjour à tous !

C'est bien rare que je sèche autant sur un problème ... C'est pourquoi je sollicite vos conseils avisés :)

Je mets directement le code pour ensuite mieux vous expliquer ce qui me bloque :

l_requete = "SELECT * FROM MA_TABLE table1, AUTRE_TABLE table2"
+ " WHERE table2.CHAMP1 = table1.CHAMP1"
+ " AND table2.CHAMP2 = table1.CHAMP2"
+ " AND table1.CHAMP2 IS NOT NULL";

try 
{
ResultSet resultat = stmt.executeQuery(l_requete);

while (resultat.next()) 
{
String recup = resultat.getString("CHAMP1");
//(etc.)

l_requete2 = "SELECT CHAMP1, CHAMP2"
+ " FROM ENCOREUNEAUTRETABLE"
+ " WHERE CHAMP1 = '" + recup+ "'";
ResultSet temp = stmt.executeQuery(l_requete2);

while (temp.next())
{
String blabla = temp.getString("CHAMP2");
l_requete = "SELECT ... FROM ... ";
ResultSet contenu = stmt.executeQuery(l_requete);

while (contenu.next())
sb.append(contenu.getString("value_block"));
}

// Traiter le contenu de sb
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 


Le ResultSet resultat obtenu avec ma toute première requête n'est pas vide.
J'exécute bien la totalité de ma boucle une première fois... mais pas plus !

J'ai récupéré et testé le contenu de l_requete en base, j'ai bien plusieurs résultats. Est il possible que le contenu de mon ResultSet initial soit "perdu" au cours de mes traitements dans la boucle ?

Je croise les doigts très forts pour que quelqu'un ait une piste à me soumettre (ou une erreur plus grosse que moi à me montrer ) !

Merci à tous d'avance !

3 réponses

Messages postés
699
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
13 mai 2011
16
D'après la javadoc, il est dit :

By default, only one ResultSet object per Statement object can be open at the same time. Therefore, if the reading of one ResultSet object is interleaved with the reading of another, each must have been generated by different Statement objects. All execution methods in the Statement interface implicitly close a statment's current ResultSet object if an open one exists.


Donc a priori, il faut créer un object Statement différent pour que le premier ResultSet soit toujours existant.

Fanny
Messages postés
6
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
12 janvier 2011

HFanny ... Mille mercis !!!
Au lieu de parcourir la doc, j'aurais du la lire avec attention.
Si tu étais à côté, je t'embrasserais tiens
Messages postés
1
Date d'inscription
dimanche 21 juin 2009
Statut
Membre
Dernière intervention
30 septembre 2011

merci boccou fanny! je tm