Was passiert, wenn man ein ResultSet nicht schließt?

ResultSet resultSet;
try {
  resultSet = stmt.executeQuery(QUERY_1);
  if(resultSet.next()){
    ...
    resultSet = stmt.executeQuery(QUERY_2);
    while(resultSet.next()){...}
  }
} catch(Exception e) {
...
} finally {
  resultSet.close();
}```

In Zeile 7 wird das alte ResultSet ja nur derefferenziert und kann somit im finally nicht mehr geschlossen werden?

Folglich bleibt das ResultSet, dass die erste Query zurückliefert weiterhin offen und verbraucht Ressourcen, bis die Connection letztendlich geschlossen wird.

Oder sehe ich das falsch?

Siehst du richtig.

allerdings kann man auf ein Statement gar nicht zwei ResultSets offen halten,

hättest du zwei Variablen und willst mit beiden gleichzeitig arbeiten,
dann gibt es den allgemein bekannten Fehler, dass das erste ResultSet schon geschlossen ist,
oder ähnliches

dieser Fehler könnte sich hier also als ‚positiv‘ erweisen :wink:
abgesehen davon aber richtig erkannt und generell aufzupassen, naürlich nicht so eine Eventualität einzubeziehen


wann das Statement erstellt wird ist hier nicht ersichtlich,
Statement.close() gehört normalerweise auch in das finally, das würde evtl. offene ResultSets evtl. auch beenden (ich möchte nichts definitives sagen),

mit 2x Statement in dem try dürftest du aber an offene Ressourcen bis Ende der Connection gekommen sein