Ich verwende Verbindungspooling in meiner Anwendung. Meine Frage ist:Ist statement.close() explizit in Verbindung Poolumgebung erforderlich?
Ist es explizit erforderlich, die Anweisung vor dem Schließen der Verbindung im Falle einer Verbindung gepoolten Umgebung zu schließen?
In der Verbindung wird die Verbindung zur gepoolten Umgebung nicht geschlossen, (sondern kehrt zum freien Verbindungspool zurück). Ich hatte jdbc 4.0 funktionale Spezifikationen überprüft. In Punkt Nummer 9.4.4 heißt es eindeutig:
Verbindungsobjekte schließen Eine Anwendung ruft die Methode Connection.close auf, um anzuzeigen, dass sie eine Verbindung beendet hat. Alle Statement-Objekte, die aus einem bestimmten Connection-Objekt erstellt wurden, werden geschlossen, wenn die Methode close für das Objekt aufgerufen wird. Sobald eine Verbindung geschlossen wurde, führt jeder Versuch, auf eine ihrer Methoden zuzugreifen, mit Ausnahme der Methoden close, isClosed oder isValid, dazu, dass eine SQLException ausgelöst wird.
So jdbc specs mandates schließen alle Anweisung zu einem Zeitpunkt der Schließung der Verbindung. Ist es also nur für gepoolte Umgebungen ohne Verbindung oder nur für gepoolte Umgebungen mit Verbindung anwendbar?
Laut mir sollte es im Falle einer gepoolten Umgebung nicht wichtig sein, weil wir für die Schnittstelle codieren (java.sql.Connection
& java.sql.Statement
). Wir kümmern uns also nicht um die Implementierung, und die Elternklasse (java.sql.Connection
) hat keine Informationen über die Kind-/Implementierungsklasse (Herstellerimplementierungsklasse).
Wenn jdbc-Spezifikationen alle Implementierungen zum Schließen einer Anweisung zum Schließen der Verbindung vorschreiben, können wir die Methode "statement.close" problemlos überspringen, wenn wir die connection.close-Methode verwenden (in gepoolter oder nicht gepoolter Umgebung). –
... ist das eine Frage? –