2016-07-06 15 views
0

Als Client, wenn etwas "schlechtes" mit der Eingabe/Ausgabe meines Programms passiert, sollte eine E/A-Ausnahme ausgelöst werden. Wenn ich nun mit einem Server verbunden bin, hat mein Programm eine Eingabe-Ausgabe-Beziehung als Client zu dem Server. Wenn daher etwas in der Kommunikation nicht funktioniert (etwas "Schlechtes"), sollte die resultierende Ausnahme eine IOException sein, d. H. SQLException sollte IOException erweitern.Warum verlängert SQLException IOException nicht?

Warum ist das nicht der Fall?

+2

Was lässt Sie glauben, dass jedes SQL-Problem mit IO-Problemen zu tun hat? – GhostCat

+1

Warum sollte ein "Syntaxfehler" eine IOException sein? –

Antwort

6

Weil ein SQLException nicht immer auf IO bezogen ist.

Zum Beispiel, wenn Sie einen schlechten SQL-Befehl schreiben, haben Sie eine SQLException.

Hier ist eine nicht erschöpfende Liste möglicher SQLExceptions nicht zu IO bezogen werden:

  • Bad SQL-Grammatik
  • Falsche Attribut Zahlen
  • Falsche Attributtypen
  • Beschränkungsverletzung
  • Privilege Probleme
  • Doppelte Primärschlüssel
  • Nicht vorhanden Tabellen- oder Spaltennamen

Von javadoc:

Eine Ausnahme, die Informationen auf einem Datenbank-Zugriffsfehler oder anderen Fehlern liefert.

+0

Um am genauesten zu sein, müssten wir mehrfache Vererbung benötigen, um anzuzeigen, ob eine Ausnahme sowohl eine SQL-Ausnahme als auch eine E/A-Ausnahme ist, aber das können wir nicht mit Java haben, oder? – GreenThor

+0

Ist der Treiber, der verbirgt, was in der Kommunikation zwischen Client (Java App) und Server passiert. Wahrscheinlich wird eine IOException auf einer niedrigeren Ebene ausgelöst, aber sie wird abgefangen und in eine SQLException geändert. –

0

Eine SQL-Exception muss nicht unbedingt eine IO-Exception sein (z. B. Verbindungsverlust, Read Timeout usw.).

Ein fehlerhafter SQL oder eine Constraint-Verletzung kann auch eine SQL-Exception auslösen.

1

Da die SQLException nicht unbedingt eine IOException ist. Es kann falsch sein Syntax, Format, ... IOException soll von den E/A-Geräten zurückgegeben werden (ursprünglicher Datenstrom, z. B. Datei- und Netzwerkoperationen), nicht unbedingt eine Eingabe/Ausgabe von Ihrem Programm.

+0

"wie Datei- und Netzwerkoperationen" ist kein Serverzugriff ein Netzwerkvorgang? – GreenThor

+1

Nicht unbedingt. Sie haben möglicherweise eingebettete Datenbanken, Syntaxfehler usw. In diesem Fall ist es nichts falsch mit der IO selbst. Die IOException soll eher Geräte/Umgebung als Anwendungs-Exceptions behandeln. Der Treiber kann eine IOException auslösen, wenn das Netzwerk jedoch unterbrochen ist – gusto2

Verwandte Themen