2012-05-09 12 views
5

Javadoc sagt für .close() der PreparedStatement sagt, dass es ..Beziehung zwischen "close" für PreparedStatement und Verbindung?

Releases dieser Datenbank und JDBC-Ressourcen des Statement-Objekt sofort anstatt zu warten, diese Einstellung, wenn es geschehen wird automatisch geschlossen. Es ist in der Regel eine gute Methode, die Ressourcen freizugeben, sobald Sie damit fertig sind, um zu vermeiden, dass die Datenbankressourcen gebunden werden.

Der Aufruf der Methode für ein Statement-Objekt, das bereits geschlossen ist, hat keine Auswirkung.

Hinweis: Wenn ein Statement-Objekt geschlossen wird, wird auch das aktuelle ResultSet-Objekt (falls vorhanden) geschlossen.

sich das folgende Szenario

MyConnector databaseConnector = DBManager.instance().getConnector(); 

    Connection con = databaseConnector.getConnection(); // returns java.sql.Connection 
    PreparedStatement pstmt = null; 

    try { 
     pstmt = con.prepareStatement("some query"); 
     ... 
    } finally { 
     if (pstmt != null) 
      pstmt.close(); 
    } 

In diesem Beispiel wird pstmt.close() auch in der Nähe con?

+0

Nein. Wenn Sie eine Anweisung schließen, wird * nicht * die Verbindung geschlossen (da es * viele * Anweisungen für eine einzelne Verbindung geben kann). Die Verbindung sollte * auch * als verwaltete Ressource gelten. –

+2

Sie können dieses Yoursef immer mit "con.isClosed()" testen http://docs.oracle.com/javase/6/docs/api/java/sql/Connection.html –

Antwort

9

Schließen ein Statementnicht schließen a Connection. Schließen ein Connectionwird jedoch schließen ein Statement.

Denken Sie daran, wie so:

  • Verbindung -> erstellt und schließt automatisch -> Statement
  • Statement -> erstellt und schließt automatisch -> ResultSet

So ein Connection Schließen wird automatisch schließen Sie alle Statement s und alle ResultSet s es enthält.

Es wird jedoch immer noch als Best Practice angesehen, alle drei manuell zu schließen (ResultSet, gefolgt von Statement, gefolgt von Connection), wenn möglich.

2

Hinweis: Wenn ein Statement Objekt geschlossen wird, seine aktuelle ResultSet [aber nicht Verbindung] Objekt, falls vorhanden, ist ebenfalls geschlossen.

Es wird keine Verbindung schließen, es schließt nur Ergebnisobjekt.

0

Wenn Sie mit Java 7 und try-with-resources Sie müssen nicht über das Schließen der Verbindung oder eines der Statement oder ResultSet kümmern.

+0

Guter Punkt.Leider bin ich immer noch auf 1.6 (für jetzt) – JAM

Verwandte Themen