- - PR -
JavaTIPS 「データベースに接続したら後始末は確実に」に関して
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-26 14:36
訂正後のソースが
となりましたね。(部分抜粋) 確かに漏れはなくなりましたが…
と例示されているのにスルーされたのでしょうか。 そして catch(SQLException e){ System.out.println(e); } に対する突っ込みもスルーなのですね。 本文には手が入っていない様子ですから後始末の際のfinally節内での try〜catchの際の注意事項などは注意喚起する気がないということでしょうか。 | ||||||||||||||||
|
投稿日時: 2006-12-26 17:21
おおよそmioさんの例通りだと思いますよ?
それに、mioさんの例どおりだと例外を握りつぶすことになるので、 その辺をふまえての修正かと思います。 例外処理がSystem.out.println(e)なのは、私も変だと思いますね。 せめてe.printStackTrace()なら…なんか他の方と意見がかぶりますが。 ただ、そこまで突っ込むなら、「例外処理は確実にログへ」のような 別のTIPSにまとめた方がいいと思いました。 例外処理は、ここ以外でもときおり議論になりますからね。 | ||||||||||||||||
|
投稿日時: 2006-12-26 17:46
どういう意味で言っておられます? 「mio氏のコードだとclose()の例外を握りつぶすので、 記事のコードはそうならないように修正されている」 という意味でしょうか? 記事のコードも例外を握りつぶしているので「修正」とは言えません。 また、try〜catchがネストする記述になっていますが、 このネストは無駄なのでこの点も「修正」とは言えません。 mio氏のように併記する記述が一般的だと思われます。 mio氏のコードではcatch節内が空なのをSystem.out.println()にしたことを 指して「修正」と言っておられるのでしょうか? 上位の例外を生かすために敢えてfinally内で発生する例外を握りつぶす という話は、006-12-25 21:49の私の発言および、 2006-12-26 07:34のかつのり氏の発言でされていますよね。 ただし、意図して例外を握りつぶすというのは特殊な例で、 今回の話題であるConnectionのclose()や、I/OのStreamのclose()が その具体例だ、という話でした。 そして、記事にはそのあたりの事情に対する説明がないのですね、 というのが私の指摘でした。 一番外の、メインのtry〜catchについて言えば、koe氏のおっしゃる ログ出力の話題へと繋がるのですが、finally節内でのclose()の try〜catchでは事情が異なるので分けて議論しなければなりませんね。 | ||||||||||||||||
|
投稿日時: 2006-12-26 19:19
うっかりしてました。コードを改めてみたらおっしゃるとおり。 stmt.close()で例外が発生するとcon.close()しないで終わりますね。 申し訳ない。 | ||||||||||||||||
|
投稿日時: 2006-12-26 21:52
議論をさまたげるわけではありませんが、提案しているのに直してくれないのか、
という方向に行ってしまうのは残念ですので、ここで引用。
ですので、こちらの問い合わせてみてはいかがでしょうか? | ||||||||||||||||
|
投稿日時: 2006-12-26 22:05
しかし、
これは酷い。 記事の対象が初心者だと思うのですが、 大体初心者ってサンプルコードをコピペで使うんですよね。 なので、あまりプログラムの本質ではない部分ではあるのですが、 こういうところで手を抜くべきではないかと。 丁寧に書く気がなくても、せめて
みたいに省略するのがいいと思うんですよね。 | ||||||||||||||||
|
投稿日時: 2006-12-27 09:53
ohirata氏こと@IT編集部の記事編集担当の平田氏が
こちらのスレッドで返答されていたのでそのまま話が続いていますが 別途依頼をだすべきなのでしょうか? 1.サンプルコードが正しく後始末できていないものだった (現時点で一応は漏れることはないが綺麗なサンプルではない) 2.メインのtry-catch-finallyのcatch節の処理について なんらのコメントもない。該当サンプルコードでは省略しているが 本来はエラー時の処理を記述する必要がある旨を明示すべきではないか 3.メインのfinally節の中でのclose()に対してのtry-catchでは 外側のtry-catch-finally節での処理を生かすために 遭えて例外を握りつぶすが、その特殊事情についての説明がない というのが今のところの指摘内容ですね。 編集部側の事情は我々にはよく分かりませんが、 不適切なサンプルや記事が掲載されたままでは 掲載側、参照する側、双方に不利益があるので どうにかして欲しいと願っています。 | ||||||||||||||||
|
投稿日時: 2006-12-27 10:42
私も編集部側の事情はわかりません。
今回、返答された件については、特例と思った方が良くないですかね? このようなサンプルの方がふさわしいよね、という議論であれば、 このスレッドはふさわしいとおもうのですが、同時に編集部側への要望を ここでやる、というのはどうなんだろうか?と思う訳です。 まさか、運営側に掲示板を全てチェックしろ、とはいえないでしょうし。 # 運営側に立ってみれば分かりますよね。 この掲示板のユーザ間でのやり取りでもそうですが、窓口があるのであれば、 そこへ問い合わせるのがスジとおもいますので、修正の依頼については 前述の窓口へ問い合わせるのがよろしいかとおもいますよ。 |