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開発では「標準の書き方」として身につけておきましょう。
Oracle Databaseを利用していると、多くの人が一度は遭遇するエラーが 「ORA-01017: invalid username/password; logon denied」 です。
SQL*PlusやSQL Developerでのログイン、あるいはアプリケーションの起動時に表示され、作業がストップしてしまう厄介なエラーです。
本記事では、このエラーの 原因と解決方法を体系的に整理 し、実際の現場で役立つ対応手順を紹介します。

ORA-01017エラーとは?
このエラーは、Oracleが「入力されたユーザー名またはパスワードが正しくないため、ログオンを拒否した」と判断した際に表示されます。
主に以下のようなシーンで発生します。
単純にパスワードを打ち間違えただけでも発生しますが、実際の現場ではもっと複雑な原因が潜んでいることもあります。
ORA-01017が発生する主な原因
1. ユーザー名やパスワードの誤り
2. アカウントがロックされている/パスワード期限切れ
Oracleではセキュリティのため、一定回数の失敗でアカウントがロックされたり、パスワードに有効期限が設定されている場合があります。
3. 認証方式の違い
4. 接続先の設定ミス
5. 外部認証の影響
ORA-01017エラーの解決方法
1. ユーザー名・パスワードを正確に確認する
まずは基本中の基本。
2. アカウントの状態を確認する
管理者ユーザーで以下を実行します。
3. 認証方式を見直す
ユーザーごとのパスワードバージョンを確認:
|
|
SELECT username, password_versions FROM dba_users; |
4. 接続文字列を確認する
誤接続が多いポイントです。
5. 外部認証を確認する
現場でのチェックリスト
-
入力の大文字・小文字を再確認する
-
コピペではなく手入力で試す
-
DBA_USERS を確認してアカウント状態を把握
-
クライアントやJDBCドライバを最新化
-
接続先(サービス名/ホスト名)が正しいか見直す
-
OS認証やパスワードファイルに問題がないか確認
まとめ
「ORA-01017」は、単純に「パスワード間違い」と片付けがちですが、実際には アカウントロック、認証方式、接続先設定の誤り など複数の要因が絡むことがあります。
対処の基本ステップは以下の通りです。
これを押さえておけば、大半のケースで迅速に問題を解決できます。
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。