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

JDBC例外処理(SQLException)

例外処理は、例えばプログラムで定義されたエラーなどの例外状況を制御された方法で処理することを許可します。

異常が発生した場合、異常が発生します。この単語を投げると、現在のプログラムの実行が停止し、コントロールが最も近い適切なcatch子句にリダイレクトされます。適切なcatch子句が存在しない場合、プログラムの実行が終了します。

JDBC例外処理はJava例外処理と非常に似ていますが、JDBCの場合、最もよく処理する例外は java.sql.SQLException.

SQLExceptionメソッド

ドライバーとデータベースの両方でSQLExceptionが発生する可能性があります。このような例外が発生した場合、catch子句にSQLExceptionタイプのオブジェクトが渡されます。

渡されたSQLExceptionオブジェクトには、例外に関する情報を取得するために使用できる他のメソッドがあります-

メソッド説明
getErrorCode( )

例外に関連付けられたエラーコードを取得します。

getMessage( )

エラーのJDBCドライバーのエラーメッセージを取得します(ドライバーが処理する場合)または、データベースエラーのOracleエラーコードとメッセージを取得します。

getSQLState( )

XOPEN SQLstate文字列を取得します。JDBCドライバーのエラーの場合、このメソッドは有用な情報を返しません。データベースエラーの場合、5桁のxopensqlstateコードを返します。このメソッドはnullを返すこともあります。

getNextException( )

例外チェーンの次のExceptionオブジェクトを取得します。

printStackTrace( )

現在の例外または呼び出し可能な例外を印刷し、そのスタックトレースを標準エラーストリームに戻します。

printStackTrace(PrintStream s)

このスロー可能なオブジェクトとそのスタックトレースを指定された印刷ストリームに印刷します。

printStackTrace(PrintWriter w)

この一時的なファイルを印刷し、指定された印刷ライターに戻します。

Exceptionオブジェクトが提供する情報を利用して、例外をキャッチし、プログラムの適切な実行を続けることができます。これはtryブロックの一般的な形式です-

try {
   // あなたの例外コードは、これらの大括弧の間にあります!!!
}
catch(Exception ex) {
   // あなたの例外処理コードは、これらの間にあります 
   // 大括弧、例外子句に似ています 
   // 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("データベースに接続中...");
      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("さようなら!");
}//mainを終了します
}//JDBCExampleを終了します

今、上記の例を以下のようにコンパイルしましょう:

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

実行時JDBCExample、問題がなければ以下の結果が生成されます。それがなければ、適切なエラーメッセージがキャッチされ表示されます。-

C:\>java JDBCExample
データベースに接続しています...
ステートメントを作成しています...
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:\>

誤ったデータベース名やユーザー名、パスワードを渡して上記の例を試み、結果を確認してください。