- - PR -
日本語Like検索
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-14 18:32
初めて投稿させてもらいます。
DB:Oracle9i OS:Windows2000サーバ APサーバ:Tomcat5.0.28 OS:FedoreCore2 上記環境で、javaからPreparedStatementを使用し、 select count(*) from hogehoge where hoge like ? のようなSQLを投げると ORA-01460というエラーが返ってきます。ORA-01460の内容は、 原因:要求された変換できません。 処置:要求された変換をSQLから削除して下さい。 TO_CHAR、TO_DATE及びTO_NUMBER関数の構文を調べてサ ポートされている変換を確認して下さい。 といったもので、パラメータを日本語でない場合は正常に動くため、 おそらく、java-Oracle間の文字変換か何かでエラーになっているのかと 思っているのですが、原因がつかめずに困っています。 OracleのキャラクタセットとAP側のエンコーディングが問題なのでしょうか? どなたかご存知の方がいらっしゃれば教えて頂けると助かります。 よろしくお願いします。 | ||||||||
|
投稿日時: 2005-05-15 02:17
こんにちは。
「のような」ではなくて、具体的なコードの方が良いですね。 それから、
そう思うのなら、OracleのキャラクタセットとAP側のエンコーディングを示してみては? Oracleのより詳細なバージョン、使っているJDBCのバージョン情報(THINかOCIかも)、エラーになるパラメタなどがあると、もっと良いのではないでしょうか。 それから、KROWN見てみましたか? | ||||||||
|
投稿日時: 2005-05-16 09:40
select count(*) from hogehoge where hoge like '?'
としてみてはいかがでしょう? | ||||||||
|
投稿日時: 2005-05-16 10:42
これは、駄目ですね。 ![]() PreparedStatementの場合、”?”に対して、 pStmt.setString(1,"あいうえお") pStmt.setInt(1,1234) とかするだけです。 SQL文が悪いのではなくて、 setXXXXと該当列の型が異なっているとか、 そういう類では? ![]() | ||||||||
|
投稿日時: 2005-05-16 11:07
ちゃんとsetStringしてますか?
| ||||||||
|
投稿日時: 2005-05-16 13:21
うへ^^;
preparedStatementの?でした・・・ ごめんなさい。質問をしっかり読めていませんでした。 そうですね、みなさんがおっしゃっているように、セットしているあたりの 情報がわからないと。。ですね。 **** ちなみに like '%' とした場合、文字コードが違っても検索はされるはずです。 Oracleが手元にないので検証はできませんが、、、 | ||||||||
|
投稿日時: 2005-05-16 18:23
アドバイスありがとうございました。
OracleのJDBCドライバの問題でした。基本的に下位互換があるということで最新の ドライバを使用していたのですが、これをバージョン9にすることできちんと動作しました。 開発環境にOracle9iを入れて確認すると最新バージョンのドライバで動作するのですが、 お客さんの環境だと動作しないという状態で。違いはOracleのバージョンが9.0か9.2か くらいなんですが、その差が影響したのでしょうか、解決はしたものの正しい原因が 終えていないので少々気持ち悪いのですが…。 | ||||||||
|
投稿日時: 2005-05-16 19:31
JDBCドライバの不具合だったんですね。
私もOracleJDBCドライバとWeblogicJDBCドライバの動作の違いに かなり翻弄されたことがあります。。 ORACLE8から9に変わった時も重要な変更点が変更履歴にかかれていなかったり、 JDBCは2の次にされてる感があります。 そんな時はサポートに問い合わせるか↓とかで質問するといいですよ http://otn.oracle.co.jp/forum/index.html |
1