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

Toshitaka Agata throw_and_catch
2004年 11月 25日 (木) 02:04:11 JST


縣です。

2年間ほど前にちょうど同じ現象でかなり悩まされました。
Oracle8iのClobカラムに格納されたXMLデータを更新する
アプリケーションでしたが、たにぐちさんの言うとおり、
Oracleの流儀に沿わないとやりたいことが実現できませんでした。
そのときはClobの更新を、次の手順でおこなっていました。
(たぶん9iでも一部しか解消されていなかったはずです)

1.UPDATE テーブル名 SET CLOBカラム名=emtpy_clob() WHERE 条件
  を使い、更新したいCLOB領域をクリアする。
  (これがないとゴミが残ります)
2.SELECT FOR UPDATEにより、対象行を取得。
3.ResultSetからjava.sql.Clobオブジェクトを取得。
4.ClobオブジェクトをoracleのCLOBオブジェクトにキャスト。
5.CLOBオブジェクトから、OutputStreamを取得。
6.OutputStreamに対して更新データを出力。

http://seasarproject.g.hatena.ne.jp/tanigon/20041124#p1
ここに書いてある方法と同じですね。。。

インサート時はClob以外を普通にインサートして、
上記の手順を全て実行します。
また、Type2,Type4のドライバには多少違いがあって、
Type4のほうがましだったと記憶しています。

これらはOracleのJDBCドライバのバグの回避策だったと
認識しています。
10gや最新のJDBCドライバの状況は分かりませんが、
参考になればと思い、メール致しました。

>
>こんにちは、たにぐちです。
>
>標題の件、一人グチグチとはてなダイアリーに書いていて、「動くには動いた
>がなんかスッキリしない」と思ったので質問がてらメールしてます。
> - 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 mailing list
>[E-MAIL ADDRESS DELETED]
>http://lists.sourceforge.jp/mailman/listinfo/seasar-user
__________________________________
Do You Yahoo!?
Upgrade Your Life
http://bb.yahoo.co.jp/




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