ResultSet schließen?

Status
Nicht offen für weitere Antworten.
T

theomega

Gast
Hallo Leute,
ich habe eine ziemlich große Java-Webanwendung geschrieben, allerdings ohne ein ORM-Framwork, ich mach die Queries selbst.

Meine Vorgehensweise ist folgende:
Für jedes Request hole ich eine Verbindung aus dem Tomcat-Connectionpool und benutze diese für das Request. Am Ende des Requests schließe ich die Verbindung wieder (damit kommt sie dann zurück in den Pool).

Die Frage ist jetzt:
Muss man die ResultsSets die ich unterwegs erstelle noch schließen (mit .close()) oder reicht es einfach ganz zum schluss den Garbagecollector kommen zu lassen und nur die Verbindung zu schließen?

Falls ich jedes RS schließen muss, gibt es dann eine Anwendung die mir hilft alle RS's rauszufinden die ich nicht explizit schließe?

Danke
TO
 
M

maki

Gast
Du solltest auf jeden Fall die Die Statements und die Resultsets schliessen, insbesondere wenn du einen Pool verwendest.
Verschiedene Pool Implementierungen werden das unterschiedlich handhaben, ob die Implementierung die du verwendest die Statements und Resultsets selbst schliesst, steht in der Doku.

Reihenfolge:
1. Connection öffnen (macht bei dir der Pool)
2. Statement erzeugen
3. Resultset erzeugen
...
4. Resultset schliessen
5. Statement schliessen
6 Connection schliessen (gibt bei dir die Connection an den Pool zurück)
 

tfa

Top Contributor
Schließt Du wenigstens die Statements? Ein Statement, das geschlossen wird, stellt sicher, dass ein eventuell vorhandenes ResultSet ebenfalls geschlossen wird.
 
G

Guest

Gast
Hier eine Vorlage (den Code im finally-Block kannst du in eine Hilfsklasse auslagern)
Code:
Connection connection = null;
PreparedStatement statement = null;
try
{
   connection = ...
   statement = connection.prepareStatement(sqlStatement);
   ...
   ResultSet resultSet = ...
   ...
   resultSet.close();
}
catch(SQLException e)
{
   ... Logging, Fehlerbehandlung
}
finally
{
   if(statement != null)
   {
      try
      {
         statement.close();
      }
      catch(SQLException e)
      {
         // Fehler loggen
      }
   }
   if(connection != null)
   {
      try
      {
         connection.close();
      }
      catch(SQLException e)
      {
         // Fehler loggen
      }
   }
}
 
T

theomega

Gast
Hy,
danke an alle, nur hatte ich mich nicht ganz klar ausgedrückt:
Das ich das Statement und das Resultset schließen SOLLTE ist mir klar, nur wie steht es mit dem MÜSSEN?

Zu Deutsch: Wenn ich folgenden Code habe (nur Schema)

