Toon posts:

[java]nested executeQuery

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleem en ik weet echt geen raad meer.
Onderstaande code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   try {
      query = "select * from gekozenwaarden where testID=" + testID;
      System.out.println(query);
      result = statement.executeQuery(query);

      while (result.next()) {
        waardeID = result.getInt("waardeID");
        System.out.println(waardeID);

        String query = "select * from waarden where id=" + waardeID;
        System.out.println(query);   
      }
    } catch (SQLException sqlex) {
        sqlex.printStackTrace();
    }

dit werkt dus wel.. ;)
(hij zet dus een aantal keer de verschillende query's onder elkaar)

maar zodra ik
code:
1
result2 = statement.executeQuery(query);

onder
code:
1
System.out.println(query);

erbij zet doet ie niet meer het goede.
(hij zet alleen de eerste query neer(system.out.println) en doet de rest niet, en ik krijg geen SQLException)

dus eerst print ie netjes alle query's onder elkaar.
maar zodra ik die query's ga uitvoeren stopt ie bij de eerste.

kan iemand me hierbij helpen?.. :?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Allereerst is je vraag wat verwarrend... Dit komt omdat je naamgeving ook verwarrend is.
code:
1
2
3
query = "select * from gekozenwaarden ....
System.out.println(query);
result = statement.executeQuery(query);

en in je while loop:
code:
1
2
String query = "select * from waarden where id=...
System.out.println(query);

Je wilt deze query dus ook uitvoeren... Je noemt die echter ook 'query' dus ik moest zoeken voordat ik zag wat nu eigenlijk je probleem is...
dus eerst print ie netjes alle query's onder elkaar.
maar zodra ik die query's ga uitvoeren stopt ie bij de eerste.
Hum, je hebt nu wel meerdere ResultSets tegelijk open... Wellicht dat de driver daar moeilijkheden mee heeft? Ik zou eens eerst de eerste result-set afwerken en daarna de tweede.

Verbeter sowieso even je naamgeving, want dit is vrij onduidelijk :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
je hebt helemaal gelijk over die naamgeving.
't was ook goed, maar door al het ge*** en geprobeer heb ik in de loop v/d tijd wat dingen veranderd.

en je had gelijk, thanks!
de mysql driver kan geen 2 resultsets tegelijk aan... :(
(getest door het te verdelen over 2 loops)

Verwijderd

JDBC20Intro
A Statement only keeps one ResultSet open at a time and often reuses the same ResultSet for new data. You should be sure to get all the data required from the ResultSet before executing another query via its associated Statement. A Statement should automatically close() the ResultSet on re-execution and on Statement.close(), but you may want to close the ResultSet yourself as soon as its data is no longer needed. Cautious programmers may always close the ResultSet explicitly.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Zoals je hierboven leest kun je 1 resultset per statement tegelijk geopend hebben, dit zegt echter niks over meerdere statements per connectie geopend hebben.

Verwijderd

Topicstarter
aha!
da's een goeie.
ik zal dat idd ook nog even uitproberen.. :)

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 10-07 04:13

PommeFritz

...geen friet

De JDBC-ODBC bridge driver die standaard in de JDK zit
heeft grote moeite met meer dan 1 resultset open op
dezelfde connectie (lees: werkt niet, geeft SQLException
'resultset is still in use' of iets in die geest)

Ik weet niet of het aan de JDBC driver ligt, of aan het
onderliggende ODBC (draai op Windows).

De MM-Mysql jdbc driver, de M$ SqlServer JDBC driver, en
de i-net driver werken wel allemaal goed met geneste
resultsets.

FireFox - neem het web in eigen hand


  • Goldme
  • Registratie: September 2000
  • Laatst online: 29-08 13:40
Vergeet de query vooral niet te close()-en. Ik closede het niet waardoor de database steeds langzamer ging draaien, na closen werkt het vloeiend.

Anders kun je nog een query object maken(Statement query 2= connectie.createStatement() ) en daarvan de resultset halen. Hoef je je geen zorgen te maken dat er problemen optreden tussen de statements of resultsets.
Pagina: 1