JavaでSQL接続を扱うとき、多くの初心者が陥るのが「リソースの解放忘れ」や「例外処理の煩雑さ」です。
特に Connection, PreparedStatement, ResultSet の3つは明示的に close() しないと、メモリリークや接続枯渇の原因になります。
この記事では、そんな問題をtry-with-resources構文でスマートに解決する方法を紹介します。
🧱 try-with-resourcesとは?
Java 7以降で導入された構文で、AutoCloseable インターフェースを実装したオブジェクトを
自動的にクローズしてくれる仕組みです。
✅ 従来のコード例(Java 6以前)
🚀 try-with-resourcesを使った改良版
🧠 複数リソースを扱うときのポイント
try(...) の中で複数のリソースを「セミコロン ;」で区切って宣言できます。
最後に開いたリソース (ResultSet) から順に自動クローズされます(LIFO順)。
⚙️ try-with-resourcesとカスタムクラス
自作クラスでも AutoCloseable を実装すれば、
try-with-resources構文で安全に自動クローズが可能です。
⚠️ 注意点:例外の隠蔽に注意
もし try 内と close() 内の両方で例外が発生した場合、try 内の例外が優先され、close() の例外は「抑制された例外」として記録されます。
🔍 まとめ
| ポイント | 内容 |
|---|---|
| 構文 | try(リソース宣言){ ... } |
| バージョン | Java 7以降 |
| 対応型 | AutoCloseableを実装する全クラス |
| 主な利点 | コード簡略化・例外安全性・リソースリーク防止 |
💬 おわりに
try-with-resources は見た目以上に強力です。
「リソース管理を明示的に書かない」だけで、コードの信頼性と保守性が大幅に向上します。
特にSQL接続まわりでは、この構文を使わない理由がないほどの必須テクニックです。
今後のJava開発では「標準の書き方」として身につけておきましょう。
