Als Ganzes gelesen, ich lese das Javadoc zu sagen, dass, wenn die Verbindung nicht gültig ist (dh nicht geschlossen und nutzbar), oder wenn das Timeout überschritten wird es false zurückgibt.
Wenn jedoch bei der Abfrage der Datenbank über die Gültigkeit der Verbindung noch etwas schief geht, wird möglicherweise noch eine SQLException ausgelöst. (Sagen wir zum Beispiel, die Abfrage ist gegen eine erforderliche Systemtabelle der Datenbank, die fehlt, oder die Transaktion wird während der Prüfung zurückgesetzt).
Eine SQLException wird immer ausgelöst, wenn der Zeitüberschreitungswert kleiner als Null ist.
Das heißt, es gibt eine Menge Probleme mit (JDBC im Allgemeinen und) diese Spezifikation im Besonderen.
Was definiert eine ungültige Verbindung? Wenn ein Datenbankfehler ausgelöst wird, können wir wirklich sagen, dass wir nicht wissen, ob die Verbindung gültig ist. Es ist wahrscheinlich sowieso kaputt. Das einzige, was mir einfällt, ist, dass die Verbindung noch geschlossen werden muss, während "= = false" bedeutet, dass die Verbindung tot ist, also nicht geschlossen werden muss. Dies führt zum nächsten Problem:
Gültig ist nicht formell definiert. Es bedeutet nicht geschlossen und etwas anderes. Aber das etwas anderes ist irgendwie vage. Es sollte benutzbar sein, aber was, wenn es nicht geschlossen ist, aber nicht verwendbar?
Und schließlich, warum so eine negative Zahl so intolerant sein? Es ist genauso einfach zu sagen: Ein Wert von 0 oder weniger gibt an, dass eine Zeitüberschreitung nicht auf die Datenbankoperation angewendet wurde.
Und natürlich wurde die Spezifikation auf isClosed() nicht aktualisiert, um die neue isValid (int) -Methode zu erkennen.
Die JDBC API ist wirklich eine Travestie im Allgemeinen.
Auf der anderen Seite, wenn die Bedeutung ist , wenn und nur wenn, soll es gesagt hat, dass, und wenn SQLException kann nicht aus einem anderen Grunde geworfen wird, dann soll dies eine Runtime-Ausnahme (Illegal zum Beispiel), weil einen negativen Wert zu übergeben wäre nur ein Programmierfehler. Wenn SQLException andererseits aus anderen Gründen ausgelöst werden kann, ist es zumindest vertretbar, dass es sich nicht lohnt, eine separate Ausnahme einzuführen, wenn die geprüfte Ausnahme trotzdem behandelt werden muss. Ich bin mir nicht sicher, ob ich dem Argument zustimme, aber es könnte zumindest einen Vorteil haben. (Hinweis: Ich schreibe diesen letzten Absatz nicht als Beweis dafür, dass die Spezifikation nicht genau dann und nur dann zählt, wenn es das ist.)
Warum testen Sie es nicht einfach? oder sehen Sie sich den Quellcode an? –
Es ist eine Schnittstelle – looeeese
@Bishiboosh, im Allgemeinen JDBC-Treiber ihren Quellcode nicht offen legen, und trotzdem ist es eine Spezifikation Frage, so dass selbst wenn eine gegebene Implementierung die Ausnahme aus irgendeinem anderen Grund nicht wirft, bedeutet das nicht das andere wird nicht. – Yishai