エラーの処理

JDBC ドライバーのダウンロード

Microsoft JDBC Driver for SQL Server の使用時に発生するデータベース エラー状態はすべて、SQLServerException クラスを使用して、Java アプリケーションに例外として返されます。 SQLServerException クラスの次のメソッドは、java.sql.SQLException および java.lang.Throwable から継承されます。これらのメソッドを使用して、発生した SQL Server エラーに関する特定の情報を返すことができます。

  • getSQLState() は、例外の標準的な X/Open または SQL99 状態コードを返します。

  • getErrorCode() は、具体的なデータベース エラー番号を返します。

  • getMessage() は、例外の全文を返します。 エラー メッセージ テキストは、問題を説明しており、多くの場合、オブジェクト名のような情報のプレースホルダーが含まれます。このようなプレースホルダーは、表示されたエラー メッセージに挿入されています。

  • getSQLServerError() は、SQL Server から受信した例外に関する詳細情報を含む SQLServerError オブジェクトを返します。 サーバー エラーが発生しなかった場合、このメソッドは null 値を返します。

SQLServerError クラスの次のメソッドは、生成されたエラーに関するその他の情報をサーバーから取得するために使用できます。

  • SQLServerError.getErrorMessage() は、サーバーから受信したエラー メッセージを返します。

  • SQLServerError.getErrorNumber() は、エラーの種類を識別する数値を返します。

  • SQLServerError.getErrorState() は、エラー、警告、または "データが見つかりません" メッセージを表す SQL Server の数値エラー コードを返します。

  • SQLServerError.getErrorSeverity() は、受信したエラーの重大度レベルを返します。

  • SQLServerError.getServerName() は、エラーを生成した SQL Server インスタンスを実行しているコンピューターの名前を返します。

  • SQLServerError.getProcedureName() は、エラーを生成したストアド プロシージャの名前またはリモート プロシージャ呼び出し (RPC) の名前を返します。

  • SQLServerError.getLineNumber() は、Transact-SQL コマンドのバッチまたはストアド プロシージャ内の、エラーが生成された行番号を示します。

次の例の関数は、SQL Server AdventureWorks2022 サンプル データベースに対して開かれた接続を渡され、FROM 句のない、形式に誤りがある SQL ステートメントを作成します。 次に、ステートメントが実行され、SQL 例外が処理されます。

public static void executeSQLException(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String SQL = "SELECT TOP 10 * Person.Contact";
        ResultSet rs = stmt.executeQuery(SQL);

        while (rs.next()) {
            System.out.println(rs.getString("FirstName") + " " + rs.getString("LastName"));
        }
    }
    catch (SQLException se) {
        do {
            System.out.println("SQL STATE: " + se.getSQLState());
            System.out.println("ERROR CODE: " + se.getErrorCode());
            System.out.println("MESSAGE: " + se.getMessage());
            System.out.println();
        }
        while (se != null);
    }
}

関連項目

JDBC ドライバーに関する問題の診断