0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 Vol.10.3:DB接続クラスの共通化とドライバ設計

Last updated at Posted at 2025-05-25

DTO / DAO 設計に続き、今回はアプリケーションの土台となる「DB接続の共通化」について解説します。
これにより、重複をなくし、安全・効率的にDB接続を扱える仕組みが手に入ります。


🔰 1. なぜ「DB接続共通クラス」が必要なのか?

JDBC を用いた DB 操作では、以下のような接続コードが頻繁に登場します:

Connection conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);

これを毎回書いていると:

  • 冗長で重複が多くなる

  • 接続先が変わった時の修正が大変

  • リソース解放を忘れがち

→ 解決するために、共通の接続ユーティリティクラスを導入します。


🧩 2. DB接続クラスの基本実装(DBUtil.java)

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/mydb";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver"); // JDBCドライバのロード
        } catch (ClassNotFoundException e) {
            throw new RuntimeException("JDBCドライバのロードに失敗", e);
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

✅ 解説ポイント

項目 説明
staticブロック アプリ起動時に JDBC ドライバを一度だけロード
getConnection() 呼び出し元から簡潔に接続取得できるように共通化

✅ 3. DAOから使ってみる

try (Connection conn = DBUtil.getConnection();
     PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users");
     ResultSet rs = stmt.executeQuery()) {

    while (rs.next()) {
        User user = UserMapper.map(rs);
        ...
    }

} catch (SQLException e) {
    e.printStackTrace();
}

DBUtil.getConnection() により、接続取得が一行で完了!


🚀 4. try-with-resources と AutoCloseable のおさらい

💡 Java 7以降で導入された便利機能

try (Connection conn = ...) {
    // 通常の処理
}
// → 自動で close() される


✅ 対象条件:

  • AutoCloseable インタフェースを実装したクラス

    • Connection

    • PreparedStatement

    • ResultSet

    • BufferedReader など

✅ 解放の順番:

  • 開いた順の逆(LIFO)

  • ResultSetPreparedStatementConnection の順に close


🛠 5. 応用:プロパティファイルでDB設定を切り替え可能にする

将来的には以下のような構成で接続情報を外部化することもできます:

db.properties

db.url=jdbc:mysql://localhost:3306/mydb
db.user=root
db.password=password

→ Java側で Properties クラスを使って読み込み、柔軟な切り替えが可能に。


📝 まとめ

項目 ポイント
✅ 再利用性 すべてのDAOで共通の接続取得処理が使える
✅ 保守性 接続情報の変更が1箇所で済む
✅ 安全性 try-with-resourcesによりリソースリークを防止

🔜 次回予告(Vol.10.4)

📘 Vol.10.4では、DAO / DTO / DB接続クラスと Struts2 の Action クラスをどう連携させるか? に焦点を当てて解説します!


✨ シリーズまとめ(Vol.10.x バリデーション編)


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?