Code:
Connection con = (aus dem Pool hoolen)
try {
handle_request(con);
finally {
con.close();
}

public void handleRequest(Connection con) {
ResultSet rs = con....

... irgendwas mit dem rs tun ...
}

Dann ist ja nach jedem Request das ResultSet nichtmehr existent und der Garbagecollector kann es aufräumen.
Kann ich mir es sparen die ResultSets zu schließen weil in absehbarer Zeit eh der Garbagecollector vorbeikommt und beim Destroy auch die ResultSets geschlossen werden?

Versteht jemand was ich meine?

DAnke
TO
 
G

Guest

Gast
ResultSets brauchst du nicht zu schliessen, wenn du das dazugehörige Statement schliesst.

Kommentar in ResultSet
A ResultSet object is automatically closed when the Statement object that generated it is closed,
re-executed, or used to retrieve the next result from a sequence of multiple results.
Kommentar in Statement#close()
Releases this Statement object's database and JDBC resources immediately instead of waiting for
this to happen when it is automatically closed. It is generally good practice to release resources
as soon as you are finished with them to avoid tying up database resources
 
G

Guest

Gast
Übrigens, insbesondere der letzte Satz sagt alles
It is generally good practice to release resources as soon as you are finished with them to avoid tying up database resources
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Resultset schließen ?? Datenbankprogrammierung 5
ARadauer JDBC ResultSet schließen? Datenbankprogrammierung 4
S ResultSet als Parameter an andere Klasse übergeben Datenbankprogrammierung 3
Z ResultSet ist null warum? Datenbankprogrammierung 12
R HSQLDB ResultSet update aktualisiert DB, aber nicht das ResultSet Datenbankprogrammierung 2
Dimax Erstellen ResultSet und Statement Datenbankprogrammierung 30
C PostgreSQL ResultSet.TYPE_SCROLL_SENSITIVE setzen Datenbankprogrammierung 2
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L Zugriff auf ein Resultset Datenbankprogrammierung 7
L MySQL ResultSet vollständig auslesen Datenbankprogrammierung 20
T Oracle Resultset to Array sehr langsam. Datenbankprogrammierung 8
B Probleme mit java.sql.SQLException: ResultSet closed Datenbankprogrammierung 21
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
Z MySQL Probleme mit resultSet executQuery Datenbankprogrammierung 3
L ResultSet Datenbankprogrammierung 1
J wie mit resultset.next() über Datensätze iterieren? Datenbankprogrammierung 15
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
D MySQL ResultSet als Stream weiter geben Datenbankprogrammierung 9
M ResultSet Cachen Datenbankprogrammierung 3
R ResultSet mit "Untertabellen" Datenbankprogrammierung 4
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
R Resultset.last() Problem Datenbankprogrammierung 12
PaulG Leeres ResultSet initialisieren Datenbankprogrammierung 6
J Frage zu ResultSet Datenbankprogrammierung 3
J SQL ResultSet Previous Datenbankprogrammierung 10
S MySQL ResultSet in ein Array übertragen Datenbankprogrammierung 7
H PostgreSQL Objekte aus ResultSet Datenbankprogrammierung 5
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
O Oracle Resultset greift auf Spaltenüberschriften zu Datenbankprogrammierung 2
Kenan89 Wieso klappt das ResultSet nicht? Datenbankprogrammierung 3
C ResultSet enthält nicht alle Daten Datenbankprogrammierung 4
F Derby/JavaDB Resultset in JTablemodel Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
B SQLite ResultSet is TYPE_FORWARD_ONLY Datenbankprogrammierung 5
T Exception ResultSet Datenbankprogrammierung 7
0 ResultSet in JTable Datenbankprogrammierung 14
S [SQL] ResultSet Datenbankprogrammierung 4
R ResultSet Datenbankprogrammierung 4
I Sonderbehandlung wenn ResultSet leer ist Datenbankprogrammierung 9
I Problem mit ResultSet Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
R Detached ResultSet Datenbankprogrammierung 3
F generelle Vorgehensweise ResultSet Datenbankprogrammierung 5
S ResultSet Datenbankprogrammierung 2
A MySQL ResultSet.updateBytes schlägt fehl Datenbankprogrammierung 2
F ResultSet kann Datenbank nicht update, warum? Datenbankprogrammierung 3
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
A PostgreSQL anfängerfrage: resultset zeilenweise auslesen Datenbankprogrammierung 2
T MySQL ResultSet zurückgeben nachdem Connection geschlossen wurde? Datenbankprogrammierung 3
K Keine ResultSet bei if in StoredProcedure Datenbankprogrammierung 16
D ResultSet gibt nichts aus. Datenbankprogrammierung 3
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
M Oracle Problem mit Resultset Datenbankprogrammierung 11
J jdbc ResultSet types Datenbankprogrammierung 5
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
F ResultSet to String[] Datenbankprogrammierung 3
E ResultSet in HashMap Datenbankprogrammierung 8
K Tabelle mit resultset refreshen? Datenbankprogrammierung 4
M Problem mit ResultSet bei SQL Server 2005 Datenbankprogrammierung 6
S ResultSet in ArrayList ablegen Datenbankprogrammierung 17
G Daten aus ResultSet in String-Liste Datenbankprogrammierung 13
T ResultSet initialisieren Datenbankprogrammierung 2
C kein Resultset Datenbankprogrammierung 2
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
T ResultSet-Inhalt in Arrays schreiben Datenbankprogrammierung 3
S ResultSet variabel auslesen Datenbankprogrammierung 4
D Anzahl der Elemente im ResultSet ermitteln Datenbankprogrammierung 8
A Leeres ResultSet mit H2 unter Vista Datenbankprogrammierung 3
A Warum ist mein ResultSet leer? Datenbankprogrammierung 5
S ResultSet closed Datenbankprogrammierung 2
Z ResultSet mit einer anderen Datenquelle Datenbankprogrammierung 7
O Spaltenname aus Resultset Datenbankprogrammierung 2
thE_29 ResultSet und doppelte Spalten Datenbankprogrammierung 4
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
E ResultSet vergisst Reihe? Datenbankprogrammierung 2
N resultset aus andere klasse übergeben Datenbankprogrammierung 3
F ResultSet refresh moeglich? Datenbankprogrammierung 3
S ResultSet enthält keine Daten Datenbankprogrammierung 2
B Geschlossenes ResultSet Datenbankprogrammierung 6
T ResultSet#next Ungültige Reihenfolge (DB2) Datenbankprogrammierung 5
S Tabelle updaten wenn ResultSet aus JDBC-Quelle Datenbankprogrammierung 2
S ResultSet Datenbankprogrammierung 6
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
S Connection/Statement/ResultSet auf einmal geschlossen Datenbankprogrammierung 8
@ Like-Klausel; NPE bzw. leeres ResultSet Datenbankprogrammierung 4
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5
B No ResultSet was produced Datenbankprogrammierung 2
S ResultSet erweitern ? Datenbankprogrammierung 4
E JDBC, ForwardOnly bei ResultSet nach Uebergabe Datenbankprogrammierung 4
R ResultSet liefert oracle.sql.TIMESTAMP, aber unbrauchbar Datenbankprogrammierung 9
A Probleme mit ResultSet und getString(i) Datenbankprogrammierung 13
RaoulDuke ResultSet - Wie arbeitet sowas intern Datenbankprogrammierung 2
N Probleme mit "nur vorwärts gerichtete ResultSet" Datenbankprogrammierung 7
G Für jede SQL-Abfrage eigenes Statement und ResultSet? Datenbankprogrammierung 3
T MAX und ResultSet#next Datenbankprogrammierung 10
R ResultSet zu bestimmtem DS navigieren Datenbankprogrammierung 4
S .leeres Resultset abfangen Datenbankprogrammierung 2
B ResultSet ohne Datenbank erstellen Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben