• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Java+ストアドプロシージャでResultSetが返ってきません)

JavaストアドプロシージャでResultSetが返ってこない

このQ&Aのポイント
  • Java+ストアドプロシージャでResultSetが返ってきません
  • idを送りその値を元にSELECTを行い、もしそのidに該当するデータがなければ空行を追加し、その行を返すストアドプロシージャに接続したいのですが、空行追加の際、空行追加後にその行が返ってきません。
  • @count=0の場合、SELECT文を実行しているのか調べたくて戻り値を設定し、どの段階まで動いているのか調べようとしたのですが戻り値を設定すると「インデックス 2 は範囲外です。」と出てしまいます。色々なページを探してみたのですが、それらしい文章を見つけることができなかった為、先輩方ご教授願います。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

SQL Server 2008ですか。。 SQL Serverでは、すべてのステートメントについて「xx行更新しました」というメッセージが返されます。 呼び出し元ではそれぞれを戻りと認識してしまうので、@count=0のときは、最初の2つ(INSERT)のResultSetはNULLです。 これらのメッセージを抑止するために、ストアドでは「SET NOCOUNT ON」と先頭に切るのが一般的です。 ただ、Javaで試したわけでないので、もし効かなければ、ResultSetがNULLでなくなるまでgetMoreResultsを繰り返す必要があります。

lovedrop10
質問者

お礼

ありがとうございます!解決しましたっ そういうことだったんですね・・・。きちんと結果も得ることができて、自分の無知さを思い知りました^^; 本当にありがとうございました。

その他の回答 (2)

  • bleis
  • ベストアンサー率68% (11/16)
回答No.3

そういうことではなくて、execute の戻り値として false が返ってきているんじゃないかな?ということです。 @count が 0 だと、INSERTが実行されるため、execute の戻り値として false が返ってきてもおかしくはありませんし。 APIリファレンスには、 「最初の結果が ResultSet オブジェクトの場合は true。更新カウントであるか、または結果がない場合は false」 とありますので、execute の戻り値のチェックは必須ですよ。

  • bleis
  • ベストアンサー率68% (11/16)
回答No.1

まずはAPIリファレンスを読みましょう。 http://www.j2ee.me/javase/ja/6/docs/ja/api/java/sql/PreparedStatement.html#execute()

lovedrop10
質問者

補足

えっと、恐らくなのですが execute()ではなくexecuteQuery()を使え ということでしょうか? はじめはexecuteQueryを使用していたのですが、こちらですとexecuteQueryを実行してすぐにエラーログが出てしまい、原因を究明することができませんでしたので、一度executeしてからgetResultSetをするという手間を踏んでいるのです。 判りづらいソースで申し訳ありません・・・

関連するQ&A