`
blueram
  • 浏览: 762504 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

映射大对象(Blob,Clob)数据类型在Oracle中的处理

阅读更多
原文:http://bbs.bccn.net/thread-184564-1-1.html
说下关于映射大对象(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的操作我就不多说了,嘿嘿,相信以您的聪明才智,一定知道该怎么改了.

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

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

 

分享到:
评论

相关推荐

    Mybatis 处理 CLOB、BLOB 类型数据

    MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis 框架时,如何正确地处理大字段类型的数据。CLOB(Character Large OBject)和 BLOB(Binary Large OBject)都是大字段类型,用于存储大量的数据。 CLOB 类型...

    如何将DB2数据库中的大对象(BLOB,CLOB)数据类型复制到Oracle数据库中

    Oracle数据库同样支持BLOB和CLOB数据类型,但需要特殊配置来处理来自其他数据库的大对象数据。 3. **特殊配置策略**: - **联邦能力**:利用WII的联邦功能,先将DB2中的非BLOB字段复制到Oracle目标表中。 - **...

    Oracle导出Clob,Blob工具版本2

    Oracle数据库在存储大对象(BLOB和CLOB)时提供了强大的功能,但处理这些类型的数据进行导入导出可能会带来挑战。...对于那些需要频繁处理大对象数据的开发人员和DBA来说,这是一个非常有价值的工具。

    hibernate动态映射表处理oracle的clob类型

    在IT行业中,数据库管理和持久化框架是至关重要的...通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际项目中有效地处理大文本数据。如有任何疑问,欢迎继续交流探讨。

    Oracle与.Net 数据类型映射

    了解Oracle数据库与.NET数据类型的映射关系对于开发人员来说至关重要,这直接影响到数据的正确存储、检索和处理。以下是对"Oracle与.Net 数据类型映射"这一主题的详细解释。 首先,Oracle数据库提供了一系列的数据...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    使用Oracle JDBC驱动程序的一个优点是,它支持流式处理,这意味着你可以避免一次性加载整个Blob或Clob到内存中,这对于处理大文件非常有用。例如,你可以通过`setBinaryStream`和`getBinaryStream`方法读写Blob数据...

    Oracle与DB2数据类型分类对应说明

    Oracle 也支持大对象:BLOB、CLOB、NCLOB 等。例如,Oracle 中的 BLOB 和 CLOB 可以提供 4GB 的空间,而 DB2/400 中的 BLOB 和 CLOB 只能存放 2GB 的数据。 五、ROWID 类型 Oracle 中的 ROWID 虚拟列用于对表中的...

    关于Clob类型在Hibernate中 的应用小结

    Clob”类型在数据库中主要用于存储大对象(Large Object),如长文本、XML文档等大量数据。在Oracle数据库中,Clob是用来存储可变长度的非结构化数据,如长篇文字、HTML文档等。在Java世界中,尤其是在持久化框架...

    深入浅析mybatis oracle BLOB类型字段保存与读取

    在MyBatis中,通常需要自定义一个SqlSession的ExecutorType,比如使用`ExecutorType.BATCH`或`ExecutorType.SIMPLE`,以便于处理大对象。在执行插入操作时,由于BLOB数据量可能很大,批量提交可能会更有效率。 总之...

    使用hibernate对oracle读取blob

    在Java开发中,Blob(Binary Large Object)类型用于存储大对象,如图片、音频或视频文件等。...理解这些知识点对于处理大对象存储至关重要。在实际项目中,根据需求和性能考虑,选择合适的方法进行Blob数据的读写。

    java、mysql以及oracle数据类型对照表

    在Oracle中,我们有类似的数据类型,如NUMBER、VARCHAR2、DATE、CLOB等。值得注意的是,Oracle的DATE类型包含了日期和时间,而MySQL通常需要单独的DATE和TIME类型来处理日期和时间。 Java与数据库交互时,通常使用...

    Hibernate操作Oarcle中Clob、Blob字段小结

    总之,理解并熟练掌握Hibernate对Oracle中的Clob和Blob字段的操作,是Java开发人员在处理大数据时必不可少的技能,这有助于确保数据的正确存储和高效访问。通过阅读和分析提供的源码,我们可以更深入地理解其底层...

    Oracle和DB2的数据类型比较

    Oracle的BLOB/CLOB类型可以直接对应到DB2/400中的BLOB/CLOB类型,但在处理大数据量时需要注意容量限制。此外,Oracle还支持BFILE类型用于管理外部文件,而DB2/400提供了DATALINK类型作为对应。 #### 六、特殊类型 ...

    Oracle与DB2数据类型的对应说明书

    Oracle也支持大对象:BLOB、CLOB、NCLOB等。DB2/400中的BLOB和CLOB只能存放2GB的数据,而Oracle中的BLOB和CLOB可以提供4GB的空间。 五、ROWID类型 Oracle中的ROWID虚拟列用于对表中的某一列进行唯一标示,DB2/400...

    使用Jdbc4操作Blob,Clob

    当涉及到处理大型对象(LOBs)如Blobs(Binary Large Objects)和Clobs(Character Large Objects)时,JDBC4提供了一种更为便捷的方式来操作这些数据类型。这篇博客“使用Jdbc4操作Blob,Clob”将深入讲解如何利用...

    spring+hibernate 解决大字段(clob)

    在企业级应用开发中,经常会遇到需要存储大量文本或二进制数据的情况,这时就需要用到数据库的大字段类型如CLOB(Character Large Object)和BLOB(Binary Large Object)。本文将详细介绍如何在Spring与Hibernate...

    oracle数据类型和对应的JDBC类型.docx

    - `BLOB` 和 `CLOB`:Oracle 中的大对象类型,用于存储大量二进制或字符数据,映射为 `oracle.sql.BLOB` 和 `oracle.sql.CLOB`。 - `ARRAY` 和 `STRUCT`:用于存储数组和结构化数据,映射为 `java.sql.Array` 和 `...

    Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf

    通过Struts2与Hibernate框架的结合,开发者可以构建稳定高效的Web应用,特别是在涉及到需要存储和展示二进制大对象(BLOB)数据的场景中,这种集成方案能够充分发挥各自框架的优势,简化数据库操作,提升开发效率和...

    Java数据类型与各数据库类型映射一览表

    在本表格中,我们可以看到不同的数据类型,如 BIGINT、BINARY、BIT、BLOB、CHAR、CLOB、DATE、DECIMAL、DOUBLE、FLOAT、INTEGER、JAVA_OBJECT、LONGVARCHAR、NUMERIC、OTHER、REAL、SMALLINT、TIME、TIMESTAMP、...

Global site tag (gtag.js) - Google Analytics