1.实体类 1
2.映射文件 2
3.实体Form 3
4.Hibernate的Helper 3
5.Clob的插入 5
6.Clob的修改 5
7.Clob的读取 6
8.Clob的删除 6
项目中遇到要对Oralce数据库的CLOB字段进行处理的问题,即实现对CLOB值的插入,更新,查询。 Clob的的操作一般有三种方法:1。JDBC的方法。2:把clob当作String来处理。3.直接使用Clob。这里我介绍的是第三种方法。使用 Hibernate3 来管理数据库的连接session。
1.实体类
Entity实休类PublicInfo.Java结构如下,contentString为辅助字段,不映射到数据库中,这里注意的是映射到hbm.xml中的content字段的属性设type=”clob”就行了。
import java.io.Serializable;
import java.sql.Clob;
import java.util.Date;
/**
* @author ZhangWenRui
* @hibernate.class
*/
public class PublicInfo implements Serializable{
private Long id;
private String contentString;
private Clob content;//内容
/**
* @hibernate.id generator-class = "sequence" length = "16"
* @hibernate.generator-param name="sequence" value="seq_information"
* @return
*/
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* @hibernate.property type="clob"
* @return
*/
public Clob getContent() {
return content;
}
public void setContent(Clob content) {
this.content = content;
}
public String getContentString() {
return contentString;
}
}
2.映射文件
PublicInfo.hbm.xml映射文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class
name="com.eclink.publicinfo.entity.PublicInfo"
table="publicInfo"
>
<id
name="id"
column="id"
type="java.lang.Long"
length="16"
>
<generator class="sequence">
<param name="sequence">seq_information</param>
</generator>
</id>
<property
name="content"
type="clob"
update="true"
insert="true"
column="content"
/>
</class>
</hibernate-mapping>
3.实体Form
import org.apache.struts.validator.ValidatorForm;
/**
* @struts.form name="publicInfoForm" include-all = "true"
* @author ZhangWenRui
*
*/
public class PublicInfoForm extends ValidatorForm{
private String contentString;
public String getContentString() {
return contentString;
}
public void setContentString(String contentString) {
this.contentString = contentString;
}
}
4.Hibernate的Helper
hibernate.cfg.xml放置于/WEB-INF/hibernate.cfg.xml下。
HibernateUtils用于管理Hibernate的sessionfactory.
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author ZhangWenRui
*/
public class HibernateUtils {
private static SessionFactory sessionFactory;
static Configuration configuration = new Configuration().configure("../hibernate.cfg.xml");
static{
try {
sessionFactory = configuration.buildSessionFactory();
} catch (Throwable e) {
System.out.println("create sessionFactory failed!");
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static void initialize(Object proxy) {
if (proxy != null){
try {
Hibernate.initialize(proxy);
} catch (HibernateException e) {
throw new RuntimeException("Can't initialize hibernate proxy", e);
}
}
}
}
hibernate.cfg.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.0.2:1521:info</property>
<property name="hibernate.connection.username">info</property>
<property name="hibernate.connection.password">info</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>
<property name="hibernate.jdbc.batch_size">20</property>
<mapping resource="com/publicinfo/entity/PublicInfo.hbm.xml" />
</session-factory>
</hibernate-configuration>
5.Clob的插入
public void addPublicInfo(PublicInfo publicInfo) throws SQLException, IOException {
org.hibernate.Session session = HibernateUtils.getSessionFactory().openSession();//建立一个session
Transaction tx = session.beginTransaction();//事务
publicInfo.setContent(Hibernate.createClob(" "));//插入空的clob值
session.save(publicInfo);
session.flush();
session.refresh(publicInfo, LockMode.UPGRADE);//锁定
org.hibernate.lob.SerializableClob cb = (org.hibernate.lob.SerializableClob) publicInfo.getContent();
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 = publicInfo.getContentString();
writer.write(contentStr);
writer.close();
}
tx.commit();
session.close();
}
6.Clob的修改
public void updatePublicInfo(PublicInfo publicInfo) throws SQLException, IOException {
Session session = HibernateUtils.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
publicInfo.setContent(Hibernate.createClob(" "));
session.saveOrUpdate(publicInfo);
session.flush();
session.refresh(publicInfo, LockMode.UPGRADE);
SerializableClob cb = (SerializableClob) publicInfo.getContent();
Clob wrapClob = (Clob) cb.getWrappedClob();
if(wrapClob instanceof CLOB){
CLOB clob = (CLOB) wrapClob;
Writer writer = clob.getCharacterOutputStream();
String contentStr = publicInfo.getContentString();
writer.write(contentStr);
writer.close();
}
tx.commit();
session.close();
}
7.Clob的读取
Clob clob = publicInfo.getContent();
String contentStr = "";
if(clob != null)
contentStr = clob.getSubString(1, (int)clob.length());
8.Clob的删除
由于删除操作不需要对Clob类型作特殊处理,只要通过id找出相应的实体删掉就行。
分享到:
相关推荐
Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和注意事项: 1. **配置SessionFactory** 在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`...
- 在Hibernate的实体类中,我们需要为Clob和Blob字段定义对应的属性,并使用`@Lob`注解来标记它们。例如: ```java @Lob private Clob largeText; @Lob private Blob binaryData; ``` - 对于Clob,可以使用`...
本文将详细介绍如何在Hibernate中操作Blob和Clob字段,实现数据的存储与读取。 首先,我们需要在Hibernate映射文件(.hbm.xml)中定义Blob和Clob字段。对于Blob,可以这样声明: ```xml ``` 这里的`name`属性...
同时,Hibernate的实体映射文件(例如`Users.hbm.xml`)用于定义实体类与数据库表之间的映射关系,其中包括了如何处理BLOB和CLOB字段。 以`Users.hbm.xml`为例,假设我们有一个`Users`实体类,其中有一个`...
对于大数据量的Clob字段,推荐直接使用Clob类型进行操作。在实体类中定义Clob类型的属性,并在Hibernate映射文件中相应配置。这样可以避免一次性加载整个Clob内容到内存,从而降低内存消耗。 4.1 基本配置: 4.1.1 ...
此外,对于频繁读取的CLOB字段,可以考虑将其索引或部分内容缓存。 最后,虽然Hibernate提供了便捷的接口,但在处理BLOB和CLOB时,还需要了解所用数据库的特性,因为不同的数据库可能有不同的限制和最佳实践。例如...
在保存或更新带有Clob和Blob字段的实体时,Hibernate会自动处理这些数据的插入和更新操作。例如,当你调用`session.saveOrUpdate(entity)`或`entityManager.persist(entity)`时,Hibernate会将Clob和Blob的内容正确...
下面我们将详细介绍如何使用 Hibernate 来存取 Oracle 的 CLOB 数据。 #### 1. 理解 CLOB 在 Oracle 中,CLOB 用于存储大量的文本数据,如文章、文档等。CLOB 支持 Unicode 字符集,因此非常适合用来存储多语言...
在Hibernate的XML映射文件中,你需要为这个Clob字段指定映射规则,例如: ```xml <property name="summaryClob" type="org.hibernate.type.ClobType"> <column name="SUMMARY_CLOB" /> ``` **CRUD操作**: ...
本主题“hibernate动态映射表处理Oracle的CLOB类型”主要聚焦于如何在Hibernate中有效地管理和操作CLOB字段。在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍...
当需要从数据库读取Blob时,可以使用Hibernate的`Session`对象来获取实体,Blob内容会被自动读取: ```java MediaEntity media = session.get(MediaEntity.class, id); InputStream blobInputStream = media....
// 对应数据库中的CLOB字段 // getters and setters } ``` `@Lob`注解表明`content`字段是大字段类型,Hibernate会自动处理它的存储和读取。 **三、持久化操作** 1. **保存/更新大字段**:在保存或更新实体时...
对于CLOB字段,可以使用`StringWriter`和`Reader`来处理文本内容: ```java StringWriter writer = new StringWriter(); writer.write("Your text content here..."); myEntity.setDescription(writer.toString());...
3. **插入与更新**:当向数据库中插入或更新包含Clob字段的记录时,Hibernate会自动处理这些数据。可以使用`session.save()`或`session.update()`方法,但在实际使用中,我们通常需要使用`session.merge()`,因为它...
在查询和更新Blob和Clob字段时,我们可以使用`getBlob()`和`getClob()`方法获取数据,然后进行读取或修改。注意,处理完Blob和Clob数据后,记得关闭相关的流资源以避免内存泄漏。 总结来说,Blob和Clob是数据库中...
其次,Hibernate 3是一个流行的Java持久化框架,它将对象关系映射(Object-Relational Mapping, ORM)技术应用于数据库操作,使得开发人员可以使用面向对象的方式来操作数据库。在处理大字段时,Hibernate提供了Blob...
在 Java 中,处理 Clob 和 Blob 类型需要使用特殊的注解配置来确保正确地读取和写入数据。 一、Clob 类型的注解配置 在 Java 中,处理 Clob 类型需要使用 @Lob 注解来指定该字段为大规模字符数据类型。@Lob 注解...