SQLException이란?
SQLException은 JDBC 드라이버 내부 또는 데이터베이스 자체에서 발생할 수 있는 예외입니다. 이러한 예외가 발생하면 SQLException 타입의 객체가 생성되어 catch 블록으로 전달되며, 개발자는 이 객체가 제공하는 메소드들을 통해 오류의 원인을 상세히 파악할 수 있습니다.
전달된 SQLException 객체에는 예외에 대한 추가 정보를 조회할 수 있는 다음과 같은 메소드들이 포함되어 있습니다.
SQLException의 주요 메소드
| 메소드 | 설명 |
|---|---|
| getErrorCode() | 예외와 연관된 에러 번호를 반환합니다. |
| getMessage() | JDBC 드라이버가 처리한 오류에 대해서는 드라이버의 오류 메시지를 반환하며, 데이터베이스 오류에 대해서는 Oracle 오류 번호와 메시지를 반환합니다. |
| getSQLState() | XOPEN SQLstate 문자열을 반환합니다. JDBC 드라이버 오류의 경우 유용한 정보가 반환되지 않고, 데이터베이스 오류의 경우 5자리 XOPEN SQLstate 코드가 반환됩니다. 이 메소드는 null을 반환할 수도 있습니다. |
| getNextException() | 예외 체인(exception chain)에서 다음 Exception 객체를 반환합니다. |
| printStackTrace() | 현재 예외(throwable)와 그 백트레이스(backtrace)를 표준 에러 스트림에 출력합니다. |
| printStackTrace(PrintStream s) | 해당 throwable과 백트레이스를 사용자가 지정한 PrintStream에 출력합니다. |
| printStackTrace(PrintWriter w) | 해당 throwable과 백트레이스를 사용자가 지정한 PrintWriter에 출력합니다. |
활용 예제
아래는 실제 JDBC 프로그래밍에서 SQLException을 처리하는 일반적인 방식입니다.
try {
// 데이터베이스 작업 수행
} catch (SQLException e) {
System.out.println("에러 메시지: " + e.getMessage());
System.out.println("에러 코드: " + e.getErrorCode());
System.out.println("SQL 상태: " + e.getSQLState());
e.printStackTrace();
}이처럼 여러 메소드를 조합하여 사용하면 드라이버 오류인지, 데이터베이스 오류인지를 구분하고 원인을 보다 정확하게 진단할 수 있습니다. 또한 getNextException()을 반복적으로 호출하면 연쇄적으로 발생한 여러 예외를 모두 확인할 수 있어 복잡한 트랜잭션 오류 분석에도 유용합니다.