質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Spring Boot

    493questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • MyBatis

    62questions

    MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

MyBatisによるSQLのクエリ結果が0でも処理を継続したい。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 853

karasu0318

score 16

SpringBootでWebアプリを作成しています。

MyBatisでテーブル名を順番に取得して、下記のようなSQL文(DELETE)を発行する機能を作成していますが、
クエリの結果が0になるケースもあるため、その際はその旨を示す例外が発生してしまいます。

DELETE Table where id < 10

どのようにしたら、クエリの結果が0でも後続の処理を継続できますでしょうか?

DAOクラスや、DAOクラスを@AutowirdeしてるServiceクラスにtry-catch文を入れてみましたが、
例外をキャッチできませんでした。

ご教授をお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

"DELETE Table where id < 10" ではSQL文が誤っているのではないかと思います。結果の値が0とは関係ありません。

ServiceクラスにてDAOの実行をtry~catchで囲んでいると予想されますが、Spring+Mybatisの使い方が正しければ、DAOにて発生したSQL例外ならびにMybatisからスローされる例外はキャッチできます。

もちろん、DAOにて例外を握りつぶしていないことが前提です。

ソースコードが記載されていればより詳細にわかるかも知れません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/27 01:13

    ご回答ありがとうございます。
    すいません。FROMは記載漏れでした。
    申し訳ありません。諸事情によりコードは記載できないのですが、
    チャンクモデルなので、Serviceクラスは実装していません。
    また、例外は、EmptyResultDataAccessException が発生しております。

    ItemReader csv読み込み
    ItemProcessor デ-タ加工
    ItemWriter Delete 発行

    ItemWriter時点で、例外が出ていると思いますが、上記例外を例外処理しても、
    例外発生し、処理が中断されてしまいます。

    キャンセル

  • 2017/12/27 13:10

    もし記載漏れがある場合は、質問文を訂正された方が良いでしょう。

    Serviceクラスを経由せず、他のSpring管理にある実装クラスからMybatisのSqlSession経由でSQLを実行している場合はtry~catchで例外を拾えないケースはありえないので、例外が発生している個所をデバッグモードなどを使って詳細に追わないと、問題の特定は難しいでしょう。

    MybatisからDELETEを発行する場合は、SqlSessionのdeleteメソッドを使うのが正しい方法です。これを実行すると削除した行数が返されますし、削除できなかった場合は0件なので、0が戻りますので、EmptyResultDataAccessException は本来発生しえません。

    EmptyResultDataAccessException が発生する場合、Spring/Mybatis/Mybatis-Springプラグインのバージョンによる可能性もあります。

    キャンセル

0

つFROM
クエリの結果を整数型で受け取ってれば0件が返ってくるばずですが、具体的にどんな例外が発生しますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/27 01:13

    ご回答ありがとうございます。
    すいません。FROMは記載漏れでした。
    例外は、EmptyResultDataAccessException が発生しております。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Spring Boot

    493questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • MyBatis

    62questions

    MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。