最近项目中(SSH2+ORACLE 10g)出现对长字符串处理的问题终于搞定了,在此记录一下
表中有一个字段 content clob
create table table_name
(
...
content clob not null,
...
)
(1)在使用ojdbc14.jar的情况下(批量处理有影响)
使用注解
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(columnDefinition="CLOB", nullable=false)
public String getContent() {
return content;
}
如果设置了
<!-- 数据库批量更新数 -->
hibernate.jdbc.batch_size=0
此时是没问题的
但设置了批量更新数的话就不可以了 如
hibernate.jdbc.batch_size=30
当汉字字符串长度大于666,插入数据必须使用流式方式,且最大长度不能超过2000个中文字符.当采用流式方式插入数据时,不能使用批处理
原因是PreparedStatement.setStringindex,StringValue)方法对StringValue的char长度有限制,并且一个中文字符占3个char,故只能输入666个汉字。插入英文字符时,至多只能插入2000个
(2)在使用classes12.jar的情况下(批量处理没有影响)
直接使用注解即可
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(columnDefinition="CLOB", nullable=false)
public String getContent() {
return content;
}
或者使用
@Type(type="org.springframework.orm.hibernate3.support.ClobStringType")
public String getContent() {
return content;
}
此时要配置一下
<!--定义一个 lobHandler-->
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
<!--lobHandler必须注入到Hibernate会话工厂sessionFactory中-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="lobHandler" ref="lobHandler"/>
...
</bean>
至此 对象中直接申明成String就可以处理clob类型
分享到:
相关推荐
在IT行业中,数据库管理和持久化框架是至关重要的...通过以上内容,你应该对在Hibernate中动态映射Oracle 10g的CLOB类型有了深入理解,这将帮助你在实际项目中有效地处理大文本数据。如有任何疑问,欢迎继续交流探讨。
在Hibernate中,如果Clob字段的值是字符串,可以通过将Clob字段映射为String类型,让Hibernate自动处理转换。这种方式简单易用,但可能不适合非常大的文本,因为可能会导致内存溢出。 3.3 直接使用Clob类型: 对于...
4. 在Hibernate的配置文件中添加"hibernate.connection.SetBigStringTryClob"属性,这对于Oracle数据库是必须的,以确保可以将大字符串存储为Clob类型。 5. 进行存取测试以验证配置的有效性。 传统存储方式则是将...
Clob”类型在数据库中主要用于存储大对象(Large Object),如长文本、XML文档等大量数据。在Oracle数据库中,Clob是用来存储可变长度的非结构化数据,如长篇文字、HTML文档等。在Java世界中,尤其是在持久化框架...
在Java的持久化框架Hibernate中,处理大数据类型如BLOB(Binary Large Object)和CLOB(Character Large Object)是一项常见的任务。BLOB用于存储二进制数据,如图片、视频或文档,而CLOB则用于存储大文本数据,如...
// 设置CLOB,这里用的是单字符字符串 session.save(u); // 保存到数据库,但还未提交事务 ``` 为了实际读取和写入BLOB和CLOB,你需要从文件系统读取数据,然后将其转换为InputStream或Reader,再使用Hibernate...
在Oracle数据库中,LOB字段主要有BLOB(Binary Large Object)和CLOB(Character Large Object)两种类型,分别用于存储二进制和字符数据。处理这些字段时,我们需要配置Hibernate的实体类和映射文件。 在实体类中...
`VARCHAR2` 在 Oracle 中代替 `VARCHAR`,而 `NVARCHAR2` 用于 Unicode 字符串。因此,在实际应用中,开发者需要根据所使用的数据库系统进行适当的调整。 **3. 使用 Hibernate 数据类型** 在 Hibernate 中,数据...
- LONG和LONG RAW:用于存储可变长的字符串数据和二进制数据,但有长度限制,每个表中只能有一个LONG字段,并且最长为2GB。 - CLOB(字符大对象):用于存储大型文本数据,与字符集相关联,支持文本型数据,如历史...
13. `String`: 映射到 `CLOB` (Oracle的 `Clob`),用于存储字符大对象,如长文本。 14. `java.sql.Clob`: 直接映射到 `CLOB` (Oracle的 `Clob`)。 15. `java.sql.Blob`: 直接映射到 `Blob` (Oracle的 `Blob`)。 ...
CLOB数据类型用于存储大型字符数据,如文本、字符串等。在JDBC中,对CLOB数据类型的操作主要包括读取和写入操作。 读取CLOB数据 读取CLOB数据主要通过Java.sql.Clob接口实现。下面是一个基本的读取CLOB数据的示例...
用于存储可变长度的字符串。 9. `byte`:映射Java的`byte`或`Byte`类型,对应的SQL类型是`TINYINT`。用于存储小整数。 10. `boolean`:映射Java的`boolean`或`Boolean`类型,对应的SQL类型是`BIT`。在某些数据库中...
- 如果数据库支持UTF-8编码,确保所有字符串字段都设置为UTF-8格式。在Hibernate配置中,也需要配置字符集,如`hibernate.connection.characterEncoding=UTF-8`,以保证数据的正确存储和读取。 总之,为了实现...
当处理大数据字段,如长文本、图片或视频等时,Hibernate提供了有效的方法来存储和检索这些数据。本示例将详细介绍如何在Hibernate中操作数据库的大字段。 首先,我们来理解“大字段”在数据库中的概念。在SQL标准...
- `uuid`:生成32位的UUID字符串作为主键。 理解并掌握这些基本概念和用法,是深入学习Hibernate的关键,对于提升Java Web开发能力大有裨益。在实践中,还需要结合具体项目需求,灵活运用和优化这些技术。
- **字符串类型**:学习VARCHAR2、CHAR等字符串类型的使用。 - **日期时间类型**:了解DATE、TIMESTAMP等日期时间类型的使用方法。 - **LOB类型**:掌握BLOB、CLOB等大对象类型的使用技巧。 #### 十一、Oracle体系...
基本数据类型如整型、字符串等可以直接映射到 Java 类型。对于时间相关的类型,有以下映射: - `date`:映射到 `java.util.Date` 或 `java.sql.Date`,仅包含日期部分。 - `time`:映射到 `java.util.Time` 或 `...
Oracle JDBC驱动提供了处理大型对象(如BLOB和CLOB)的功能。通过`PreparedStatement`中的`setObject()`、`setBinaryStream()`和`setCharacterStream()`等方法,可以方便地读取和写入LOB数据。例如: ```java ...
该错误通常出现在Spring框架中,当试图处理大型对象(如BLOB或CLOB)但Spring配置中未提供适当的LobHandler时会抛出。为了解决这个问题,需要在Spring配置文件中添加对LobHandler的支持。 ### 错误六:at java.util...