[Seasar-user:17734] Re: [S2JDBC]BLOB型への入出力について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 6月 12日 (金) 16:00:28 JST


小林 (koichik) です.

Date:    Fri, 12 Jun 2009 14:48:31 +0900
From:    "A.Watanabe" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17730] [S2JDBC]BLOB型への入出力について

> 掲題の件、OracleのBLOB型へのデータの書込み、
> 及び読込みを行いたいのですが、
> S2JDBC経由でjava.sql.Blob型として取得する事は可能でしょうか?
(略)
> BlobからOutputStream、InputStreamを取得しての書込み、読込を想定しています。

基本的にサポートしていません.
S2JDBC の getSingleResult()/getResultList() は
Statement および ResultSet をクローズして
結果を返すので,Entity/JavaBeans のプロパティに
InputStream があっても既に使えない状態です.

また,Entity では InputStream のマッピングを
サポートしていないので,流れるような
インタフェースで使うことは出来ません.


ただし,iterate() メソッドは ResultSet が
オープンされたままで呼び出されるので,これと
2Way SQL の組み合わせでは InputStream を扱える
かもしれません.

Entity ではないただの JavaBeans に InputStream の
プロパティを持たせて,

public class Foo {
  public InputStream xxx;
}

jdbcManager
  .selectBySql(Foo.class, "select ...")
    .iterate(new IterationCallback<Foo, Boolean>() {
        int count;
        public Boolean iterate(Foo foo, IterationContext context) {
          InputStream is = Foo.xxx;
          ...
        }
    });

試したことがないのでどうなるか分かりませんが.

個人的には BLOB のカラムだけ別に扱うユーティリティでも
作った方が便利なんじゃないかと思います.
どうせ長大な BLOB が問い合わせ条件に入ることは
ないので,複雑な問い合わせなどは普通に S2JDBC を
使って,それで求めた主キー指定で BLOB は別途扱う,
みたいな.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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