Wie prüfe ich eine offene Verbindung in jdbc for oracle database?
Anmerkung: conn.isClosed()
kann hierfür nicht verwendet werden.
Wie prüfe ich eine offene Verbindung in jdbc for oracle database?
Anmerkung: conn.isClosed()
kann hierfür nicht verwendet werden.
Etwa so:
Statement stmt = null;
ResultSet rs =null;
try {
stmt = conn.createStatement();
// oracle
rs = stmt.executeQuery("SELECT 1 FROM Dual");
// others
// rs = stmt.executeQuery("SELECT 1");
if (rs.next())
return true; // connection is valid
}
catch (SQLException e) {
// TODO : log the exception ...
return false;
}
finally {
if (stmt != null) stmt.close();
if (rs != null) rs.close();
}
Wenn die Verbindung von einem Verbindungspool (z. B. in einem Anwendungsserver) kommt, verfügt der Pool möglicherweise über einen Mechanismus zur Überprüfung, ob eine Verbindung gültig ist oder nicht. Bei BEA geben Sie das SELECT in der Eigenschaft "test-on-reserve" an.
Wenn Sie Ihren eigenen Pool entwickeln, sollten Sie sich ansehen, wie andere dies tun (z. B. Proxool ).
Je nach Ihrer Umgebung SOLLTE Ihr Connection Pool die Verbindung prüfen. Andernfalls müssen Sie, wenn Sie die Verbindung zur DB verlieren, in der Regel Ihren Anwendungsserver neu starten, um den Pool neu zu starten.
Normalerweise verwendet ein Connection Pool auch die Methode Connection.isClosed(), um zu prüfen, ob die Verbindung noch gültig ist. Das Problem ist, dass nicht alle JDBC-Treiber diesen Aufruf korrekt verarbeiten. Daher nehme ich an, dass es einige einfache Prüfanweisungen gibt, wie RealHowTo sagte. Für Oracle hat er bereits das "SELECT 1 FROM Dual" erwähnt, das bei Oracle-Datenbanken immer erfolgreich sein sollte. Ich denke, dass es ähnliche Abfragen für die verschiedenen Datenbanken gibt. Ich kann mich erinnern, dass wir in einem früheren Projekt auch einen eigenen Connection Pool implementiert haben, der solche Validierungsabfragen verwendet hat.
Ver este Buchung.
Die referenzierten Lösungen ähneln der hier geposteten (schnelle Abfrage gegen DUAL zur Validierung), aber es gibt auch eine interessante Lösung, die von JBoss speziell für Oracle bereitgestellt wird, indem die proprietäre PING-Methode in der Oracle JDBC Connection-Klasse verwendet wird. Siehe den Code aquí .
//Nikolaus
Utilice pingDatabase(int timeout) Implementiert in OracleConnection seit 9.0.1
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Möchten Sie wissen, ob Ihre Anwendung eine Verbindung geöffnet hat, oder möchten Sie wissen, ob die DB eine Verbindung zu irgendetwas geöffnet hat.
0 Stimmen
Ich möchte einen Verbindungspool einrichten.
0 Stimmen
Siehe dort Java JDBC-Verbindungsstatus
0 Stimmen
Seit JRE 6 gibt es eine Methode
conn.isValid(timeout)
wurde speziell für diesen Zweck eingeführt und ist in vielen JDBC-Treibern tatsächlich implementiert.