使用Spring解决CLOB字段的存取,记录一下,以备后用zzzzzzz...
首先使用网络上提供较多的解决办法,如下配置
<prop key="hibernate.connection.SetBigStringTryClob">true</prop>
<property name="context" type="text" column="context" />
private String context;//getter & setter 然后直接save BO :报错
Caused by: java.sql.SQLException: 不允许的操作: streams type cannot be used in batching
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:4073)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:172)
at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:53)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2275)
... 67 more
网友介绍,可以配置,<prop key="hibernate.jdbc.batch_size">0</prop>解决上述异常;系统里到处是批量提交,此方法不可取;
还有介绍:先保存CLOB字段为空,第二次update,却遇到CLOB类型转换异常;感觉挺麻烦,继续google[切换关键字组合];
下面是成功简单解决办法
writeLog() ,调用者要声明事物,没必要把writeLog放到一个独立事物里(PROPAGATION_REQUIRES_NEW)或放到嵌套事物里;
saveXXX(){ --<prop key="save*">PROPAGATION_REQUIRED</prop>即可
//business
writeLog();
}
<!-- Spring-hibernate.xml -->
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" />
<bean id="lobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="lobHandler"><ref bean="lobHandler"/></property>
....
</bean>
<!--BO.hbm.xml-->
<property name="context"
type="org.springframework.orm.hibernate3.support.ClobStringType"
column="context" />
<!-- BO.java-->
private String context; //getter & setter 然后就可以使用Hibernate保存BO:OK
如果不配置事物,会报下列异常
//Spring 处理CLOB,未配置事物
Caused by: java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with specified [javax.transaction.TransactionManager] required
at org.springframework.jdbc.support.lob.LobCreatorUtils.registerTransactionSynchronization(LobCreatorUtils.java:79)
at org.springframework.orm.hibernate3.support.AbstractLobType.nullSafeSet(AbstractLobType.java:185)
at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:169)
文章引用:
http://space.itpub.net/10714335/viewspace-167565
环境:用jdk1.6.0_21+apache-tomcat-6.0.29+ojdbc14.jar+oracle10_db
分享到:
相关推荐
dblink_clob字段异常解决方案 在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为CLOB字段在远程数据库中的处理方式与本地数据库不同所导致的。下面将讨论解决dblink_clob字段异常的解决...
Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)类型的字段来存储这些数据。下面我们将...
### 读取Oracle数据库中CLOB字段的值 在处理Oracle数据库时,经常会遇到需要读取CLOB(Character Large Object)类型字段的情况。CLOB主要用于存储大量的文本数据,如文章、文档等内容。由于CLOB类型的数据量可能...
JDBC读写Oracle的CLOB字段
2. **执行查询语句**:使用SQL语句查询包含CLOB字段的记录。 3. **处理CLOB对象**:获取结果集中的CLOB对象,并对其进行读取或操作。 4. **关闭资源**:最后确保关闭所有的数据库连接和释放相关的资源。 #### 示例...
本文将详细介绍如何在Spring与Hibernate框架结合的情况下,有效地处理Oracle 10g数据库中的CLOB字段。 #### 一、环境配置 为了确保项目能够顺利运行,首先需要搭建好开发环境。本示例中使用的环境配置如下: 1. *...
### ORACLE中CLOB字段转String类型 在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何...
Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和注意事项: 1. **配置SessionFactory** 在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`...
例如,你可以使用`DBMS_LOB.WRITE`或`DBMS_LOB.append`来逐步写入CLOB字段。这种方法可以避免一次性加载整个字符串导致的错误。 ```sql DECLARE fundCodes CLOB; BEGIN DBMS_LOB.CREATETEMPORARY(fundCodes, ...
- 对于CLOB字段,使用TField的AsWideString属性;对于BLOB字段,使用TField的AsBytes属性。 - 读写大对象时,DBX同样支持Stream对象,利用TField的LoadFromStream和SaveToStream方法。 3. 数据流操作: - 在处理...
幸运的是,通过使用 DBMS_LOB 包,我们可以实现对 CLOB 字段中的内容进行 Like 查找。 CLOB 行字段的存储 在 Oracle 数据库中,CLOB 行字段是用于存储大文本数据的数据类型。CLOB 字段可以存储大量的文本数据,...
Oracle如何插入CLOB字段值,附件为简单的示例代码。Oracle如何插入CLOB字段值,附件为简单的示例代码。
Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...
修改clob blob 字段 修改clob blob 字段 修改clob blob 字段
在IT领域,尤其是在数据库操作与Java编程的交集部分,理解和掌握如何在Java中存取Oracle数据库中的CLOB(Character Large Object)类型字段是至关重要的技能。CLOB数据类型主要用于存储大量的文本信息,如文章、报告...
本主题主要探讨如何使用JDBC有效地操作Oracle数据库中的CLOB类型字段,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)等操作。 首先,我们需要理解CLOB的基本概念。CLOB是一种数据库对象,...
为了将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中,我们需要使用Java 语言和 JDBC 驱动程序。下面是一个示例代码,演示如何将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中: ...
在 Java 中,通过使用 oracle.sql.CLOB 类来处理 CLOB 类型字段的存储和读取。 在 Java 中,连接 Oracle 数据库需要使用 Oracle 的 JDBC 驱动程序。首先,需要使用 Class.forName() 方法加载驱动程序,然后使用 ...
spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。