| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2439 人关注过本帖
标题:说下关于映射大对象(Blob,Clob)数据类型在Oracle中的处理....希望对大家有所 ...
取消只看楼主 加入收藏
hardes
Rank: 1
等 级:新手上路
帖 子:322
专家分:0
注 册:2006-6-3
收藏
 问题点数:0 回复次数:2 
说下关于映射大对象(Blob,Clob)数据类型在Oracle中的处理....希望对大家有所帮助
首先先介绍下开发环境

服务器软件:Tomcat 5.0
IDE工具:Eclipse3.2+MyEclipse5.1.0GA 插件
DataBase:Oracle9i
JDK:1.5版
还有就是开源框架Hibernate 3.0


前两天在家看了看<<深入浅出 Hibernate>>,里面介绍有关于Hibernate映射大对象数据类型的介绍,因此今天发表这篇文章希望对大家有所帮助,至于在MySql,MS SQLServer中如何映射,就不用说了,因为比较简单,网站上也有很多相关资料可以查看,不多说了,言归正传吧.

数据库结构:
字段名 数据类型 约束条件
ID NUMBER(10) PK
NAME VARCAHR2(30) NOT NULL
IMAGE Blob
DISCRIPTION Clob

类名(pojo)TUser,映射文件TUser.hbm.xml省略.

代码如下:
public void saveTUser()throws Exception
{
Session session = null;
Transaction tran = null;
try
{
session = sessionFactory.openSession();
tran = session.beginTransaction();
TUser user = new TUser();
user.setName("zhangsan");
user.setImage(Hibernate.createBlob(new byte[1]));
user.setDiscription(Hibernate.createClob(" "));
session.save(user);
session.flush();
session.refresh(user,LockMode.UPGRADE);
oracle.sql.BLOB blob = (oracle.sql.BLOB)user.getImage();
OutputStream outs = blob .getBinaryOutputStream();
FileInputStream file = new FileInputStream("c://1.jpg");
byte[] bytes = new byte[10240];
int len;
while((len=file.read(bytes))!=-1)
{
outs.write(bytes,0,len);
}
file.close();
outs.close();
oracle.sql.CLOB clob = (oracle.sql.CLOB)user.getDiscription();
java.io.Writer writer = clob.getCharacterOutputStream();
writer.write("Hello,World......");
writer.close();
session.save(user);
tran.commit();
}catch(HibernateException e){
e.printStackTrace();
tran.rollback();
}finally{
session.close();
}
}
以上代码在Hibernate3.0以前,能运行,但是我的Hibernate是3.0的,所以运行时候有异常
Exception in thread "main" java.lang.ClassCastException: org.hibernate.lob.SerializableBlob

要使以上代码在Hibernate3.0中运行起来,需对以上代码进行修改,上面红色部分代码修改为:

SerializableBlob blob = (SerializableBlob)user.getImage();
java.sql.Blob blo = (java.sql.Blob)blob.getWrappedBlob();
oracle.sql.BLOB obj = (oracle.sql.BLOB)bol;
OutputStream outs = obj.getBinaryOutputStream();

至于下面Clob的操作我就不多说了,嘿嘿,相信以您的聪明才智,一定知道该怎么改了.

在学习开源的一些框架的时候,千万注意版本与版本之间的区别,以免在开发过程中走弯路,呵呵
大家如果有兴趣的话也可以做下看看啊,祝好运咯...........

当然,以上代码或许有什么地方有问题,我也不知道...哈哈(^_^,猜测哈...)

搜索更多相关主题的帖子: Clob Blob 数据类型 Oracle 数据库 
2007-11-08 16:15
hardes
Rank: 1
等 级:新手上路
帖 子:322
专家分:0
注 册:2006-6-3
收藏
得分:0 
呵呵,发表点实际点的东西,对大家帮助也实际点嘛!!哈哈
我是个老实人....只会做老实事,哈哈

当神已无能为力,就让爷来普度众生吧!
2007-11-08 16:24
hardes
Rank: 1
等 级:新手上路
帖 子:322
专家分:0
注 册:2006-6-3
收藏
得分:0 
来个人顶顶啊,别让我这一下午的心血沉下去了啊!!!
我这心啦.....

当神已无能为力,就让爷来普度众生吧!
2007-11-08 16:57
快速回复:说下关于映射大对象(Blob,Clob)数据类型在Oracle中的处理....希望对大 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031368 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved