JDBC探索のSQLException解析

3179 ワード

1.SQLExceptionの概要
JDBCを使用してデータ・ソース(本明細書のデータ・ソースは実際に使用しているデータベースを示す)と対話しているときにエラーが発生した場合、SQLExceptionという例外が投げ出されます.SQLExceptionの例外には、より良い位置決めエラーを支援するための次の情報が含まれています.
エラー表示:
getMessageメソッドを使用して取得できます.
SQLStateコード
コードは5桁のアルファベットと数字で構成されています.多くのコードはISO/ANSIとOpen Group(X/Open)によって標準化されているが、一部のコードはデータベースプロバイダによって独自に実装されている.
getSQLStateメソッドを使用して取得できます.
エラーコード
SQLStateと異なり、エラーコードはデータベース・プロバイダが独自に定義した整数値であり、ベース・データ・ソースから返される実際のエラーコードである可能性があります.
getErrorCodeメソッドを使用して取得できます.
エラーの原因
異常の原因を表し,getCauseメソッドを呼び出し続けることで異常発生の下位原因を得ることができる.
いじょうチェーン
複数のエラーが発生した場合は、このチェーンを使用して例外を参照します.
getNextExceptionメソッドを使用して取得できます.
2.SQLExceptionの例

public static void printSQLException(SQLException e){
  for(Throwable e :ex){
    if (e instanceof SQLException){
      if(ignoreSQLException(((SQLException)e).getSQLState()) == false){
        e.printStackTrace(System.err);
        System.err.println("SQLState:" + ((SQLException)e).getSQLState());
        System.err.println("Error Code:" + ((SQLException)e).getErrorCode());
        System.err.println("Message:" + e.getMessage());
        Throwable t = ex.getCause();
        while(t != null){
          System.out.println("Cause :" + t);
          t = t.getCause();
        }
      }
    }
  }
}
public static boolean ignoreSQLException(String sqlState){
  if(sqlState == null){
    System.out.println("The SQL state is not defined");
  }
  // X0Y32:Jar file already exists in schema
  if(sqlState.equalsIgnoreCase("X0Y32")){
    return true;
  }
  // 42Y55:Table already exists in schema
  if(sqlState.equalsIgnoreCase("42Y55")){
    return true;
  }
  return true;
}

説明:上のコードは[http:docs.oracle.com](http://docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html).
3. SQLWarning
SQLWarningはSQLExceptionの非常に重要なサブクラスであり、データベースへのアクセス時に発生する警告を表すために使用されます.例外として、SQLWarningはアプリケーションの実行を停止するのではなく、ユーザーに計画通りに何も起こらなかったことを通知します.たとえば、警告は、取り消しを試みた権限が成功しなかったことを通知したり、切断を要求したときにエラーが発生した可能性があることを通知したりする可能性があります.
SQLWarningは、getWarningsメソッドが存在する、PreparedStatementおよびCallableStatementを含むConnection、Statement、またはResultSetによってレポートされる可能性があります.このメソッドを呼び出すと、呼び出されたオブジェクトにレポートされた最初の警告が表示されます.getWarningが警告を返すと、getNextWarningメソッドを呼び出して次の警告を取得できます.1行の文を実行するたびに、前の行の文の警告が消去されます.これは、レポート処理された警告を取得するには、次の行の文が実行される前に取得する必要があることを意味します.
Data Truncationは最も一般的な警告であり、SQLStateコードはいずれも01004であり、データの読み取りと書き込みに問題があることを示しています.DataTruncationでは、どのカラムまたはパラメータデータが切断されているのか、読み取りまたは書き込み操作で切断されているのか、どのバイトを転送すべきか、実際に転送されているバイト数を理解するのに役立つ方法がたくさんあります.
4.その他のタイプのSQLException
BatchUpdateException:バッチ更新操作中にエラーが発生すると、提供された情報を除いて、提供された更新カウントが処刑される前にエラーが発生したすべての文が発生します.
SQLClientInfoException:接続に1つ以上のクライアント情報属性を設定できない場合に開始します.提供される情報に加えて、設定されていないクライアント情報属性のリストも提供されます.
so on...
まとめ
以上,JDBC探索のSQLException解析のすべての内容について述べたが,皆さんの役に立つことを願っている.興味のある方は引き続き当駅を参照してください:JDBC常用インタフェースのまとめ、JDBCを使ってデータアクセス対象層(DAO)コードの例を実現するなど、何か問題があればいつでもメッセージを残すことができます.