`
mwei
  • 浏览: 123968 次
  • 性别: Icon_minigender_1
  • 来自: 抽象空间
社区版块
存档分类
最新评论

使用Spring解决CLOB字段的存取

    博客分类:
  • fw
阅读更多
使用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字段异常解决方案

    dblink_clob字段异常解决方案 在数据库.link连接远程数据库时,经常会遇到无法使用CLOB字段的问题,这是因为CLOB字段在远程数据库中的处理方式与本地数据库不同所导致的。下面将讨论解决dblink_clob字段异常的解决...

    java中操作oracle的CLOB字段精解

    Java 中操作 Oracle 的 CLOB 字段是一种常见的操作,在实际开发中,我们经常需要在 Oracle 数据库中存储和读取大型文本数据,这时就需要使用 CLOB(Character Large OBject)类型的字段来存储这些数据。下面我们将...

    读取oracle数据库中clob字段的值

    ### 读取Oracle数据库中CLOB字段的值 在处理Oracle数据库时,经常会遇到需要读取CLOB(Character Large Object)类型字段的情况。CLOB主要用于存储大量的文本数据,如文章、文档等内容。由于CLOB类型的数据量可能...

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

    数据库读取clob字段

    2. **执行查询语句**:使用SQL语句查询包含CLOB字段的记录。 3. **处理CLOB对象**:获取结果集中的CLOB对象,并对其进行读取或操作。 4. **关闭资源**:最后确保关闭所有的数据库连接和释放相关的资源。 #### 示例...

    spring+hibernate 解决大字段(clob)

    本文将详细介绍如何在Spring与Hibernate框架结合的情况下,有效地处理Oracle 10g数据库中的CLOB字段。 #### 一、环境配置 为了确保项目能够顺利运行,首先需要搭建好开发环境。本示例中使用的环境配置如下: 1. *...

    ORACLE中CLOB字段转String类型

    ### ORACLE中CLOB字段转String类型 在Oracle数据库中,`CLOB`(Character Large Object)是一种用于存储大量文本数据的数据类型。由于其能够存储非常大的文本块(最大可达4GB),因此常被用于存储文章、报告或任何...

    spring+hibernate操作oracle的clob字段

    Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和注意事项: 1. **配置SessionFactory** 在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`...

    CLOB 字段类型报错 ORA-01704: 文字字符串过长的解决

    例如,你可以使用`DBMS_LOB.WRITE`或`DBMS_LOB.append`来逐步写入CLOB字段。这种方法可以避免一次性加载整个字符串导致的错误。 ```sql DECLARE fundCodes CLOB; BEGIN DBMS_LOB.CREATETEMPORARY(fundCodes, ...

    DELPHI的CLOB和BLOB存取处理.zip_DELPHI的CLOB和BLOB存取处理_hallzgz

    - 对于CLOB字段,使用TField的AsWideString属性;对于BLOB字段,使用TField的AsBytes属性。 - 读写大对象时,DBX同样支持Stream对象,利用TField的LoadFromStream和SaveToStream方法。 3. 数据流操作: - 在处理...

    Oracle如何对CLOB行字段来执行全文检索

    幸运的是,通过使用 DBMS_LOB 包,我们可以实现对 CLOB 字段中的内容进行 Like 查找。 CLOB 行字段的存储 在 Oracle 数据库中,CLOB 行字段是用于存储大文本数据的数据类型。CLOB 字段可以存储大量的文本数据,...

    Oracle如何插入CLOB字段值

    Oracle如何插入CLOB字段值,附件为简单的示例代码。Oracle如何插入CLOB字段值,附件为简单的示例代码。

    Hibernate存储Clob字段的方式总结

    Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...

    修改clob blob 字段

    修改clob blob 字段 修改clob blob 字段 修改clob blob 字段

    运用Java如何存取Oracle中的CLOB类型字段

    在IT领域,尤其是在数据库操作与Java编程的交集部分,理解和掌握如何在Java中存取Oracle数据库中的CLOB(Character Large Object)类型字段是至关重要的技能。CLOB数据类型主要用于存储大量的文本信息,如文章、报告...

    jdbc 处理clob类型字段

    本主题主要探讨如何使用JDBC有效地操作Oracle数据库中的CLOB类型字段,包括插入(Insert)、删除(Delete)、更新(Update)和查询(Select)等操作。 首先,我们需要理解CLOB的基本概念。CLOB是一种数据库对象,...

    sql server中的image类型的数据导出到oracle的clob字段中

    为了将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中,我们需要使用Java 语言和 JDBC 驱动程序。下面是一个示例代码,演示如何将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中: ...

    CLOB字段处理

    在 Java 中,通过使用 oracle.sql.CLOB 类来处理 CLOB 类型字段的存储和读取。 在 Java 中,连接 Oracle 数据库需要使用 Oracle 的 JDBC 驱动程序。首先,需要使用 Class.forName() 方法加载驱动程序,然后使用 ...

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

Global site tag (gtag.js) - Google Analytics