![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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)
No.2ベストアンサー
- 回答日時:
質問の内容だけですと問題箇所の特定は困難なので、原因を調べるためにはMySQLサーバが出力するログファイルの確認が必要だと思います。
MySQLサーバには要求されたSQLをログファイルに出力する機能があるはずなので、その機能を有効にすればどのようなSQL文がMySQLへ届いているのかが分かります。それを確認することで問題箇所を絞り込めるのではないでしょうか。
この回答への補足
この質問についてですが
お知恵を貸していただいてすみません^^;
あれから、いろいろ試していったのですが、
「eclipseを終了させた後、eclipse機能の“リフレッシュ(ショートカットキーF5)”を使用したところ、後に問題なく動作するようになりました。」
MySQLのログの確認方法については
まだわかっていませんので、また調べてみたいと思います。
どうも、ありがとうございました。
ありがとうございます。
>MySQLサーバが出力するログファイルの確認が必要だと思います。
そのようなものがあるのですね(驚)
問題箇所の絞込んで、
また確認していこうと思います。
どうもありがとうございます。
なんだか解決に繋がりそうな気がしてきました。
No.1
- 回答日時:
私のところもほぼ同じ環境で確認しましたが、VARCHAR型の値をwhere句に使用しても問題なく抽出できました。
where句に2バイト文字(全角など)を使用していれば文字コードも関係してくる可能性もありますが、そういう問題でもなさそうですね。
試しにPreparedStatementでSQLを発行してみてはいかがでしょう?
結果は同じかもしれませんが…。
後は考えられることはJDBCのバージョンでしょうか…。
この回答への補足
この質問についてですが
お知恵を貸していただいてすみません^^;
あれから、いろいろ試していったのですが、
「eclipseを終了させた後、eclipse機能の“リフレッシュ(ショートカットキーF5)”を使用したところ、後に問題なく動作するようになりました。」
「eclipse内容とワークスペース内容の同期が取れてなかった」だけなのかもしれませんが・・・
んー なんだったんですかね(--;
現状は問題なく動作している状況です。(苦笑)
どうも、ありがとうございました。
ありがとうございます。
私の方も別の環境で試してみたところ、
問題なく動いたのですが、あるプロジェクトに限ってそのような状態です。
ちょっと色々とためしてみます(汗)
どうもです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
CString 数値チェック
-
getParameterの値変更
-
javaのCSVデータ読込についてです
-
StatementクラスのexecuteQuery...
-
excel vba 時間計算と条件分岐...
-
【Excel VBA】繰り返し処理がで...
-
DateTimePickerに値を入れたい...
-
JavaScriptの変数の値が消える!?
-
8桁整数を限りなく短い文字列に...
-
PSQLExceptionが発生する
-
文字列分割(JAVA)
-
String型の値が大文字か小文字...
-
コンボボックスやリストボック...
-
実行シェルからCOBOLへパラメー...
-
【C#】ハッシュテーブル(連想...
-
オブジェクトの中のプロパティ...
-
IF関数でEmpty値を設定する方法。
-
javaで質問です。 文字列2023/2...
-
カタカナの小文字を大文字に変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
BCD形式で時刻を!
-
wsprintf関数の使い方について
-
C言語の変数(LSB)の合わせ込...
-
ArrayListの要素数の上限
-
DateTimePickerに値を入れたい...
-
Stringクラスの変数の格納アド...
-
char型での演算子
-
javaのCSVデータ読込についてです
-
結合した文字列をファイル名に...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
matchesを否定文として使う方法...
-
JSPでHashMap・配列の変数の値...
-
JSPでの計算結果表示
-
VB6,論理演算子Orの使い方がわ...
-
ResultSetの内部構造(Java)
-
PSQLExceptionが発生する
-
日付や時刻の"01"を" 1"に変換...
-
Evaluate()に文字列の形式の数...
おすすめ情報