在WebLogic上发布
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
BufferedOutputStream bos = new BufferedOutputStream(blob.getBinaryOutputStream());
bos.write(define.getBytes("UTF-8"));
抛出异常:
java.lang.ClassCastException: weblogic.jdbc.wrapper.Blob_oracle_sql_BLOB
经查,通过weblogic连接池获得的连接所抽出的blob对象是weblogic封装过的OracleThinBlob,而不是oracle.sql.BLOB。
用反射机制来把抽出的blob封装到一个流中可以避免异常
Object obj = rs.getBlob(1);
Class clazz = obj.getClass();
Method method = clazz.getMethod("getBinaryOutputStream", new Class[]{});
OutputStream os = (OutputStream)method.invoke(obj, new Object[]{});
BufferedOutputStream bos = new BufferedOutputStream(os);
bos.write(define.getBytes("UTF-8"));
这样写既避免了异常,也免除了对oracle驱动jar的依赖。