- PR -

日本語Like検索

1
投稿者投稿内容
media
会議室デビュー日: 2003/04/10
投稿数: 7
投稿日時: 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側のエンコーディングが問題なのでしょうか?
どなたかご存知の方がいらっしゃれば教えて頂けると助かります。

よろしくお願いします。
pascal
常連さん
会議室デビュー日: 2004/04/29
投稿数: 29
お住まい・勤務地: 神奈川県
投稿日時: 2005-05-15 02:17
こんにちは。
引用:

上記環境で、javaからPreparedStatementを使用し、
select count(*) from hogehoge where hoge like ?
のようなSQLを投げると


「のような」ではなくて、具体的なコードの方が良いですね。

それから、
引用:

OracleのキャラクタセットとAP側のエンコーディングが問題なのでしょうか?


そう思うのなら、OracleのキャラクタセットとAP側のエンコーディングを示してみては?

Oracleのより詳細なバージョン、使っているJDBCのバージョン情報(THINかOCIかも)、エラーになるパラメタなどがあると、もっと良いのではないでしょうか。
それから、KROWN見てみましたか?
ロス
常連さん
会議室デビュー日: 2005/03/25
投稿数: 26
投稿日時: 2005-05-16 09:40
select count(*) from hogehoge where hoge like '?'
としてみてはいかがでしょう?
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2005-05-16 10:42
引用:

ロスさんの書き込み (2005-05-16 09:40) より:
select count(*) from hogehoge where hoge like '?'
としてみてはいかがでしょう?



 これは、駄目ですね。
PreparedStatementの場合、”?”に対して、
 pStmt.setString(1,"あいうえお")
 pStmt.setInt(1,1234)
とかするだけです。

 SQL文が悪いのではなくて、
setXXXXと該当列の型が異なっているとか、
そういう類では?
じじ
会議室デビュー日: 2005/01/04
投稿数: 10
お住まい・勤務地: 大田区
投稿日時: 2005-05-16 11:07
ちゃんとsetStringしてますか?

コード:
String sql = "select count(*) from hogehoge where hoge like ? ";
preStatement = con.prepareStatement(sql);
preStatement.setString(1, "あああ");

ロス
常連さん
会議室デビュー日: 2005/03/25
投稿数: 26
投稿日時: 2005-05-16 13:21
うへ^^;
preparedStatementの?でした・・・
ごめんなさい。質問をしっかり読めていませんでした。

そうですね、みなさんがおっしゃっているように、セットしているあたりの
情報がわからないと。。ですね。

****
ちなみに like '%' とした場合、文字コードが違っても検索はされるはずです。
Oracleが手元にないので検証はできませんが、、、
media
会議室デビュー日: 2003/04/10
投稿数: 7
投稿日時: 2005-05-16 18:23
アドバイスありがとうございました。

OracleのJDBCドライバの問題でした。基本的に下位互換があるということで最新の
ドライバを使用していたのですが、これをバージョン9にすることできちんと動作しました。

開発環境にOracle9iを入れて確認すると最新バージョンのドライバで動作するのですが、
お客さんの環境だと動作しないという状態で。違いはOracleのバージョンが9.0か9.2か
くらいなんですが、その差が影響したのでしょうか、解決はしたものの正しい原因が
終えていないので少々気持ち悪いのですが…。

じじ
会議室デビュー日: 2005/01/04
投稿数: 10
お住まい・勤務地: 大田区
投稿日時: 2005-05-16 19:31
JDBCドライバの不具合だったんですね。
私もOracleJDBCドライバとWeblogicJDBCドライバの動作の違いに
かなり翻弄されたことがあります。。
ORACLE8から9に変わった時も重要な変更点が変更履歴にかかれていなかったり、
JDBCは2の次にされてる感があります。

そんな時はサポートに問い合わせるか↓とかで質問するといいですよ
http://otn.oracle.co.jp/forum/index.html
1

スキルアップ/キャリアアップ(JOB@IT)