- - PR -
JavaTIPS 「データベースに接続したら後始末は確実に」に関して
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-20 10:06
あまりよろしくないコードだと思います。
try { Connection conn = DriverManager.getConnection("jdbc:odbc:MyTest"); try { Statement stmt = conn.createStatement(); try { // } finally { stmt.close(); } } finally { conn.close(); } } catch(SQLException e) {System.out.prinlnt(e);} あのサンプルではこう書くべきではなかったでしょうか? せめて、nullで初期化しているなら、conn生成時に例外発生した場合 stmtがnullになる可能性があるのでcloseの際のnullチェックだけは 行ってほしかった。 | ||||||||
|
投稿日時: 2006-12-20 10:36
私の場合、NullObjectパターンの適用を検討します。
nullではなく、このNullObjectで初期化します。 そうすると、nullチェックが無くなり、コードがすっきりーーー でも正直、高機能なフレームワークを使用して場合は、 中の人がうまくやってくれるだろうから、あまり気にする必要は無いような気がする。 [ メッセージ編集済み 編集者: かずくん 編集日時 2006-12-20 10:38 ] | ||||||||
|
投稿日時: 2006-12-20 11:12
私ならあまり難しいことは考えずにこう書いてしまいますが。
リソース利用イディオムの基本ですよね? | ||||||||
|
投稿日時: 2006-12-25 20:26
@IT編集部の記事編集を担当しております平田と申します。
いつも@ITをご覧頂き、誠にありがとうございます。 ご指摘頂いた点ですが、全くおっしゃるとおりでしたので、 早急に対応いたしました。 大変お手数ではございますが、訂正した記事をご確認頂ければ幸いです。 http://www.atmarkit.co.jp/fjava/javatips/166java051.html 今後とも@ITをどうぞよろしくお願いいたします。 また、今回のように@IT内の記事でWebページがうまく表示されない、間違いを見つけた、 もしくは記事の内容に疑問がある、こんな記事が読みたい、記事を書いてみたい、 などについては編集部(info@atmarkit.co.jp)までお問い合わせください。 | ||||||||
|
投稿日時: 2006-12-25 21:26
んー…。
かなー。 | ||||||||
|
投稿日時: 2006-12-25 21:49
「例外発生時の後始末を含む正しいプログラムの例」が
ですか。これだとstmt.colse()でSQLExceptionが発生するケースで conn.close()が漏れるんですよね。 例外時の処理フローを正しく理解して「finallyを用いて万全のロジックを」 という趣旨の記事のコードがこれでは笑い話にしかなりませんよ。 ちゃんとソースレビューしてるのでしょうか…。 また、気になった点としてはSQLを処理する場合の例として SQLExceptionをcatchした部分が省略されている旨を 記述しないのはよくないのではないでしょうか。 メインのSQLExceptionのcatch節ではちゃんと例外処理を記述すべきだけど、 finallyの中のSQLExceptionのcatch節は例外が起きても潰しているんだ、 ということがこの例示から分かるとは思えないので そのまま真似してSQLExceptionはSystem.out.printlnするというコードが 氾濫しないことを祈るばかりです。 (せめてe.printStackTrace()なら…いやいやいや。そうではなく。) 実務のコードではSQLExceptionは上位にthrowしてまとめて処理することが多いかな。 実際、finally節内で例外が出た場合の挙動を説明しようとした場合、 話が難しくなるのですが、ちゃんと理解しないと例外は潰しちゃいけない という原則がおざなりになるのではないかと思います。 SQL使用時のfinally節でメインのtry〜finally節での例外を生かすために行う 例外潰しは数少ない例外ですからねぇ。 記事を書く側としては触れたくない話題なのかもしれませんが。 | ||||||||
|
投稿日時: 2006-12-26 07:34
>nagiseさん
確かに上位例外を活かすために後始末処理の例外を握りつぶすのは、 よくあることだと思うのですが、確かに扱いが難しいですよね。 後始末処理なんかで発生した例外の扱いについては、 アプリケーションの設計のポリシーにかかわる部分でもあるので、 一概に何が正しいとは言い切れないとは思いますね。 (うーん、本当に難しいっす) よくありそうなのがIOExceptionとかSQLExceptionとかですが、 IOExceptionsとかSQLExceptionsみたいな例外クラスをつくって 例外コレクション例外を作ると便利かも。 | ||||||||
|
投稿日時: 2006-12-26 14:06
@IT編集部の記事編集を担当しております平田と申します。
いつも@ITをご覧頂き、誠にありがとうございます。 ご指摘頂いた点ですが、再度新しいソースコードの 画像を作成し、差し替えさせていただきました。 大変お手数ではございますが、再度訂正した記事をご確認頂ければ幸いです。 http://www.atmarkit.co.jp/fjava/javatips/166java051.html 今後とも@ITをどうぞよろしくお願いいたします。 |
1|2|3
次のページへ»