• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:なぜtry{}catch(){}の中?)

try{}catch(){}の中にトランザクションスタートを入れる理由

このQ&Aのポイント
  • try{}catch(){}の中にトランザクションスタートを入れる理由について説明します。
  • try{}catch(){}の中にトランザクションスタートを入れることで、例外が発生した場合にロールバックが行われ、トランザクション内の処理が全てキャンセルされます。
  • このようにすることで、データベースの更新処理が一貫性を持って行われることが保証されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.3

なぜ中なのかは私も説明できません。 そのためか、私は外に書く派です。 トランザクションスタートに失敗した場合はロールバックする必要がないからです。 トランザクションスタートしてないのにロールバックするとエラーになる言語があるのでそのせいかも。 もしトランザクションスタートで例外キャッチするとしたら、こんな書き方をしたくなります。 try{ トランザクションスタート try{ 処理 コミット }catch(Exception e){ ロールバック } }catch(Exception e){ }

WDY
質問者

お礼

ご回答ありがとうございます。 >トランザクションスタートしてないのにロールバックするとエラーになる言語があるので なるほど、言われてみると(エラーは厳しいですね)警告位は出てもおかしくなさそうな気がします。 何となく中に入れて書くものと思ってしまっているのが良くなかったのかもしれません。 ちゃんと意味を考えてtry{}catch(){}書く様にしたいと思います。

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.4

トランザクションスタートは宣言をしているだけでRDBMSからエラーが返ってこない場合(返ってこないRDBMS)があるので入れない人が居るのかもしれませんね。 トランザクションスタートがエラーになるのはDBへのコネクションが確立できてない場合でしょうから、そのエラーはDB接続処理のところでキャッチしていると言う前提で処理しているのでしょうね。 tryの中に入れてもいいですか、トランザクションスタートのエラーをキャッチした場合はロールバックしてもロールバックもエラーになるはずです。 トランザクションスタートがエラーになったらDBへの再接続処理をするとか、システム全体の動作に影響する可能性があるので別のエラー画面を出すと言った配慮が必要だと思います。

WDY
質問者

お礼

ご回答ありがとうございます。 >トランザクションスタートがエラーになるのはDBへのコネクションが確立できてない場合でしょうから、 あれ?トランザクション使い切った場合、トランザクションスタートはエラーになりますが DBコネクションも行えなくなりましたっけ? DBコネクションをしてSelectは行えたと思いますが私の勘違いかな? >トランザクションスタートのエラーをキャッチした場合はロールバックしてもロールバックもエラーになるはずです。 トランザクションスタート時 DBのトランザクションスタートは動いているのにExceptionが発生する事は無いのでしょうか?

  • retorofan
  • ベストアンサー率34% (435/1276)
回答No.2

エラーハンドリングの 「try…catch”構文」だから。 その中に入れなくては、 「エラーハンドリングにならないでしょう?」って話。

WDY
質問者

お礼

ご回答ありがとうございます。 >「エラーハンドリングにならないでしょう?」って話。 私もそう思いますが。 おそらくそれを言ったら全ての処理にtry{}catch{}を入れるべきと言われるのが予想されます。

回答No.1

こんにちは😊💫 なぜトランザクションスタートをtryブロックの中に入れるべきか、についてご質問いただきましたね!😄🌟🎉 まず、トランザクションスタートをtryブロックの中に入れる理由は、トランザクション開始時にもエラーが発生する可能性があるからです🌀🤔 tryブロック内でトランザクションスタートを行うと、もしトランザクション開始時にエラーが発生した場合、catchブロックに処理が移ります🌠👌 そのため、トランザクションスタートに問題が発生した際に、適切な例外処理が行われるのです😊🌈 それに対して、トランザクションスタートをtryブロックの外に置く場合、もしトランザクション開始時にエラーが発生しても、catchブロックに処理が移らず、適切な例外処理が行われない可能性があります💦😰 この理由から、トランザクションスタートはtryブロックの中に入れることが推奨されています✨😃👍 この回答が解決の一助となれば幸いです😊💕

WDY
質問者

補足

ご回答ありがとうございます。 DBが動いていなかったりトランザクション数のオーバー等にて エラーが発生した際にcatchされないのは分かるのですが もしかして トランザクションを掴むだけ掴んでエラーが発生する事があるのでしょうか?

関連するQ&A

専門家に質問してみよう