- - PR -
DB2の特定のカラムに対し、PreparedStatementでLIKE検索が出来ない。
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-10 21:28
以前にDataBase Expartに書き込んでいたのですが、どうもPreparedStatementの使い方に近い質問だと思うので、こちらに書き込みしなおします。
Javaで、PreparedStatementを使用して、以下のようなSQL文を作成しました。 カラム名とテーブル名は仮の物です。 SELECT TEST_COL FROM TEST_TABLE WHERE TEST_COL LIKE VARGRAPHIC(?) DB2を使用しております。 TEST_COLはGRAPHIC型の列です。 パラメータをセットする際には、setStringメソッドを呼び出し、 "%TEST%" というような文字列を入力しています。 このSQLを実行すると、SQLExceptionが発生し、以下のメッセージを取得できます。 "DB2 SQL error:SQLCODE: -418, SQLSTATE: 42610, SQLERRMC: null" 以上です。 Statementを使用するとちゃんと動きますし、コマンドエディタで実行しても動作します。 格納する値を変更しても同じでした。 このSQLはどこが間違っているのでしょうか?どうにかしてPreparedStatementを使用したいのですが、どなたか方法を教えて頂けないでしょうか。 | ||||||||
|
投稿日時: 2007-01-11 09:04
マニュアルは読んだんですか。
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/core/rsql0400.htm Googleは検索してみましたか。 http://www-1.ibm.com/support/docview.wss?uid=std3c3d15e2e67bb24c649256f1c0014799f | ||||||||
|
投稿日時: 2007-01-11 13:20
すみません、いくつか書き忘れていました。
> マニュアルは読んだんですか。 手元にマニュアルが無いので、テクニカルサポートを参考にしました。 以下のサイトを参考に、vargraphicでのキャストを行おうと考えました。 http://www-1.ibm.com/support/docview.wss?rs=608&q1=vargraphic&uid=std3fc36925629bff65849256f1f00236dfa&loc=ja_JP&cs=utf-8&cc=jp&lang=ja > Googleは検索してみましたか はい。キャストの方法などを参考にしました。 例えば、ご照会頂いたサイトを参考にして、vargraphic関数を使わないキャスト方法を用いて、以下のSQLも記述してみました。 SELECT TEST_COL FROM TEST_TABLE WHERE TEST_COL LIKE cast('?' as VARGRAPHIC(40)) このSQLでPreparedStatementを生成し、setStringで値を格納して検索した所、例外は発生しませんでした。ただ、レコードは取得できません。 例えばsetString("%TEST%")と入れているのですが、"AAATESTBBB"というデータの入ったレコードが取得できません。 この現象については、エラーメッセージも無く、理由が全く解っていません。 以下のURLを見た限りでは、正しいように思えるのですが・・・。 http://www-06.ibm.com/jp/software/data/developer/library/techdoc/iiperformance.html ご照会頂いたURLを元に考えると、後者のキャスト方法が正しいようにも思えるのですが、値が取得できない上にエラーメッセージが無いために原因が解りません。 大変申し訳ないのですが、どなたか原因を調べる方法だけでも教えて頂けないでしょうか。 | ||||||||
|
投稿日時: 2007-01-11 14:31
いや、そのWebページで言っていることは、キャストの仕方を変える必要があるという ことではなく、関数に渡す際に型を明示する必要がある、ということです。 つまり、
のようにする必要があるということですね。 | ||||||||
|
投稿日時: 2007-01-13 16:58
やっとできました!!
本当にありがとうございます。 よくマニュアルの意味を考えずに早とちりしてしまいました。 また解らない事があれば、よろしくお願いします。 |
1