Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec 2 ResultSet imbriqués

7 réponses
Avatar
isabelle.thauvin
Bonjour,

Je suis débutante en programmation Java et j'ai un problèmme avec une
classe dans laquelle je veux réaliser 2 Select imbriqués. Dans un
premier temps, je réalise mon premier Select via un ResultSet. Puis
c'est là que commence mes problèmes : au fur et à mesure que je traite
mon premier ResultSet (boucle while), je réalise un second Select via
un second ResultSet. Je n'ai pas d'erreur de compilation mais j'ai
l'erreur suivante lors de l'exécution de ma classe Java :
"java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending."
La base que j'utilise est constituée de fichiers VSAM et j'utilise
ViaSql. Que puis-je faire pour que cela fonctionne ?
Je sais qu'une solution serait de faire un seul Select (et donc un
seul ResultSet) en utilisant des jointures (solution réalisée et
testée : pas de souci!). Mais je souhaite vraiment pouvoir faire 2
Select imbriqués afin de pouvoir en faire plus (avec les problèmes de
performances que cela risque d'entraîner).
D'avance merci pour toutes vos réponses ou remarques pertinentes.
Isabelle T.

7 réponses

Avatar
Olivier Pierrier
Bonjour,

isabelle T. wrote:

Bonjour,

l'erreur suivante lors de l'exécution de ma classe Java :
"java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending."
Le probleme est que tu utilises une seule connexion pour deux requêtes

simultanées.
Solution, créer une deuxième connexion pour excécuter les requêtes à
l'intérieur de ta boucle while.
( google key word : java + connectionpool )


La base que j'utilise est constituée de fichiers VSAM et j'utilise
ViaSql. Que puis-je faire pour que cela fonctionne ?
Je sais qu'une solution serait de faire un seul Select (et donc un
seul ResultSet) en utilisant des jointures (solution réalisée et
testée : pas de souci!). Mais je souhaite vraiment pouvoir faire 2
Select imbriqués afin de pouvoir en faire plus (avec les problèmes de
performances que cela risque d'entraîner).


Pour ce qui est des performances, c est à toi de voir.

D'avance merci pour toutes vos réponses ou remarques pertinentes.
De rien


Olivier

Avatar
y.a.n
une 2 connection n 'est pas necessaire
c est un statement qui il faut creer

Statement st1 = conn.createStatement();
Statement st2= conn.createStatement();

ResultSet rs1 = st1.executeQuery(".....");
ResultSet rs2= st2.executeQuery(".....");

sinon si tu fait
rs2 = st1.executeQuery(".......");
tu n a plus acces aux donnees du 1er ResulSet

yan

"Olivier Pierrier" a écrit dans le message news:
bkuek4$61eul$
Bonjour,

isabelle T. wrote:

Bonjour,

l'erreur suivante lors de l'exécution de ma classe Java :
"java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending."
Le probleme est que tu utilises une seule connexion pour deux requêtes

simultanées.

Olivier




Avatar
isabelle.thauvin
Olivier Pierrier wrote in message news:<bkuek4$61eul$...
Bonjour,

isabelle T. wrote:

Bonjour,

l'erreur suivante lors de l'exécution de ma classe Java :
"java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending."
Le probleme est que tu utilises une seule connexion pour deux requêtes

simultanées.
Solution, créer une deuxième connexion pour excécuter les requêtes à
l'intérieur de ta boucle while.
( google key word : java + connectionpool )


La base que j'utilise est constituée de fichiers VSAM et j'utilise
ViaSql. Que puis-je faire pour que cela fonctionne ?
Je sais qu'une solution serait de faire un seul Select (et donc un
seul ResultSet) en utilisant des jointures (solution réalisée et
testée : pas de souci!). Mais je souhaite vraiment pouvoir faire 2
Select imbriqués afin de pouvoir en faire plus (avec les problèmes de
performances que cela risque d'entraîner).


Pour ce qui est des performances, c est à toi de voir.

D'avance merci pour toutes vos réponses ou remarques pertinentes.
De rien


Olivier


Bonjour,

J'utilise déjà 2 connections. Le problème est donc ailleurs. Mais où ???
Si tu as d'autres idées ...
A+
Isabelle T.


Avatar
isabelle.thauvin
"y.a.n" wrote in message news:<3f740916$0$27574$...
une 2 connection n 'est pas necessaire
c est un statement qui il faut creer

Statement st1 = conn.createStatement();
Statement st2= conn.createStatement();

ResultSet rs1 = st1.executeQuery(".....");
ResultSet rs2= st2.executeQuery(".....");

sinon si tu fait
rs2 = st1.executeQuery(".......");
tu n a plus acces aux donnees du 1er ResulSet

yan

"Olivier Pierrier" a écrit dans le message news:
bkuek4$61eul$
Bonjour,

isabelle T. wrote:

Bonjour,

l'erreur suivante lors de l'exécution de ma classe Java :
"java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending."
Le probleme est que tu utilises une seule connexion pour deux requêtes

simultanées.

Olivier




Bonjour,

J'ai essayé ta solution : 1 seule connection, 2 Statement et donc 2
ResultSet --> cela ne marche pas !!!
Si j'essaie : 2 connections et donc 2 Statement et donc 2 ResultSet
--> cela ne marche pas non plus !!!
Trouver l'erreur .... et surtout quelle est la solution ?
A+
Isabelle T.



Avatar
Libert Sébastien
J'ai essayé ta solution : 1 seule connection, 2 Statement et donc 2
ResultSet --> cela ne marche pas !!!
Si j'essaie : 2 connections et donc 2 Statement et donc 2 ResultSet
--> cela ne marche pas non plus !!!
Trouver l'erreur .... et surtout quelle est la solution ?



La solution donnée par Yan est la bonne.
Pourrais-tu réessayer sa solution (1 connection, 2 statements, 2 resultset)
et poster ton code ici.
On y verra un peu plus clair.



@+
Sébastien Libert.

Avatar
isabelle.thauvin
"Libert Sébastien" <slibert#_no_spam_#@skynet.be> wrote in message news:<3f802dac$0$24186$...
J'ai essayé ta solution : 1 seule connection, 2 Statement et donc 2
ResultSet --> cela ne marche pas !!!
Si j'essaie : 2 connections et donc 2 Statement et donc 2 ResultSet
--> cela ne marche pas non plus !!!
Trouver l'erreur .... et surtout quelle est la solution ?



La solution donnée par Yan est la bonne.
Pourrais-tu réessayer sa solution (1 connection, 2 statements, 2 resultset)
et poster ton code ici.
On y verra un peu plus clair.



@+
Sébastien Libert.


Bonjour,

Comme demandé, tu trouveras ci-après le code que j'utilise pour 1
connection, 2 Statement et 2 Resultset (erreur "java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending.") :
D'avance merci pour ton aide.

package blabla1;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Blabla2 extends HttpServlet {
Connection con;

public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
PrintWriter out;

try {
Class.forName("ViaSqlDriver");
con = DriverManager.getConnection("jdbc:viasql:blabla3");
} catch (Exception e) {
e.printStackTrace();
}


try {
out = response.getWriter();
Statement stmt = con.createStatement();
Statement stmt1 = con.createStatement();
out.println("<html>");
out.println("<head><title>Test</title></head>");
out.println("<body>");
out.println("<table width="297" border="1" align="center">");
ResultSet rs = stmt.executeQuery(
"select gamme, lot, datjp, csoc, cets1 from vse.planexp where
typla='C' and csoc='1' and atel='225' order by 1, 3, 2");
out.println("<tr><td>numéro de gamme</td>");
out.println("<td>libellé de la gamme</td>");
out.println("<td>numéro de lot</td>");
while (rs.next()) {
String gamme = rs.getString(1);
String lot = rs.getString(2);
String datefab = rs.getString(3);
String societe = rs.getString(4);
String etablissement = rs.getString(5);
out.println("<tr><td>" + gamme + "</td>");
String libgamme = "Gamme inconnue";
ResultSet rs1 stmt1.executeQuery(
"select lbgam from vse.gamme_ml where csoc='"
+ societe
+ "' and codeta='"
+ etablissement
+ "' and gamme='"
+ gamme
+ "' and lot=' 0' and nocc='01'");
if (rs1.next())
libgamme = rs1.getString(1);
if (rs1 != null)
rs1.close();
out.println("<td>" + libgamme + "</td>");
out.println("<td>" + lot + "</td>");
out.println("<td>" + datefab + "</td></tr>");
}
out.println("</table></body></html>");
rs.close();
stmt.close();
stmt1.close();
} catch (SQLException sqle) {
sqle.printStackTrace();
}

try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}


}

}


Avatar
Libert Sébastien
Pourrais-tu réessayer sa solution (1 connection, 2 statements, 2
resultset)


et poster ton code ici.




Comme demandé, tu trouveras ci-après le code que j'utilise pour 1
connection, 2 Statement et 2 Resultset (erreur > "java.sql.SQLException: A new query cannot be executed on the
connection because there are results pending.") :



Malheureusement, le code semble correct. Est-tu certaine que ce n'est pas
une limitation du driver jdbc ? Ou une limitation dûe au type de db ?
Il pourrait être intéressant de poser la question aux développeurs de
ViaSql.



Tiens-nous au courant
Sébastien Libert.