[Seasar-user:1958] Oracle JDBC(Thin) + S2DaoでのBLOBの扱い

hasi hasimoto
2005年 5月 11日 (水) 16:20:57 JST


こんにちは、橋本です。

ML や はてな の記事を見ましたが、うまくいかないので
知ってる方教えてください。


現象は、イメージファイルのBLOB領域へのINSERTはできるが
SELECTされたもののデータサイズが本当は2.3Kあるはずなのに
86byteしかないし中身が全部ゼロなんです。

やったことは、

・OracleにBLOB型でカラムを作りました
・Entityのプロパティに byte[] のプロパティを作成しgetter/setterを作成
・S2DaoでのINSERTは成功

S2DaoのINSERTがうまくいったという確認は以下のコードで確認しました。

OutputStream st = new FileOutputStream("d:/image.jpg");
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@xxx:1521:xxx", "xxx", "xxx");
OraclePreparedStatement pstmt = (OraclePreparedStatement)
conn.prepareStatement("SELECT binary FROM BLOB_TEST WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rset = pstmt.executeQuery();
rset.next();
// BLOBの取り出し
BLOB lob = ((OracleResultSet)rset).getBLOB(1);
InputStream instream = lob.getBinaryStream();
int chunk = lob.getChunkSize();
byte[] buff = new byte[chunk];
int length = -1;
while ((length = instream.read(buff)) != -1) {
 st.write(buff, 0, length);
}
st.flush();
instream.close();
rset.close();
pstmt.close();
conn.close();
st.close();

以上よろしくお願いします。

-- 
橋本昌典 <[E-MAIL ADDRESS DELETED]>





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