JAVA操作CLOB类型的数据库字段还是有点麻烦,虽然CLOB不像BLOB那样是用二进制来存值,但不能当成普通的String来操作,当初操作ORACLE这种字段类型时,可把我折腾了半天,现将如何操作的步骤写了个比较详细的例子和说明,以供大家参考.
这里只写最关键的几个地方,其它的地方平时该怎么写就怎么写
首先是POJO类:
import java.sql.Clob;
import java.util.Date;
public class KybasicInfo implements java.io.Serializable {
private Long infoId;
private String infoTitle;
private String
infoKeyword;
private Clob infoContent;
//注意这个地方是java.sql.Clob类型的,生成默认是String类型的,需要手工改一下
private String
infoContentToString;
//这个是和infoContent做转换时,手工添加的一个,不和数据库里的字段进行对应的
private Long
infoTop;
private String userSno;
private Date infoTime;
private Long
icId;
private String infoStandby1;
private String infoStandby2;
private
String infoStandby3;
private Long infoStandby4;
private Long
infoStandby5;
private Long infoStandby6;
public KybasicInfo() {
}
public KybasicInfo(String infoTitle, String
infoKeyword,
Clob infoContent, Long infoTop, String
userSno,
Date infoTime, Long icId, String infoStandby1,
String infoStandby2,
String infoStandby3, Long
infoStandby4, Long infoStandby5,
Long infoStandby6)
{
this.infoTitle = infoTitle;
this.infoKeyword =
infoKeyword;
this.infoContent = infoContent;
this.infoTop = infoTop;
this.userSno = userSno;
this.infoTime = infoTime;
this.icId=icId;
this.infoStandby1 = infoStandby1;
this.infoStandby2 =
infoStandby2;
this.infoStandby3 = infoStandby3;
this.infoStandby4 = infoStandby4;
this.infoStandby5 =
infoStandby5;
this.infoStandby6 = infoStandby6;
}
public Long getInfoId() {
return this.infoId;
}
public void setInfoId(Long infoId) {
this.infoId =
infoId;
}
public String getInfoTitle() {
return
this.infoTitle;
}
public void setInfoTitle(String infoTitle) {
this.infoTitle =
infoTitle;
}
public String getInfoKeyword() {
return
this.infoKeyword;
}
public void setInfoKeyword(String infoKeyword) {
this.infoKeyword = infoKeyword;
}
public Clob getInfoContent() {
return
this.infoContent;
}
public void setInfoContent(Clob infoContent) {
this.infoContent = infoContent;
}
public Long getInfoTop() {
return this.infoTop;
}
public void setInfoTop(Long infoTop) {
this.infoTop =
infoTop;
}
public Date getInfoTime() {
return this.infoTime;
}
public void setInfoTime(Date infoTime) {
this.infoTime =
infoTime;
}
public String getInfoStandby1() {
return
this.infoStandby1;
}
public void setInfoStandby1(String infoStandby1) {
this.infoStandby1 = infoStandby1;
}
public String getInfoStandby2() {
return
this.infoStandby2;
}
public void setInfoStandby2(String infoStandby2) {
this.infoStandby2 = infoStandby2;
}
public String getInfoStandby3() {
return
this.infoStandby3;
}
public void setInfoStandby3(String infoStandby3) {
this.infoStandby3 = infoStandby3;
}
public Long getInfoStandby4() {
return
this.infoStandby4;
}
public void setInfoStandby4(Long infoStandby4) {
this.infoStandby4 = infoStandby4;
}
public Long getInfoStandby5() {
return
this.infoStandby5;
}
public void setInfoStandby5(Long infoStandby5) {
this.infoStandby5 = infoStandby5;
}
public Long getInfoStandby6() {
return
this.infoStandby6;
}
public void setInfoStandby6(Long infoStandby6) {
this.infoStandby6 = infoStandby6;
}
public String getUserSno() {
return userSno;
}
public void setUserSno(String userSno) {
this.userSno =
userSno;
}
public Long getIcId() {
return icId;
}
public void setIcId(Long icId) {
this.icId = icId;
}
public String getInfoContentToString() {
return
infoContentToString;
}
public void setInfoContentToString(String infoContentToString)
{
this.infoContentToString = infoContentToString;
}
}
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="kymanage.kybasic.vo.KybasicInfo" table="KYBASIC_INFO"
schema="BL">
<id
name="infoId"
type="java.lang.Long">
<column name="INFO_ID" precision="22" scale="0"
/>
<generator
class="sequence">
<param
name="sequence">INFO_ID</param>
</generator>
</id>
<property
name="infoTitle"
type="java.lang.String">
<column name="INFO_TITLE" length="100"
/>
</property>
<property
name="infoKeyword"
type="java.lang.String">
<column name="INFO_KEYWORD" length="100"
/>
</property>
<!--注意:这里要将默认生成的String类型改成java.sql.Clob-->
<property name="infoContent"
type="java.sql.Clob">
<column name="INFO_CONTENT"
/>
</property>
<property name="infoTop"
type="java.lang.Long">
<column name="INFO_TOP" precision="38" scale="0"
/>
</property>
<property
name="userSno"
type="java.lang.String">
<column name="USER_SNO" length="100"
/>
</property>
<property
name="infoTime"
type="java.util.Date">
<column name="INFO_TIME" length="7"
/>
</property>
<property
name="icId"
type="java.lang.Long">
<column name="IC_ID" precision="38" scale="0"
/>
</property>
<property
name="infoStandby1"
type="java.lang.String">
<column name="INFO_STANDBY1" length="100"
/>
</property>
<property
name="infoStandby2"
type="java.lang.String">
<column name="INFO_STANDBY2" length="100"
/>
</property>
<property
name="infoStandby3"
type="java.lang.String">
<column name="INFO_STANDBY3" length="100"
/>
</property>
<property
name="infoStandby4"
type="java.lang.Long">
<column name="INFO_STANDBY4" precision="38" scale="0"
/>
</property>
<property
name="infoStandby5"
type="java.lang.Long">
<column name="INFO_STANDBY5" precision="22" scale="0"
/>
</property>
<property
name="infoStandby6"
type="java.lang.Long">
<column name="INFO_STANDBY6" precision="22" scale="0"
/>
</property>
</class>
</hibernate-mapping>
hibernate DAO类:
import oracle.sql.CLOB;
import java.io.IOException;
import java.io.Writer;
import
java.sql.Clob;
import java.sql.SQLException;
import
java.util.Date;
import java.util.Iterator;
import
java.util.List;
import org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
import org.hibernate.Hibernate;
import org.hibernate.LockMode;
import
org.hibernate.Query;
import
org.hibernate.Session;
import
org.hibernate.Transaction;
import
org.hibernate.lob.SerializableClob;
import
org.springframework.context.ApplicationContext;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class KybasicInfoDAOImpl extends HibernateDaoSupport {
protected void initDao() {
}
//新增,在action里将表单中的这个大文本按正常情况传过来,也就是传String类型过来,然后,再在DAO里做Clob类型转换,
//这里面可能会有其它层来传参,但最终还是将传过来的Stirng转换成Clob型的,然后通过文件流形式写入到CLOB字段中去
public
void save(KybasicInfo kybasicInfo) {
try {
Session session =
getHibernateTemplate().getSessionFactory().getCurrentSession();
Transaction tran=session.beginTransaction();
kybasicInfo.setInfoContent(Hibernate.createClob("
"));//注意,这里的参数是个空格,先新增一个空的Clob进去
session.save(kybasicInfo);
session.flush();//强制执行
session.refresh(kybasicInfo,LockMode.UPGRADE);
SerializableClob
sc=(SerializableClob)kybasicInfo.getInfoContent();//kybasicInfo.getInfoContent()是Clob类型的
Clob wrapclob=sc.getWrappedClob();//这里的Clob是java.sql.Clob
CLOB clob=(CLOB)wrapclob;//这里的CLOB是oracle.sql.CLOB
Writer
writer=clob.getCharacterOutputStream();
writer.write(kybasicInfo.getInfoContentToString());//kybasicInfo.getInfoContentToString()是String类型的,在action里就是传这个进来,然后再通过文件流形式写成CLOB字段中
writer.close();
session.save(kybasicInfo);
tran.commit();
} catch
(RuntimeException re) {
throw re;
} catch
(SQLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
//更新,操作的新增是一样的,都是先接收String类型的参数过来,然后再将String的转成CLOB类型的
public
void update(KybasicInfo persistentInstance) {
try
{
Session session =
getHibernateTemplate().getSessionFactory().getCurrentSession();
Transaction tran=session.beginTransaction();
persistentInstance.setInfoContent(Hibernate.createClob("
"));
session.update(persistentInstance);
session.flush();
session.refresh(persistentInstance,LockMode.UPGRADE);
SerializableClob
sc=(SerializableClob)persistentInstance.getInfoContent();
Clob wrapclob=sc.getWrappedClob();
CLOB
clob=(CLOB)wrapclob;
Writer
writer=clob.getCharacterOutputStream();
writer.write(persistentInstance.getInfoContentToString());
writer.close();
session.update(persistentInstance);
tran.commit();
} catch (RuntimeException re)
{
throw re;
} catch (SQLException e)
{
e.printStackTrace();
} catch
(IOException e) {
e.printStackTrace();
}
}
//读取Clob字段值
public KybasicInfo findById(java.lang.Long id)
{
try {
KybasicInfo instance =
(KybasicInfo) getHibernateTemplate().get(
"kymanage.kybasic.vo.KybasicInfo", id);
Clob
clob=instance.getInfoContent();//取得Clob的值
if(clob!=null){
String
clobString="";
try
{
clobString = clob.getSubString(1,
(int)clob.length());//将Clob类型的值转换成String类型的值
instance.setInfoContentToString(clobString);//通过setter方法,设置String值,然后就可以通过instance.getInfoContentToString()来取值了
} catch (SQLException e) {
e.printStackTrace();
}
}
return instance;
} catch
(RuntimeException re) {
throw re;
}
}
public static KybasicInfoDAOImpl
getFromApplicationContext(
ApplicationContext ctx)
{
return (KybasicInfoDAOImpl)
ctx.getBean("KybasicInfoDAO");
}
}
分享到:
相关推荐
JDBC读写Oracle的CLOB字段
本文将详细介绍如何在Oracle中实现CLOB字段到字符串类型的转换,并探讨其中的关键技术和注意事项。 #### 一、CLOB概述 1. **定义**: - `CLOB`是Oracle数据库提供的一种特殊的数据类型,用于存储大文本数据。 - ...
Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)类型的字段来存储这些数据。下面我们将...
在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。
在Hibernate框架中,Clob类型的字段处理是数据库操作中的一个关键环节,尤其是在处理大量文本数据时。以下是对Oracle Clob在Hibernate中应用的详细总结: 3.1 传统的JDBC方式: 在没有使用ORM框架之前,我们通常...
在Java中,Oracle的CLOB操作通常涉及到以下几个关键步骤: 1. **建立数据库连接**: - 使用`DriverManager.getConnection()`方法,传入数据库URL、用户名和密码来创建数据库连接。例如: ```java Connection ...
在处理Oracle数据库时,经常会遇到需要读取CLOB(Character Large Object)类型字段的情况。CLOB主要用于存储大量的文本数据,如文章、文档等内容。由于CLOB类型的数据量可能非常大,因此在读取时需要特别注意性能和...
在本文中,我们将讨论如何将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中。 Image 类型在 SQL Server 中的应用 在 SQL Server 中,Image 类型用于存储二进制大对象(BLOB),如图像、音频、视频...
本篇将详细讲解如何在ASP.NET中操作Oracle的CLOB字段。 首先,要进行Oracle数据库操作,我们需要安装Oracle的数据提供程序,如ODP.NET(Oracle Data Provider for .NET)。这个驱动程序允许ASP.NET应用程序与Oracle...
在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为CLOB字段在远程数据库中的处理方式与本地数据库不同所导致的。下面将讨论解决dblink_clob字段异常的解决方案。 什么是dblink? DBLink...
在 Oracle 数据库中,CLOB 行字段是用于存储大文本数据的数据类型。CLOB 字段可以存储大量的文本数据,超过 4000 字的文本一般存储在 CLOB 中。例如,在创建表结构时,我们可以使用以下 SQL 语句: ``` create ...
在Oracle数据库中,CLOB(Character Large Object)字段类型用于存储大量的文本数据,如XML文档、长篇文章或者大量字符数据。然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-...
Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...
本主题“hibernate动态映射表处理Oracle的CLOB类型”主要聚焦于如何在Hibernate中有效地管理和操作CLOB字段。在Oracle 10g中,CLOB数据类型的处理有时会遇到一些挑战,尤其是在与ORM框架结合使用时。以下将详细介绍...
在Oracle数据库中,CLOB(Character Large Object)类型字段用于存储大量的文本数据,如XML文档、长篇文章等。由于其特殊性,处理CLOB类型的字段时可能会遇到性能问题,特别是当涉及索引时。本话题将围绕如何针对...
本文将详细介绍如何在Spring与Hibernate框架结合的情况下,有效地处理Oracle 10g数据库中的CLOB字段。 #### 一、环境配置 为了确保项目能够顺利运行,首先需要搭建好开发环境。本示例中使用的环境配置如下: 1. *...
本文将详细介绍如何使用Java对Oracle中的CLOB类型字段进行操作。 #### CLOB简介 CLOB是Oracle数据库用于存储大型文本数据的一种数据类型,它可以存储最大为4GB的字符数据。在处理CLOB数据时,通常会涉及到以下几种...
Oracle如何插入CLOB字段值,附件为简单的示例代码。Oracle如何插入CLOB字段值,附件为简单的示例代码。