`
Dream.V
  • 浏览: 30718 次
社区版块
存档分类
最新评论

如何使用Hibernate 保存Clob 和Blob

 
阅读更多
今天书上让用ORACLE数据库建表,有个CLOB类型,,不知道到底怎么保存,用String也不行,,当时就怒了。。。抓狂


注意:目前只能操作Clob,因为不想用Session直接操作!

Clob在数据库中一般都是用来保存大文本字段的,Blob则是保存二进制流这样的!

1、Hibernate操作Clob字段
A.在实体Bean中将Clob字段声明为String类型。
并声明get,set方法。
B.在实体Bean XML的配置文件中,将Clob字段类型为:text
C.在Oracle中,表字段的类型声明为:Clob。
那么在实际的操作中,java就吧相当于直接操作String类型并保存在Oracle的Clob中。
下面附带代码片段。
Java代码收藏代码
  1. //声明Bean中的Clob字段类型为String,属性名不一定要是clob。这里我顺便取的,呵呵
  2. privateStringclob;
  3. publicStringgetClob(){
  4. returnclob;
  5. }
  6. publicvoidsetClob(Stringclob){
  7. this.clob=clob;
  8. }
  9. <propertyname="clob"column="clob"type="text"/>

Xml代码收藏代码
  1. <!--在XXX.hbm.xml中,设置类型为text-->
  2. <propertyname="clob"column="clob"type="text"/>

Java代码收藏代码
  1. inter.setClob("大文本!");

2.Hibernate 保存blob数据
Java代码收藏代码
  1. //使用Session的方式保存
  2. Sessionsession=service.getCurrSession();
  3. Transactiontran=session.beginTransaction();
  4. //首先定义一个空的blob对象保存在数据库中inter.setPhoto(Hibernate.createBlob(newbyte[100]));
  5. session.save(inter);
  6. session.flush();session.refresh(inter,LockMode.UPGRADE);
  7. SerializableBlobsb=(SerializableBlob)inter.getPhoto();
  8. //photo是图片的byte数组的形式
  9. byte[]photo=(byte[])intermap.get("photo");
  10. BLOBblob=(BLOB)sb.getWrappedBlob();
  11. //将某个文件读入后,写到Blob字段的输出流中
  12. OutputStreamos=blob.getBinaryOutputStream();
  13. InputStreamfis=newByteArrayInputStream(photo);
  14. byte[]buff=newbyte[fis.available()];
  15. fis.read(buff);
  16. fis.close();
  17. os.write(buff);
  18. os.close();
  19. session.flush();
  20. /**
  21. *使用Session操作大字段分为3步
  22. *1、设置一个空的Clob/Blob保存到数据库中
  23. *inter.setPhoto(Hibernate.createBlob(newbyte[100]));
  24. *2、获得数据库中这个大字段的游标(Clob/Blob的cursor)
  25. *session.refresh(inter,LockMode.UPGRADE);
  26. *3、用cursor往数据库写数据
  27. *OutputStreamos=blob.getBinaryOutputStream();
  28. *InputStreamfis=newByteArrayInputStream(photo);
  29. *byte[]buff=newbyte[fis.available()];
  30. *fis.read(buff);
  31. *fis.close();
  32. *os.write(buff);
  33. *os.close();
  34. *session.flush();
  35. **/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics