Hibernate操作Blob/Clob时,发生cannot be cast to oracle.sql.BLOB错误分析

来源:互联网 发布:巨人网络手游客服 编辑:程序博客网 时间:2024/06/05 17:37

JAVA操作BLOB字段

BLOB说明

可以看到此处blob转byte[]的方法,里边参数的blob类型,两种需要注意的。
一种是hibernate的BLOB类型import oracle.sql.BLOB;
一种是java自己的import java.sql.Blob;
为了统一,我从数据库里得到的BLOB字段和转换都用的是java自己的转换。
hibernate得到的是一个对象,转为blob,再做byte[]处理。hiernate得到的对象有做代理的处理,所以直接用oracle的BLOB去转就会报标题的异常。

byte[] data=blobToBytes((Blob) lm.get(i).get("DATA"));

/** * 将blob转化为byte[],可以转化二进制流的 *  * @param blob * @return */private byte[] blobToBytes(Blob blob) {    InputStream is = null;    byte[] b = null;    try {        is = blob.getBinaryStream();        b = new byte[(int) blob.length()];        is.read(b);        return b;    } catch (Exception e) {        e.printStackTrace();    } finally {        try {            is.close();            is = null;        } catch (IOException e) {            e.printStackTrace();        }    }    return b;}
0 0