Hvis en erklæring kan returnere ingen eller flere resultater, bør du ikke bruge executeQuery
, men execute()
i stedet returnerer denne metode en boolean
angiver typen af det første resultat:
true
:resultatet er etResultSet
false
:Resultatet er et antal opdateringer
Hvis resultatet er true
, så bruger du getResultSet()
for at hente ResultSet
, ellers getUpdateCount()
for at hente opdateringsantallet. Hvis opdateringsantallet er -1
det betyder, at der ikke er flere resultater. Bemærk, at antallet af opdateringer også vil være -1
når det aktuelle resultat er et ResultSet
. Det er også godt at vide, at getResultSet()
skal returnere null, hvis der ikke er flere resultater, eller hvis resultatet er et opdateringsantal.
Hvis du nu vil hente flere resultater, ringer du til getMoreResults()
(eller dens bror accepterer en int
parameter). Returværdien af boolean
har samme betydning som execute()
, så false
betyder ikke, at der ikke er flere resultater!
Der er kun ikke flere resultater, hvis getMoreResults()
returnerer false og getUpdateCount()
returnerer -1
(som også dokumenteret i Javadoc)
Dette betyder i bund og grund, at hvis du vil behandle alle resultater korrekt, skal du gøre noget som nedenfor:
boolean result = stmt.execute(...);
while(true)
if (result) {
ResultSet rs = stmt.getResultSet();
// Do something with resultset ...
} else {
int updateCount = stmt.getUpdateCount();
if (updateCount == -1) {
// no more results
break;
}
// Do something with update count ...
}
result = stmt.getMoreResults();
}
BEMÆRK:En del af dette svar er baseret på mit svar på Java SQL:Statement.hasResultSet()?