项目中遇到要对Oralce数据库的CLOB字段进行处理的问题,即实现对CLOB值的插入,更新,查询。 Clob的的操作一般有三种方法:1。JDBC的方法。2:把clob当作String来处理。3.直接使用Clob。这里我介绍的是第三种方法。使用 Hibernate3 来管理数据库的连接session。
这里用第三种方法。
1.在实体类里 定义一个CLOB 类型 和一个对它辅助用的字符串类型属性。如下:
private Clob clobnewscontent;
private String newscontent;
对应的映射文件由于newscontent只是辅助作用在数据库表里没有对应的列。所以不用配置。clobnewscontent属性配置如下:
<property name="clobnewscontent" type="clob" update="true" insert="true" >
<column name="NEWSCONTENT" />
</property>
newscontent用于接收页面传来的字符串信息。
下面说具体写入数据处理
插入: Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();
news.setClobnewscontent(Hibernate.createClob(" "));
tx=session.beginTransaction();
session.save(news);
session.flush();
session.refresh(news, LockMode.UPGRADE);
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
String contentStr = news.getNewscontent();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();
读取查询:
News news = new News();
news = newsDao.findNewsByID(id);
Clob clob = news.getClobnewscontent();
String contentStr = "";
if(clob != null)
contentStr = clob.getSubString(1, (int)clob.length());
news.setNewscontent(contentStr);
//news.setNewscontent(HtmlUtils.htmlUnescape(news.getNewscontent()));
return news;
修改:Session session= null;
Transaction tx =null;
try{
session =this.getHibernateTemplate().getSessionFactory().openSession();
news.setClobnewscontent(Hibernate.createClob(" "));
tx=session.beginTransaction();
session.saveOrUpdate(news);
session.flush();
session.refresh(news, LockMode.UPGRADE);
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob)news.getClobnewscontent();
java.sql.Clob wrapClob = (java.sql.Clob) cb.getWrappedClob();
if(wrapClob instanceof oracle.sql.CLOB){
oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
java.io.Writer writer = clob.getCharacterOutputStream();
writer.write(news.getNewscontent());
writer.close();
}
tx.commit();
session.close();
分享到:
相关推荐
在IT行业中,数据库管理和持久化框架是至关重要的...通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际项目中有效地处理大文本数据。如有任何疑问,欢迎继续交流探讨。
其中,处理 Oracle 数据库中的 CLOB 类型数据是一项重要的技能。CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型,在 Oracle 数据库中广泛使用。下面我们将详细介绍如何使用 Hibernate 来存取 ...
对于大数据量的Clob字段,推荐直接使用Clob类型进行操作。在实体类中定义Clob类型的属性,并在Hibernate映射文件中相应配置。这样可以避免一次性加载整个Clob内容到内存,从而降低内存消耗。 4.1 基本配置: 4.1.1 ...
4. 在Hibernate的配置文件中添加"hibernate.connection.SetBigStringTryClob"属性,这对于Oracle数据库是必须的,以确保可以将大字符串存储为Clob类型。 5. 进行存取测试以验证配置的有效性。 传统存储方式则是将...
在Oracle数据库中,LOB字段主要有BLOB(Binary Large Object)和CLOB(Character Large Object)两种类型,分别用于存储二进制和字符数据。处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中...
这种方式适合处理大数据量的文本,因为它允许直接与数据库的Clob类型进行交互,无需经过字符串的转换。 **配置部分**: 4.1.1 **实体类**: 在实体类中,你需要定义一个Clob类型的属性,例如`private Clob ...
例如,Oracle和MySQL在处理大对象时有各自的API和策略。 总结,Hibernate通过`@Lob`注解支持BLOB和CLOB的持久化,开发者需要适当地将数据转换为对应的对象类型,然后使用Hibernate的CRUD操作进行保存和检索。同时,...
在Java的持久化框架Hibernate中,BLOB和CLOB是用来处理大数据对象(Binary Large Object和Character Large Object)的。这两个类型常用于存储图像、视频、大文本等数据,因为它们可以容纳超过数据库标准列大小限制的...
- CLOB(字符大对象):用于存储大型文本数据,与字符集相关联,支持文本型数据,如历史档案、大型著作等。 - BLOB(二进制大对象):用于存储大型二进制数据,如影像、图片等,其长度可达4GB,支持随机存取。 - ...
这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...
在Java的持久化框架Hibernate中,处理大数据类型如Clob(Character Large Object)和Blob(Binary Large Object)是常见的需求,这些数据类型通常用于存储大量的文本或二进制数据。Oracle数据库提供了支持Clob和Blob...
- Hibernate提供了更高级的抽象,使得处理大对象更加方便。在配置文件中,可以将`CLOB`映射为`clob`,`BLOB`映射为`binary`。 - 例如,在Hibernate的实体类中,可以这样定义字段: ```java @Lob private String...
在Java编程语言中,我们使用各种数据类型来表示不同类型的数据,如整数、浮点数、字符、布尔值等。然而,在与数据库交互时,这些数据类型需要与数据库中的相应字段类型进行映射。Hibernate,作为一款流行的Java持久...
在SQL标准中,BLOB(Binary Large Object)和CLOB(Character Large Object)用于存储大量的二进制数据和字符数据,分别对应于图片、音频、视频等非文本数据和长文本。在Hibernate中,我们通常使用`Blob`和`Clob`...
在处理大数据量或大字段时,我们需要采取特殊策略以确保系统的高效性和稳定性。这个压缩包文件"spring1.2+hibernate3对大字段的处理实例"提供了一个具体的案例,演示了如何在Spring 1.2和Hibernate 3框架下解决这个...
同时,为了提高效率,可以考虑将数据分块读写,特别是处理大文件时。此外,Clob类型通常用于存储文本数据,例如文章内容,与图片存储无关,但其处理方式与Blob类似,只是涉及到字符流而不是二进制流。在本例中,我们...
CLOB数据类型用于存储大型字符数据,如文本、字符串等。在JDBC中,对CLOB数据类型的操作主要包括读取和写入操作。 读取CLOB数据 读取CLOB数据主要通过Java.sql.Clob接口实现。下面是一个基本的读取CLOB数据的示例...
- 当处理大量数据或大字段时,如BLOB或CLOB类型,需要注意内存管理和数据库性能。可以使用`lob`类型映射,或者考虑使用游标(Cursor)进行分批处理,以减少内存占用并提高性能。 5. **Hibernate主键生成器(数值型...
13. `String`: 映射到 `CLOB` (Oracle的 `Clob`),用于存储字符大对象,如长文本。 14. `java.sql.Clob`: 直接映射到 `CLOB` (Oracle的 `Clob`)。 15. `java.sql.Blob`: 直接映射到 `Blob` (Oracle的 `Blob`)。 ...
如果使用Hibernate等ORM框架,它们提供了对大对象的集成支持,例如Hibernate的`@Lob`注解,可以自动处理Blob或Clob。 7. **报表应用**: 大对象在报表应用中的作用主要是存储和展示非结构化数据。例如,报告可能...