[Seasar-user:1205] Re: Oracle JDBC(Thin) + S2Dao でのCLOBの扱い

Yasuo Higa higa
2004年 11月 24日 (水) 21:05:28 JST


<uhdnfsbvv.wl%[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:1204] Oracle JDBC(Thin) + S2DaoでのCLOBの扱い" において、
   "Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。
> 
> こんにちは、たにぐちです。
> 
> 標題の件、一人グチグチとはてなダイアリーに書いていて、「動くには動いた
> がなんかスッキリしない」と思ったので質問がてらメールしてます。
>  - http://d.hatena.ne.jp/tanigon/20041124#p1
>  - http://seasarproject.g.hatena.ne.jp/tanigon/20041124#p1
> 
> OracleのJDBCドライバ(Thin)が悪いのは悪いと思うのですが、そもそもS2Dao
> でOracle(JDBC(Thin))で CLOBを扱ってる人って実はあんまりいないのでしょ
> うか?
> 
> いまのところ以下のような問題点があります
> 
> (select編)
>  - OracleのJDBCドライバは CLOB列に対する ResultSet#getString()に対して、
>    nullを返す
>    (結果として DTO(もしくはEntity)上で Stringとして扱えない。Clobとし
>     て扱うことはできるが、なんだかヘンな気がする?)
>    - で、この問題はsetterを別に用意してやることで強引に回避できました
> 
> (insert/update編)
>  - OracleのJDBCドライバは CLOB列に対するinsert/updateは setString()で
>    文字列としてセットしてやればセットできる。ただし、VARCHAR2の影響を
>    受けるらしく、2000文字未満ぐらいしか使えない
>  - CLOBを使うぐらいなので長いテキストを使いたいが、上のような制約がある
>    のでjava.sql.Clobを使う必要がある (理屈の上では)
>  - しかし実際には 
>      http://seasarproject.g.hatena.ne.jp/tanigon/20041124#p4
>    に書いたようなことで Oracleの流儀のためにわざわざ回避策を取る必要が
>    ある. おまけにSELECT FOR UPDATEでロケータの取得を先に行う必要がある
>    ためにいまのところ S2Daoの恩恵にあずかるのは難しい。
>
はてなにも書いたのですが、オラクル上は、BLOBで定義し、Java側はbyte[]
で受け、別にStringのプロパティを作って、byte[] <-> Stringの
相互変換をするとうまくいく気がします。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



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