Java / JDBC: Bestes Entwurfsmuster zum Schließen der Datenbankverbindung, wenn eine Ausnahme auftritt

7

Ich bin neu in Java (ich benutze Java 6). Ich habe das folgende Designmuster für alle meine Java POJOs und Servlets verwendet, um über den GlassFish 3.1.2 Webserver auf eine Oracle 11G Datenbank zuzugreifen.

Ich bekomme einen zeitweiligen Datenbankfehler (ORA-12519), wenn alle verfügbaren Prozesse (oder Sitzungen, nicht sicher, was der Unterschied ist) konsumiert werden, was mich dazu bringt zu denken, dass die Prozesse nicht von der Anwendung freigegeben werden / p>

Wenn Sie sich das Entwurfsmuster unten ansehen, gibt es eine bessere Möglichkeit, sicherzustellen, dass die JDBC-Verbindung zur Datenbank im Falle einer Ausnahme freigegeben wird? Zum Beispiel, sollte ich auch den if ( conn != null) conn.close(); code INSIDE in den catch-Block setzen? Oder gibt es ein besseres Designmuster? Vielen Dank im Voraus für Kommentare / Hinweise.

%Vor%     
ggkmath 22.06.2012, 16:42
quelle

4 Antworten

29
%Vor%

Bei dieser Zeile darf conn nicht null sein. Das beliebteste Muster, bis Java 6 ist:

%Vor%

Mit Java 7 wird dies weniger mühsam mit seinen with-resource Konstrukt. Der obige Code kann zu dem viel kürzeren

ändern %Vor%     
Miserable Variable 22.06.2012, 16:47
quelle
4

Verwenden Sie einen finally -Block, um immer Ressourcen freizugeben.

>
  

Der finally-Block wird immer ausgeführt, wenn der try-Block beendet wird. Dadurch wird sichergestellt, dass der finally-Block auch dann ausgeführt wird, wenn eine unerwartete Ausnahme auftritt.

%Vor%     
Kazekage Gaara 22.06.2012 16:43
quelle
2

java se 7 unterstützt die Try-with-resources-Funktion. Das erzeugt das Letzte für dich. Ссылка

Der finally-Block schließt die im Versuch zugewiesenen Ressourcen. als ob du das Schlüsselwort in c # verwenden würdest

aber der Benutzer verwendet java se6 ... Siehe die Optionen anderer Benutzer:)

WICHTIG: Die verwendeten Anweisungen sollten ebenfalls geschlossen werden.

    
brunoss 22.06.2012 16:58
quelle
2

Ich bevorzuge einen eleganteren Weg als:

%Vor%

Sie könnten DbUtils.closeQuietly verwenden: Ссылка

    
Vladislav Bauer 22.06.2012 17:42
quelle

Tags und Links