[JDBC] 예외 처리

예외 처리를 통해 프로그램에서 정의한 오류와 같은 예외 상황을 제어된 방식으로 처리할 수 있습니다. 예외 상황이 발생하면 예외가 throw됩니다. throw된다는 것은 현재 프로그램 실행이 중단되고, 제어가 가장 가까운 적절한 catch 블록으로 전달된다는 것을 의미합니다. 만약 적절한 catch 블록이 없다면, 프로그램의 실행은 종료됩니다.

SQLException 메서드

드라이버와 데이터베이스 모두 발생할 수 있습니다. 예외가 발생하면 SQLException 타입의 객체가 catch 블록으로 전달됩니다.

메서드 설명
getErrorCode() 예외와 관련된 오류 번호
getMessage() JDBC 드라이버 오류 또는 데이터베이스 오류 번호와 메시지
getSQLState() 데이터베이스 오류일 경우 XOPEN SQL 상태 문자열 5자리 상태코드 반환
getNextException() 다음 예외 객체를 가져옵니다
printStackTrace() 현재 예외를 표준 오류 스트림에 출력
printStackTrace(PrintStream s) 지정한 출력 스트림에 출력
printStackTrace(PrintWriter w) 지정한 출력 작성기에 출력

예외 객체에서 제공하는 정보를 활용하여 예외를 처리하고 프로그램을 적절하게 계속 진행할 수 있습니다.

try 블록의 일반적인 형태는 다음과 같습니다.

try {
   // 위험한 코드는 여기 중괄호 사이에 위치합니다!!!
}
catch(Exception ex) {
   // 예외 처리 코드는 여기 중괄호 사이에 위치합니다. 
   // PL/SQL 블록의 예외 절과 유사합니다.
}
finally {
   // 항상 실행되어야 하는 코드는 여기 중괄호 사이에 위치합니다.
   // 예를 들어 데이터베이스 연결을 닫는 코드를 작성할 수 있습니다.
}

JDBC에서 try-catch 블록 사용 예제

DriverManager.getConnection() 메서드를 사용하여 데이터베이스 연결을 준비하고 connection.prepareCall()를 사용하여 CallableStatement를 준비합니다. 파라미터 값을 설정 후 OUT 매개변수를 등록합니다. execute 메서드를 사용하여 저장 프로시저를 호출하고 getString() 메서드를 사용하여 직원 이름을 검색합니다. catch 문에서 SQL 예외를 처리합니다. try-with-resources를 사용하기 때문에 finally 문이 필요 없으며, try-catch 문이 완료된 후 연결 객체는 자동으로 닫힙니다.

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCExample {
   static final String DB_URL = "jdbc:mysql://hostname/database";
   static final String USER = "guest";
   static final String PASS = "guest123";
   static final String QUERY = "{call getEmpName (?, ?)}";

   public static void main(String[] args) {
      try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         CallableStatement stmt = conn.prepareCall(QUERY);
      ) {		      
         stmt.setInt(1, 1);  // This would set ID
         stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
         
         stmt.execute();
         
         String empName = stmt.getString(2);
      } catch (SQLException e) {
         e.printStackTrace();
      } 
   }
}

 

'Databases > JDBC' 카테고리의 다른 글

[JDBC] Stored Procedure(저장 프로시저) 사용하기  (0) 2024.07.08
[JDBC] Batch Processing(일괄 처리)  (0) 2024.07.08
[JDBC] Transactions 사용법  (0) 2024.07.05
[JDBC] Data Types  (0) 2024.07.05
[JDBC] ResultSet란  (0) 2024.07.05