[Seasar-user:800] Re: S2JDBC でOracleのUnicode問題とうまく付き合いたい...

B isid.co.jp Yasuo Higa higa
2004年 6月 8日 (火) 16:11:31 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:796] S2JDBCでOracleのUnicode問題とうまく付き合いたい..." において、
   "Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。
> 
> tanigon こと 谷口です(ML初投稿です)
> 
> ちょっとOracle8iとつないでいてデータハンドリングで躓いたのでお知恵を拝借
> いたしたくメールしました。
> 
> まず、前提として…
> 接続先データベースがOracle8.1.7EEという現状があります。
> で、こいつには JDBCドライバの問題? というか OracleのUnicode変換テーブル
> の問題で、 "〜" という文字をちゃんと対称に変換できないという問題がありました。
> (http://otndnld.oracle.co.jp/tech/java/htdocs/javanls/javanls817.html)
> # ちなみに JDBC Driver 10.1.0 でも解決されてないように見えます。。
> 
> 昔々、S2JDBCもない頃は Commons DbUtilsをxml(dicon)に登録して、これを
> DAOImplのコンストラクタに解決してもらってました。
> で、S2JDBCがリリースされたので「これはもう使うしか、移行するしか」という
> 感じだったのですが…が… ちょっとしたトラブルが。
> 
> 上に書いたコード問題を回避するために、Commons DbUtilsのクラスの中で
> QueryRunnerというやつがあるのですが、こいつをオーバーライドしてました。
> QueryRunnerはもともと 
> 
>     protected ResultSet wrap(ResultSet rs) {
>         return rs;
>     }
> 
> というTemplateMethodを持っています。
> ここを継承した(OracleQueryRunnerみたいな…)クラスで このUnicode変換部分
> を自前でOracle <-> Javaでいじるような ResultSetラッパーを作ってやり、
> wrap()の中でラッピングするようにしてました。

BasicSelectHandlerでResultSetを作成するためのラッピングメソッドを
提供したいと思います。

Unicode変換するResultSetのラッパーのコードをもし、
私に送っていただけるなら、S2JDBCに取り込みたいと思うのですが、
どうでしょうか。

一応AOPでも(たぶん)できます。
なんか使い方間違ってる気もしますが。(笑)
<property name="resultSetHandler">
  <component class="org.seasar.extension.jdbc.impl.BeanResultSetHandler">
    <arg>@[E-MAIL ADDRESS DELETED]</arg>
    <aspect>OracleResultSetInterceptor</aspect>
  </component>
</property>

OracleResultSetInterceptor.java
public Object invoke(MethodInvocation invocation) throws Throwable {
  //OracleResultSetはラッパー
  invocation.getArguments()[0] = new OracleResultSet(
    (ResultSet) invocation.getArguments()[0]);
  return invocation.proceed();
}
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



Seasar-user メーリングリストの案内