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

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

ただいまの
回答率

90.48%

  • Java

    14086questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

prepareStatementの実行結果が取得できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,805

hibiyami

score 2

いつもお世話になっております。
下記の処理でSQLを実行した後、テーブルからレコードが一件も取得できない
状態で困っています。

デバッグ機能にてselectSQL変数のSQL文、
バインド変数としてselectSQLへ渡すparametersの値を確認し、
実行されるであろうSQLを実行し、結果として1件取得できることを確認しています。

PreparedStatement prepareStatement = getConnection().prepareStatement(selectSQL);
ResultSet resultSet = null;
for (int i = 0; i < parameters.size(); i++)
 {
     prepareStatement.setString(i + 1, (String) parameters.get(i));
 }
      resultSet = prepareStatement.executeQuery();
      while (resultSet.next()) {
   ・・・・(処理)
      }

prepareStatement.setString処理でsetしている値、
executeQery処理で実行しているSQL文の確認方法はありましたら、
教えて頂きたいです。
よろしくお願いします。

<2015/03/10追記>
自社の開発ツールを使うことができたので、SQLトレースを行い、
実行しているSQLを特定することができました。

しかし、
  resultSet = prepareStatement.executeQuery(); 
上記のresultSetに実行結果を代入しているところをデバッグしたところ、
レコード件数が0件でした。
実行しているSQLをSQLPLUSにて実行したところ、1件取れています。
直前でレコードが取得できるはずのSQLを発行しているにも関わらず、
結果を代入する処理で代入できないことなどあるのでしょうか???

>argiusさん
フリーのツールでそういったものもあるんですね!
ご紹介いただき、ありがとうございました。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

使ったことありませんが、こういうツールがあります。
jdbcdebugger (JDBC Debug)


(追記)
OracleJDBCの場合、条件列がCHARの場合に桁数分のスペースを埋めないとヒットしない問題があります。


DBMSやプラットフォーム、Javaのバージョンによって固有の問題が発生する可能性がありますので、質問の際は可能な限り再現環境について記載することをお勧めします。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/03/11 16:48

    WHERE句の条件となっている取得先テーブルの列の定義がchar(2)、
    値が'0 '(ゼロ・スペース)だったため、SQLPLUSでの実行では取得でき、
    OracleJDBCからの実行ではwhere column = '0'では取得できないということが
    わかりました。
    arugiusさんのご指摘の通りでした。
    ありがとうございました!

    キャンセル

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

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

関連した質問

  • 解決済

    Javaにて、C#で実装されている関数の代替

    C#からJavaへマイグレーションを行っているのですが、 C#で実装されている関数をJavaで代替する方法が分からなく、 ご教授頂ければと思います。 よろしければ、すべてJava

  • 解決済

    Operation not allowed after ResultSet closed

    チャットを作ろうとしています。 jspで新規作成用のフォームを作っていてServletでデータベースの処理をしようとしているのですがうまくいきません。 以下のコードを使っています。

  • 解決済

    Java/MySQL COUNT関数を使った際に取得が0になる

    前提・実現したいこと Javaで住所録を作っています。   名字の最初の一文字であ行~わ行に分け、さらに「あ行○件、か行○件~」と件数の表示をしたいです。 発生している問

  • 解決済

    Mysql:SELECT文のWHERE句に変数を当てはめるには

    質問です。 タイトルの通りですがSELECT文のWHERE句に変数を当てはめるにはどうすれば良いでしょうか。 現在Mysqlの情報を一覧で表示し、そこからレコードの更新などを

  • 解決済

    Servlet.service() for servlet [servlet.loginservle...

    前提・実現したいこと 書籍貸出システムを作成しているのですが、  ログインしたユーザが借りている書籍だけ表示させたいのです。 すかしSQL文が間違っていてエラーが出てしまいま

  • 解決済

    JSPにmysqlのデータが表示されない

    前提・実現したいこと 書籍貸出システムを作成しているのですが、  ログインしたユーザが借りている書籍だけ表示させたいです。 しかし、データが表示されません。 エラーでもない

  • 解決済

    After end of result setというエラー

    前提・実現したいこと ログイン画面でdelete_flagが1ならログインさせず、 それ以外ならさせるという処理を組み立てています。 しかし以下のようなエラーが出て困っていま

  • 解決済

    検索条件をViewで入力し、Java側でTIME型のデータベース参照をしたいです。

    前提・実現したいこと SpringMVC,PostgreSQLを用いて、 開始時間と終了時間の間のデータをデータベースから拾ってくる。 結果をViewで表示したいです。 検

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

  • Java

    14086questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。