- ベストアンサー
StatementクラスのexecuteQueryメソッドを使用したSQLの発行について
StatementクラスのexecuteQueryメソッドを使用したSQLの発行について教えてください。 JavaでMySQLのデータベースからデータを取得するため、 executeQueryメソッドを使用してSQLの発行を行ったのですが、select文が正常に実行されずに困っています。(where句の条件が引っかからずに困っています。) 【前提】 ・カラム「name」の値に「name(nameという文字)」が入っている状態。 ・INT型、CHAR型で定義されたカラムの値は取得できる ・VARCHAR型で定義された、カラムの値が取得できない 【状況】 VARCHAR型で定義された、カラムの値が取得できない場合というのが、java側で、 stmt.executeQuery("SELECT * from customer where name='name'") というようにSQL文を発行した場合です。 MySQLのコマンドプロンプトからダイレクトに投げた場合や、 またDBViewerを使用した場合は、Where句の「name='name'」で引っかかったデータが正常に返ってくるのですが、 Javaから発行した場合のみ「VARCHAR型で定義されているカラムの値が取れない」という状況なのです。 (考えられることとしては、SQL発行時「SELECT * from customer where name='name'」 の 「'name'」が、別の何かに変わっているのかな?(文字コードなどが関係しているのか?)など考えているのですが、解決できず困っております。) 一体どこに問題があるのでしょうか? (CHAR型、INT型のデータは正常にJava側で読めるのに、VARCHAR型の値をwhere句にした場合に限って、正常にデータ抽出できない、という点が腑に落ちないのですが・・・ SQLエラーを吐く訳ではなく、抽出条件が成立していない形なのです) 【実行環境】 ・Windows XP Pro ・eclipse3.4(all in one eclipse) ・Java1.6 ・TomCat6.0 ・MySQL5.0 (文字コード:UTF-8)
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問の内容だけですと問題箇所の特定は困難なので、原因を調べるためにはMySQLサーバが出力するログファイルの確認が必要だと思います。 MySQLサーバには要求されたSQLをログファイルに出力する機能があるはずなので、その機能を有効にすればどのようなSQL文がMySQLへ届いているのかが分かります。それを確認することで問題箇所を絞り込めるのではないでしょうか。
その他の回答 (1)
- x_jouet_x
- ベストアンサー率68% (162/236)
私のところもほぼ同じ環境で確認しましたが、VARCHAR型の値をwhere句に使用しても問題なく抽出できました。 where句に2バイト文字(全角など)を使用していれば文字コードも関係してくる可能性もありますが、そういう問題でもなさそうですね。 試しにPreparedStatementでSQLを発行してみてはいかがでしょう? 結果は同じかもしれませんが…。 後は考えられることはJDBCのバージョンでしょうか…。
お礼
ありがとうございます。 私の方も別の環境で試してみたところ、 問題なく動いたのですが、あるプロジェクトに限ってそのような状態です。 ちょっと色々とためしてみます(汗) どうもです。
補足
この質問についてですが お知恵を貸していただいてすみません^^; あれから、いろいろ試していったのですが、 「eclipseを終了させた後、eclipse機能の“リフレッシュ(ショートカットキーF5)”を使用したところ、後に問題なく動作するようになりました。」 「eclipse内容とワークスペース内容の同期が取れてなかった」だけなのかもしれませんが・・・ んー なんだったんですかね(--; 現状は問題なく動作している状況です。(苦笑) どうも、ありがとうございました。
お礼
ありがとうございます。 >MySQLサーバが出力するログファイルの確認が必要だと思います。 そのようなものがあるのですね(驚) 問題箇所の絞込んで、 また確認していこうと思います。 どうもありがとうございます。 なんだか解決に繋がりそうな気がしてきました。
補足
この質問についてですが お知恵を貸していただいてすみません^^; あれから、いろいろ試していったのですが、 「eclipseを終了させた後、eclipse機能の“リフレッシュ(ショートカットキーF5)”を使用したところ、後に問題なく動作するようになりました。」 MySQLのログの確認方法については まだわかっていませんので、また調べてみたいと思います。 どうも、ありがとうございました。