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開発では「標準の書き方」として身につけておきましょう。