JavaのSQLExceptionクラスで使える主要メソッド一覧とその役割
SQLExceptionは、JDBCドライバー側でもデータベース側でも発生する可能性がある例外です。この例外が発生すると、SQLException型のオブジェクトがcatch節に渡され、プログラム側で詳細なエラー情報を受け取ることができます。
SQLExceptionから取得できる主なメソッド
catch節に渡されたSQLExceptionオブジェクトには、例外に関する追加情報を取得するための以下のメソッドが用意されています。
| メソッド | 説明 |
|---|---|
| getErrorCode( ) | 例外に関連付けられたエラー番号を取得します。 |
| getMessage( ) | ドライバーが処理したエラーの場合はJDBCドライバーのエラーメッセージを取得し、データベースエラーの場合はOracleのエラー番号とメッセージを取得します。 |
| getSQLState( ) | XOPEN SQLstate文字列を取得します。JDBCドライバーのエラーの場合、このメソッドから有用な情報は返されません。データベースエラーの場合は、5桁のXOPEN SQLstateコードが返されます。なお、このメソッドはnullを返す場合があります。 |
| getNextException( ) | 例外チェーン内の次のExceptionオブジェクトを取得します。 |
| printStackTrace( ) | 現在の例外(Throwableオブジェクト)とそのバックトレースを、標準エラーストリームに出力します。 |
| printStackTrace(PrintStream s) | このThrowableオブジェクトとそのバックトレースを、指定したPrintStreamに出力します。 |
| printStackTrace(PrintWriter w) | このThrowableオブジェクトとそのバックトレースを、指定したPrintWriterに出力します。 |
使用例:例外情報をログに出力する
実際の開発では、これらのメソッドを組み合わせて、発生したSQL例外の詳細をログに記録するのが一般的です。以下は典型的な使用例です。
try {
// データベース操作
} catch (SQLException e) {
System.out.println("エラーメッセージ: " + e.getMessage());
System.out.println("エラーコード: " + e.getErrorCode());
System.out.println("SQLState: " + e.getSQLState());
e.printStackTrace();
}
ポイント
- getErrorCode() と getSQLState() を併用することで、ベンダー固有のエラーと標準化されたSQL状態コードの両方を確認できます。
- 複数の例外が連鎖している場合は、getNextException() をループで回すことで、チェーン全体の例外を追跡できます。
- 本番環境では printStackTrace() の代わりにロギングフレームワーク(Log4jやSLF4Jなど)へ出力するのが推奨されます。
-
JavaのExceptionクラスとErrorクラスの違いを徹底解説
JavaにおけるException(例外)クラスとError(エラー)クラスは、どちらもjava.lang.Throwableクラスのサブクラスです。しかし、両者には重要な違いがあります。例外はプログラム側で捕捉・処理できるのに対し、エラーはアプリケーションで対処すべきではない重大な問題を表します。 ExceptionとErrorの共通点 両クラスともThrowableクラスを継承しており、throw文によってスロー可能なオブジェクトという点では共通しています。ただし、その性質と扱い方には大きな違いがあります。 主な違い 1. 処理の可否 例外は実行時に発生する論理的なエラーを表すオブジ
-
Pythonの静的メソッド(@staticmethod)とは?仕組みと使い方を解説
Pythonのクラスには、インスタンスメソッド、クラスメソッド、静的メソッド(スタティックメソッド)という3種類のメソッドを定義できます。それぞれ役割や呼び出し方が異なり、適切に使い分けることでコードの可読性と保守性が向上します。3種類のメソッドの違いインスタンスメソッド: 第1引数に self を受け取り、オブジェクト(インスタンス)の状態にアクセス・変更できます。クラスメソッド: @classmethod デコレータを付け、第1引数に cls を受け取り、クラス自体の状態にアクセスできます。静的メソッド: @staticmethod デコレータを付け、self も cls も受け取りません