JDBC-예외 처리

예외 처리를 사용하면 제어 된 방식으로 프로그램 정의 오류와 같은 예외 조건을 처리 할 수 ​​있습니다.

예외 조건이 발생하면 예외가 발생합니다. 던져진 용어는 현재 프로그램 실행이 중지되고 제어가 가장 가까운 적용 가능한 catch 절로 리디렉션됨을 의미합니다. 적용 가능한 catch 절이 없으면 프로그램 실행이 종료됩니다.

JDBC 예외 처리는 Java 예외 처리와 매우 유사하지만 JDBC의 경우 가장 일반적인 예외는 다음과 같습니다. java.sql.SQLException.

SQLException 메서드

SQLException은 드라이버와 데이터베이스 모두에서 발생할 수 있습니다. 이러한 예외가 발생하면 SQLException 유형의 오브젝트가 catch 절에 전달됩니다.

전달 된 SQLException 객체에는 예외에 대한 추가 정보를 검색하는 데 사용할 수있는 다음 메서드가 있습니다.

방법 기술
getErrorCode () 예외와 관련된 오류 번호를 가져옵니다.
getMessage () 드라이버가 처리하는 오류에 대한 JDBC 드라이버의 오류 메시지를 가져 오거나 데이터베이스 오류에 대한 Oracle 오류 번호 및 메시지를 가져옵니다.
getSQLState () XOPEN SQLstate 문자열을 가져옵니다. JDBC 드라이버 오류의 경우이 메서드에서 유용한 정보가 반환되지 않습니다. 데이터베이스 오류의 경우 5 자리 XOPEN SQLstate 코드가 리턴됩니다. 이 메서드는 null을 반환 할 수 있습니다.
getNextException () 예외 체인의 다음 예외 개체를 가져옵니다.
printStackTrace () 현재 예외 또는 throwable을 인쇄하고 표준 오류 스트림에 대한 역 추적입니다.
printStackTrace (PrintStream s) 이 throwable 및 역 추적을 지정한 인쇄 스트림에 인쇄합니다.
printStackTrace (PrintWriter w) 이 throwable을 인쇄하고 지정한 인쇄 작성기에 대한 역 추적입니다.

Exception 객체에서 사용 가능한 정보를 활용하여 예외를 포착하고 적절하게 프로그램을 계속할 수 있습니다. 다음은 try 블록의 일반적인 형태입니다.

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces, similar to the exception clause 
   // in a PL/SQL block.
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

다음 예제 코드를 연구하여 try....catch...finally 블록.

//STEP 1. Import required packages
import java.sql.*;

public class JDBCExample {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      Statement stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

         //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end JDBCExample

이제 위의 예제를 다음과 같이 컴파일 해 보겠습니다.

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

당신이 달릴 때 JDBCExample, 문제가 없으면 다음과 같은 결과가 나오고, 그렇지 않으면 해당 오류가 포착되고 오류 메시지가 표시됩니다.

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

잘못된 데이터베이스 이름이나 잘못된 사용자 이름 또는 비밀번호를 전달하여 위의 예를 시도하고 결과를 확인하십시오.