当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
hibernate操作oracle的blob字段(一)
发布时间:2010/10/24 15:01:20 来源:www.xue.net 编辑:城市总裁吧

    1. Bolb类型字段说明:

    写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢?

    这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作,你就获得了blob的cursor,可以真正的写入blob数据了。

    2. 获取游标存在的问题:

    因为我使用的是weblogic配置的数据源,weblogic做了一些封装,返回来的blob的是 weblogic.jdbc.wrapper.Blob对象,不能直接转化为oracle的JDBC的oracleBlob,否则产生转型异常Cast Exception:

    代码示例:

    //PO:CardSuitInfo

    public class CardSuitInfo implements Serializable ...{

    private java.sql.Blob cardFacePicFile;

    public void setCardFacePicFile(Blob cardFacePicFile) ...{

    this.cardFacePicFile = cardFacePicFile;

    }

    public java.sql.Blob getCardFacePicFile() ...{

    return this.cardFacePicFile;

    }

    }

    //1.首先插入空的blob

    cardSuitInfo.setCardFacePicFile(net.sf.hibernate.Hibernate.createBlob(new byte[1]));

    session.save(cardSuitInfo);

    session.flush();

    //2.写入blob

    session.refresh(cardSuitInfo, LockMode.UPGRADE);// 设置锁定级别

    weblogic.jdbc.wrapper.Blob weblogicBlob = (weblogic.jdbc.wrapper.Blob) cardSuitInfo.getCardFacePicFile();

    oracle.sql.BLOB oracleBlob = (oracle.sql.BLOB) weblogicBlob.getVendorObj();

    OutputStream out = oracleBlob.getBinaryOutputStream();

    byte[] buffer = cardSuitInfoView.getCardFacePicFileBody();

    out.write(buffer, 0, buffer.length);

    out.close();

    session.save(cardSuitInfo);

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved