Java上級

上級 Javaで学ぶ例外設計|練習問題編

導入

例外設計は、プログラムの信頼性や保守性を高めるために不可欠な要素です。特に、Javaにおいては例外処理の仕組みが充実しており、適切な設計が求められます。今回は、実際の業務で遭遇しやすい「データベース接続時の例外処理」をテーマに、具体的なコード例とその設計思想を掘り下げます。

教科書レベルの解説(例外設計)

重要な概念の整理

例外設計では、例外の種類や発生する可能性を事前に把握し、適切な処理を行うことが重要です。特に、外部リソースとの接続に関連する例外は、予期せぬ障害を引き起こすことが多いため、注意が必要です。データベース接続時には、接続失敗やタイムアウト、SQLの実行エラーなど、さまざまな例外が発生する可能性があります。

コード例(Java)


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

public class DatabaseConnector {
    private String url;
    private String user;
    private String password;

    public DatabaseConnector(String url, String user, String password) {
        this.url = url;
        this.user = user;
        this.password = password;
    }

    public Connection connect() throws CustomDatabaseException {
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            throw new CustomDatabaseException("データベース接続に失敗しました", e);
        }
    }
}

class CustomDatabaseException extends Exception {
    public CustomDatabaseException(String message, Throwable cause) {
        super(message, cause);
    }
}

コードの行ごとの解説

  1. import文: 必要なライブラリをインポートします。特にSQLExceptionはデータベース関連の例外を扱うために必要です。
  2. DatabaseConnectorクラス: データベース接続のためのクラスを定義します。接続情報を持つコンストラクタがあります。
  3. connectメソッド: データベースへの接続を試みます。接続に失敗した場合は、CustomDatabaseExceptionをスローします。
  4. CustomDatabaseExceptionクラス: 独自の例外クラスを作成し、エラーメッセージと原因を保持します。

練習問題編

以下の練習問題に挑戦し、例外設計の理解を深めましょう。

  1. 問題1: DatabaseConnectorクラスに、接続が成功した場合のメッセージを表示する機能を追加してください。
  2. 問題2: CustomDatabaseExceptionに、エラー発生時のスタックトレースをログに記録する機能を追加してください。
  3. 問題3: connectメソッドにタイムアウトを設定する機能を追加し、接続がタイムアウトした場合に適切な例外をスローしてください。

まとめ

  • データベース接続時の例外処理は、業務アプリケーションにおいて非常に重要です。
  • 独自の例外クラスを作成することで、より具体的なエラーハンドリングが可能になります。
  • 例外発生時の情報を適切に記録することは、後のトラブルシューティングに役立ちます。