Was ist der beste Weg, um "ping" zu einer Datenbank über JDBC?
Ich bin versucht zu bestimmen, der beste Weg, um ping zu einer Datenbank über JDBC. Von 'besten' meine ich schnell und mit geringem overhead. Ich habe zum Beispiel als Ausführung:
"SELECT 1 FROM DUAL"
aber ich glaube, dass die DUAL-Tabelle ist Oracle-spezifisch, und ich brauche etwas mehr Generika.
Beachten Sie, dass Connection
hat eine isClosed()
Methode, aber in der javadoc heißt es, dass dieser nicht verwendet werden kann, um zu testen, die Wirksamkeit der Verbindung.
(Ich habe
SELECT @@VERSION
auf MS-SQL-Server, aber das ist nicht einmal SQL.)InformationsquelleAutor Leigh | 2009-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das wäre Oracle-only, aber es gibt keine Allgemeine Möglichkeit, dies zu tun in JDBC.
Meisten Verbindungs-pool-Implementierungen haben eine Konfigurations-parameter, wo Sie können und geben Sie die SQL, die verwendet werden, für ping, so schieben Sie die Verantwortung, um herauszufinden, wie es zu tun ist, um den Benutzer.
Dass scheint, wie der beste Ansatz, es sei denn, jemand kommt mit einer kleinen Helfer-tool für diese (natürlich, es schließt mit potenziell sogar schneller (die nicht SQL-basierte Methoden wie Oracle-internen ping-Funktion)
Siehe meine Antwort, JDBC 4 ist eine generische Art (Ursache-nicht alle Fahrer bieten JDBC 4 noch).
InformationsquelleAutor Thilo
Mit JDBC 4 können Sie
isValid(int)
(JavaDoc) von der Anschluss-Schnittstelle. Dieser im Grunde genommen die trial-Anweisung für Sie.InformationsquelleAutor eckes
Ich bin mir nicht bewusst, eine generische Lösung, entweder. Für IBM UDB auf der iSeries (und vielleicht andere DB2-Systeme) wäre es
InformationsquelleAutor rudolfson
Könnte man versuchen, den db-Namen aus der Verbindung von meta-Daten und führen Sie eine passende sql-staement. E. g.
InformationsquelleAutor Joern
Ich kann in der Mittagspause (dies könnte führen Sie einfach einige nicht-Sinn-Abfrage, wie:
Ich weiß nicht sehr viel über die JDBC-Fehlerbehandlung, aber könnten Sie vielleicht überprüfen, um zu sehen, ob sich die Datenbank zumindest sagen Sie, dass die Tabelle nicht existiert. Wenn die JDBC-Fehler-codes sind herstellerspezifisch, das Spring-Framework hat einige Dienstprogramme für die Zuordnung dieser codes zu mehr sinnvolle Ausnahmen.
InformationsquelleAutor Adam Paynter
MySQL hat einen schönen Mechanismus, dokumentiert in diesem SO beantworten. Aus der Antwort:
Gesagt haben, dass, @eckes Antwort ist die beste (mit JDBC 4
Connection.isValid(int)
).InformationsquelleAutor Brad Cupit
Einfach die Ausgabe der folgenden Abfrage sollte ausreichend sein,
ORA-00923: FROM-Schlüsselwort nicht gefunden, wo erwartet
InformationsquelleAutor Martin OConnor
Können Sie nicht einfach ausführen
ohne eine FROM-Klausel gegen die meisten Datenbanken?
InformationsquelleAutor Mark