Java & MySQL - 異常處理



異常處理允許您以受控的方式處理異常情況,例如程式定義的錯誤。

當發生異常情況時,會丟擲一個異常。術語“丟擲”表示當前程式執行停止,並且控制權重定向到最近適用的 catch 子句。如果不存在適用的 catch 子句,則程式的執行結束。

JDBC 異常處理與 Java 異常處理非常相似,但對於 JDBC 而言,您將處理的最常見異常是 java.sql.SQLException。

SQLException 方法

SQLException 既可能發生在驅動程式中,也可能發生在資料庫中。當發生此類異常時,型別為 SQLException 的物件將傳遞到 catch 子句。

傳遞的 SQLException 物件具有以下可用於檢索有關異常的其他資訊的方法:

方法 描述
getErrorCode( ) 獲取與異常關聯的錯誤編號。
getMessage( ) 獲取 JDBC 驅動程式的錯誤訊息(由驅動程式處理的錯誤),或獲取 Oracle 錯誤編號和資料庫錯誤訊息。
getSQLState( ) 獲取 XOPEN SQLstate 字串。對於 JDBC 驅動程式錯誤,此方法不會返回任何有用的資訊。對於資料庫錯誤,將返回五位數的 XOPEN SQLstate 程式碼。此方法可能會返回 null。
getNextException( ) 獲取異常鏈中的下一個 Exception 物件。
printStackTrace( ) 將當前異常或可丟擲物件及其回溯列印到標準錯誤流。
printStackTrace(PrintStream s) 將此可丟擲物件及其回溯列印到您指定的列印流。
printStackTrace(PrintWriter w) 將此可丟擲物件及其回溯列印到您指定的列印寫入器。

透過利用從 Exception 物件中獲得的資訊,您可以捕獲異常並適當地繼續您的程式。以下是 try 塊的一般形式:

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

示例

學習以下示例程式碼以瞭解 try....catch...finally 塊的用法。

此程式碼是基於上一章中完成的環境和資料庫設定編寫的。

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

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

   public static void main(String[] args) {
      // Open a connection
      try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         CallableStatement stmt = conn.prepareCall(QUERY);
      ) {		      
         // Bind values into the parameters.
         stmt.setInt(1, 1);  // This would set ID
         // Because second parameter is OUT so register it
         stmt.registerOutParameter(2, java.sql.Types.VARCHAR);
         //Use execute method to run stored procedure.
         System.out.println("Executing stored procedure..." );
         stmt.execute();
         //Retrieve employee name with getXXX method
         String empName = stmt.getString(2);
         System.out.println("Emp Name with ID: 1 is " + empName);
      } catch (SQLException e) {
         e.printStackTrace();
      } 
   }
}

現在讓我們按如下方式編譯上述示例:

C:\>javac TestApplication.java
C:\>

當您執行 TestApplication 時,如果沒有任何問題,它會產生以下結果,否則相應的錯誤會被捕獲並顯示錯誤訊息:

C:\>java TestApplication
Executing stored procedure...
Emp Name with ID: 1 is Zara
C:\>
廣告

© . All rights reserved.