2013-04-27 120 views
2

我正在使用Java Web應用程序中的Hibernate從Oracle 11g中獲取CLOB數據時出現「java.sql.SQLRecoverableException:Closed Connection」異常。對於數據庫連接,我已經實現了Tomcat 7數據源。java.sql.SQLRecoverableException在使用Hibernate + oracle獲取CLOB數據時11g

下面是我的源在那裏我得到一個例外:

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" /> 

我已經在上面的代碼中嘗試了所有可能的參數,但沒有奏效。

預先感謝您的幫助,傢伙...

+0

請回復我的傢伙....其顯示塞我。 。:( – 2013-04-29 05:46:58

+0

你是否設法克服了這個問題? – karansardana 2016-07-08 07:30:11

回答

0

我有類似的問題,我改變的Clob爲String如下:

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

確保執行此當連接活着。就像在DAO中一樣。 這必須在從DB中檢索Clob元素的事務中執行。

1

我今天有同樣的問題,總是在我打電話的時候getSubStringgetCharacterStream我有閉合連接錯誤。

我解決了註釋和刪除CLOB類型:

@Column(name = "CL_JSON_OUT", nullable = false) 
private Clob jsonOut; 

到:

@Lob 
@Column(name = "CL_JSON_OUT", nullable = false) 
private String jsonOut; 

This post幫我