[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 メーリングリストの案内