English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC 예외 처리 (SQLException)

예외 처리는 예외 상황, 예를 들어 프로그램에서 정의한 오류를 통제된 방식으로 처리할 수 있게 합니다.

이상적인 상황이 발생하면 예외가 발생합니다. throw이라는 단어는 현재 프로그램이 중지되고 컨트롤이 가장 가까운 적합한 catch 구문으로 전환된다는 의미입니다. 적합한 catch 구문이 없으면 프로그램의 실행이 종료됩니다.

JDBC 예외 처리는 Java 예외 처리와 매우 유사하지만, JDBC의 경우 처리해야 할 가장 일반적인 예외는} java.sql.SQLException.

SQLException 메서드

드라이버와 데이터베이스에서 SQLException이 발생할 수 있습니다. 이러한 예외가 발생하면 SQLException 타입의 객체가 catch 절에 전달됩니다.

전달된 SQLException 객체는 예외에 대한 추가 정보를 검색할 수 있는 다른 메서드를 포함합니다-

메서드설명
getErrorCode( )

예외와 관련된 오류 번호를 가져옵니다.

getMessage( )

오류의 JDBC 드라이버 오류 메시지를 가져옵니다. 드라이버가 처리한 경우, 또는 데이터베이스 오류의 Oracle 오류 번호와 메시지를 가져옵니다.

getSQLState( )

XOPEN SQLstate 문자열을 가져옵니다. JDBC 드라이버 오류의 경우 이 메서드는 유용한 정보를 반환하지 않습니다. 데이터베이스 오류의 경우 다섯 자리수의 xopensqlstate 코드를 반환합니다. 이 메서드는 null을 반환할 수 있습니다.

getNextException( )

예외 체인의 다음 Exception 객체를 가져옵니다.

printStackTrace( )

현재 예외나 호출 가능한 예외를 인쇄하고 트레이스 백을 표준 오류 스트림으로 되돌립니다.

printStackTrace(PrintStream s)

이 버리기 가능한 객체와 트레이스 백을 지정된 인쇄 스트림에 인쇄합니다.

printStackTrace(PrintWriter w)

이 일회성 파일을 인쇄하고 지정된 인쇄 작성자로 되돌립니다.

Exception 객체가 제공하는 정보를 활용하여 예외를 캡처하고 프로그램을 적절히 계속 실행할 수 있습니다. 이는 try 블록의 일반 형식입니다-

try {
   // 귀하의 예외 코드는 이 두 괄호 사이에 있습니다!!!
}
catch(Exception ex) {
   // 귀하의 예외 처리 코드는 이 두 가지 사이에 있습니다 
   // 괄호, exception 절과 유사 
   // PL / SQL 블록 내에서.
}
finally {
   // 항상 실행해야 하는 코드는 이 두 가지 사이에 있습니다 
   //큰 괄호. 데이터베이스 연결을 닫는 것처럼.
}

온라인 예제

다음 예제 코드를 연구하여 이해하세요try....catch...finally블록의 사용법.

//단계1. 필요한 소프트웨어 패키지를 가져오세요
import java.sql.*;
public class JDBCExample {
   // JDBC 드라이버 이름과 데이터베이스 URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";
   //  데이터베이스 인증 정보
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   try{
      //단계2:JDBC 드라이버 등록
      Class.forName("com.mysql.jdbc.Driver");
      //단계3:연결 설정
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);
      //단계4:쿼리 실행
      System.out.println("Creating statement...");
      Statement stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);
      //단계5:결과 집합에서 데이터 추출
      while(rs.next()){
         //컬럼 이름으로 검색
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");
         //값 표시
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //단계6:환경 정리
      rs.close();
      stmt.close();
      conn.close();
   catch(SQLException se){
      //JDBC 에러 처리
      se.printStackTrace();
   catch(Exception e){
      //Class.forName 에러 처리
      e.printStackTrace();
   finally{
      //최종적으로 자원을 닫는 것을 방지
      try{
         if(conn!=null)
            conn.close();
      catch(SQLException se){
         se.printStackTrace();
      }
   }//try 종료
   System.out.println("Goodbye!");
}//main 종료
}//JDBCExample 종료

현재, 위의 예제를 다음과 같이 컴파일해 보겠습니다:

C:\>javac JDBCExample.java
C:\>

실행 시간JDBCExample،如果没有问题,它将产生以下结果,否则将捕获相应的错误并显示错误消息-

C:\>java JDBCExample
Connecting to database...
Creating statement...
ID: 10, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 3, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

위의 예제를 잘못된 데이터베이스 이름이나 잘못된 사용자 이름이나 비밀번호를 통해 시도하고, 그 결과를 확인하세요.