原来在Tomcat下面对blob字段保存采用如下方式:
select * from table1 where tnoid=? for update.
之后获取到oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
OutputStream out = blob.getBinaryOutputStream();
向该输出流中写入二进制流即可。
int iBufferSize = 10240;
int i = 0;
int iLen = sContent.length;
try {
while ((iLen - i) > iBufferSize) {
out.write(sContent, i, iBufferSize);
i = i + iBufferSize;
}
if ((iLen - i) > 0) {
out.write(sContent, i, (iLen - i));
}
out.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
可当我将该段代码移植到WebLogic之后,结果在上面第3行处出现错误:
weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB,
出现这种原因分析可能是使用了WebLogic的DataSource,而DataSource所使用的驱动同Oracle的驱动有冲突,所以在进行强制类型转换的时候出现错误。
如何解决呢?其实可以不通过强制类型转换得到该输出流。避免强制类型转换出现的错误。
OutputStream out = rs.getBlob(1).setBinaryStream(1);
后面就是向该流里面输出内容了。代码同前了。