用Hibernate 对 Oracle9i Blob字段的读写

在oracle 中 ,有时varchar2 类型不能满足对字段的存储,这就需要 用  大类型数据存储

  如:  blob  

 

hibernate 对blob 字段操作步骤如下:

 

   1、在java Bean 中 定义一字段

 

public class NewsEntry {

 

      private Blob contents2 ;

   private String content;

 

    ... get ,set 方法 (省略不写)

 

}

 2、写映射文件

 

  

<property

            name="contents2"

            update="true"

            insert="true"

            access="property"

            type="java.sql.Blob"   // 类型必须是这样的

            column="CONTENT"

        />

 

 

  

 

3、把字符串写入blob 并同步到数据库

 

public void save() throws Exception {

       OutputStream out;

       try {

           NewsEntry entry = new  NewsEntry ();

           entry.setContents2(Hibernate.createBlob(new byte[1]));

           entry.setContent("你好");

           session.save(entry);

           session.flush();// 强制执行insert

           // 通过refresh方法,强制Hibernate执行select for update

           session.refresh(entry, LockMode.UPGRADE);

           // Blog写入实际内容

           BLOB blob = (BLOB) entry.getContents2();

           out = blob.getBinaryOutputStream();

           byte [] buf = new byte[1];

           if (entry != null) {

              buf = entry.getContent()== null ? null:entry.getContent().getBytes("gbk");

           }

           out.write(buf);

           out.close();

       } catch (RuntimeException e) {

           throw new Exception(e);

       }

       

    }

 

 

 通过这几步就可以把字符串写入到blob 字段中并 同步到数据库

 

 

 

4 、读出Blob 字段的数据

 

 

 public NewsEntry loadNews(long id) throws Exception {

       NewsEntry entry = this.getNewsFromDB(id);

       StringBuffer sb = new StringBuffer();

       // 这个是blob类型的代码

       byte[] content = new byte[1];

       if (entry != null) {

           Blob contents2 = entry.getContents2();

           if (contents2 != null) {

              int len = (int) contents2.length();

              content = new byte[len];

              InputStream input = contents2.getBinaryStream();

              input.read(content,0,len);

           }

       }

       return entry;

    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值