这个问题是因为weblogic把 blob类型封装了,BLOB类型转换时报错,三个解决思路
1 :取消weblogic 封装,在服务,数据源,连接池,高级 中有个 包装数据类型 (英文版本可能不同),可以把勾选去掉,
去掉后,可能还会报错 oracle_sql_BLOB cannot cast to oracle_sql_BLOB类型,是因为,本地有 ojdbc14.jar 这个包,而 weblogic没有,需要上传。
2 :(推荐) 避免BLOB类型封装,例如
原来代码 :
Object obj = 需要转换接受的值;
BLOB blob=(BLOB)obj;
InputStream is=blob.getBinaryStream();
新代码 :
Object obj = 需要转换接受的值;
Class clazz=obj.getClass();
Method method=clazz.getMethod("getBinaaryStream",new Class[]{});
InputStream is =(InputStream)method.invoke(obj,new Object[]{});
这样写既能避开类型强制转换,也抛开了对oracle驱动jar包的依赖。
3 : 另外还有个特殊的方法,把weblogic BLOB 所在jar包,放到自己项目中,BLOB转换时,引用 weblogic.jdbc.wrapper.Blob ,也能避免这个问题,但是不同环境就需要更换不同的jar包,不方便