hibernate - 使用 Hibernate + oracle 11g 获取 CLOB 数据时出现 java.sql.SQLRecoverableException

标签 hibernate oracle11g java-6 clob

在 Java Web 应用程序中使用 Hibernate 从 Oracle 11g 获取 CLOB 数据时,出现“java.sql.SQLRecoverableException: Closed Connection”异常。对于数据库连接,我已经实现了 Tomcat 7 数据源。

以下是我遇到异常的来源:

java.sql.Clob reqClob= userBean.getRequestData();
Reader clbReader = reqClob.getCharacterStream();

在执行“clob.getCharacterStream()”时在上面的代码中,我得到以下异常:

java.sql.SQLRecoverableException: Closed Connection
at oracle.sql.CLOB.getDBAccess(CLOB.java:1389)
at oracle.sql.CLOB.getCharacterStream(CLOB.java:309)
at org.hibernate.lob.SerializableClob.getCharacterStream(SerializableClob.java:41)

请注意,我可以从 userBean 获取其他值的数据。

以下是我在应用中使用的应用版本:

jdk1.6.0_33 (64bit version)  
hibernate3.jar 
ojdbc6.jar 
Oracle 11g 11.2.0.1.0 - (64bit version)

一个奇怪的行为是,一旦我开始使用 TOMCAT 7 数据源,我就会遇到这个问题。

下面是来自 Context.xml 的数据源代码:

<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" 
factory="oracle.jdbc.pool.OracleDataSourceFactory" name="jdbc/XXXX" password="XXXXX" 
type="oracle.jdbc.pool.OracleDataSource" 
url="jdbc:oracle:thin:@xx.xx.xx.xxxx:xxxx:xxxxxx" user="username"
connectionProperties="SetBigStringTryClob=true;" maxActive="20"
maxIdle="10" maxWait="-1" validationQuery="select 1 from dual" />

我已经在上面的代码中尝试了所有可能的参数,但它没有用。

在此先感谢您的所有帮助,伙计们...

最佳答案

我遇到了类似的问题,我将 Clob 更改为 String,如下所示:

String clobAsString = clob.getSubString(1, (int)clob.length());

确保在连接处于事件状态时执行此操作。就像在 DAO 中一样。 这必须在从数据库中检索 Clob 元素的事务中执行。

关于hibernate - 使用 Hibernate + oracle 11g 获取 CLOB 数据时出现 java.sql.SQLRecoverableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16249238/

相关文章:

java - 为什么我得到 MappingNotFound 异常

java - hibernate/JPA : Mapping entities to different databases

java - 查询语法异常 : Path expected for join

PHP : Warning: oci_connect(): ORA-12154: TNS:could not resolve the connect identifier specified in

java - 在 Scripting java (javax.script) 中导入一个类

java - hibernate/ Spring : Is There Row-Level Security?

plsql - 将 bool 值转换为 Varchar2

ORACLE 11G UTL_FILE + UTL_FILE_DIR - 无效目录

Java SE 6u28 无法在文件中下载

java - 将 JDBC Type 3 驱动程序与 Java 1.6 结合使用