2016-07-06 4 views
0

クライアントとして、私のプログラムの入出力に何か「悪い」ことが起こると、I/O例外がスローされるはずです。今私はサーバーに接続しているとき、私のプログラムは、上記のサーバーへのクライアントとしての入出力関係を持っています。したがって、通信上の何らかの問題(何か「悪い」)が発生した場合、結果の例外はIOException、つまりSQLExceptionがIOExceptionを拡張する必要があります。SQLExceptionがIOExceptionを拡張しないのはなぜですか?

なぜこれが当てはまりませんか?

+2

SQLの問題がIOの問題と関係していると思いますか? – GhostCat

+1

"構文エラー"がIOExceptionであるのはなぜですか? –

答えて

6

SQLExceptionは必ずしもIOに関係しないためです。

たとえば、不適切なSQLコマンドを書き込むと、SQLExceptionが表示されます。ここで

はIOに関連していない可能性のSQLExceptionの非網羅的なリストである:

  • 悪いSQL文法
  • 間違った属性番号
  • 間違った属性タイプ
  • 制約違反
  • 特権の問題
  • 重複する主キー
  • javadocからテーブルやカラム名

を存在しない:

データベースアクセスエラーやその他のエラーに関する情報を提供する例外を。

+0

最も正確であるためには、例外がSQL例外とI/O例外の両方であるかどうかを示すために複数の継承が必要ですが、Javaではこれを行うことはできません。 – GreenThor

+0

クライアント(Javaアプリケーション)とサーバー間の通信で発生するものを隠すドライバです。おそらく、IOExceptionは低レベルでスローされますが、傍受されてSQLExceptionに変更されます。 –

0

SQL例外は、IOエラー(接続喪失、読み取りタイムアウトなど)である必要はありません。

SQLまたは制約違反があると、SQL例外が発生することがあります。

1

SQLExceptionが必ずしもIOExceptionであるとは限らないためです。誤った構文、形式、... IOExceptionは、I/Oデバイス(元々はファイルやネットワーク操作などのストリーム)によって返されることを意図していますが、プログラムからの入出力は必ずしも必要ではありません。

+0

"ファイルやネットワーク操作など"はサーバーがネットワーク操作にアクセスできませんか? – GreenThor

+1

必ずしもそうではありません。データベースや構文エラーなどが埋め込まれている可能性があります。この場合、IO自体に問題はありません。 IOExceptionは、実際にはアプリケーションの例外ではなくデバイス/環境を処理するためのものです。ネットワークが壊れている場合、ドライバはIOExceptionをスローすることがあります – gusto2

関連する問題