[Seasar-user:1204] Oracle JDBC(Thin) + S2DaoでのCLOBの扱い
Hikaru Taniguchi
taniguchi
2004年 11月 24日 (水) 20:51:07 JST
こんにちは、たにぐちです。
標題の件、一人グチグチとはてなダイアリーに書いていて、「動くには動いた
がなんかスッキリしない」と思ったので質問がてらメールしてます。
- 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の恩恵にあずかるのは難しい。
本来、CLOB列を使うとなると VARCHAR2()じゃ入らないかもしれない場合にそ
ういった設計をするかと思うので、この「ロケータを使う必要があるわ、おま
けにOracle独自の流儀だわ」ってのはかなり悲しいものがあるのですが、これっ
て本当なんでしょうか??
とりあえずいまのところ S2Daoの恩恵は受けられない(しかもS2Dao/S2JDBCが
原因ではない)のが凄く悲しいのですが、他の方はどうされているのかと思い
質問したくメールしました。
# なんかただ私が勘違いしてるだけなら恥ずかしいのですが...
Wikiに書こうかと思ったのですが、かなり不正確なネタのような気がしたので
とりあえずこちらに...(どういう意味)。
なにか意見をいただければ光栄です。
--
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]>
Seasar-user メーリングリストの案内