2017-01-12 54 views
1

在我的Java Hibernate應用程序我收到以下錯誤消息,但應用程序將繼續顯示該消息後運行:如何拋出一個錯誤是oracle關閉連接?

o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 17008, SQLState: 99999 
o.h.e.jdbc.spi.SqlExceptionHelper - Closed Connection 

如果發生這種情況我想應用程序停止。

我已實行以下,但如果這種 「封閉連接」 時它不停止應用程序:

目前代碼:

try { 
       personName = findPersonNameById(id); //hibernate query method 
      } catch (Exception e) { 
       throw new ClosedConnectionException("Closed connection error"); 
      } 

自定義異常類:

public class ClosedConnectionException extends RuntimeException { 
public ClosedConnectionException(String message) { 
    super(message); 
} 
} 

僅供參考,這裏是我的p ersistence.xml C3PO值,可能在這裏導致連接關閉? :

<properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
      <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/> 
      <property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider"/> 
      <property name="hibernate.c3p0.max_size" value="1"/> 
      <property name="hibernate.c3p0.min_size" value="1"/> 
      <property name="hibernate.c3p0.acquire_increment" value="2"/> 
      <property name="hibernate.c3p0.idle_test_period" value="300"/> 
      <property name="hibernate.c3p0.max_statements" value="15"/> 
      <property name="hibernate.c3p0.timeout" value="0"/> 
      <property name="hibernate.c3p0.unreturnedConnectionTimeout" value="30000"/> 
      <property name="hibernate.c3p0.dataSourceName" value="My connection"/> 
      <property name="hibernate.jdbc.fetch_size" value="50"/> 
      <property name="hibernate.default_batch_fetch_size" value="10"/> 
     </properties> 

回答

1

您應該檢查連接的狀態,然後相應地調用或執行您的查詢。有isClosed()方法告訴你連接是否處於關閉狀態,你也可以使用相同的方法。像下面可能假設你的連接對象的名字的東西是conn

if(!conn.isClosed()) 
    personName = findPersonNameById(id); 

而且,看到這個其他職位Java JDBC connection status

+0

請給這個代碼示例?謝謝 – java123999

+0

@ java123999,請參閱編輯答案,如果有幫助。 – Rahul

+0

謝謝,有沒有一種方法可以從JPAPersistenceManager中獲取這個連接對象?我所顯示的代碼位於服務層,我無法查看連接以檢查它? – java123999

0

你是否能在調用代碼中ClosedConnectionException? - 如果答案是肯定的,那麼做什麼來處理異常? - 如果答案是否定的,那麼你的代碼將運行,直到它被其他地方捕獲,因爲它是一個運行時異常。 - 遇到與數據庫的關閉連接有點奇怪。根據我的經驗,這是一個罕見的例外。可能有一個嚴重的隱藏問題。

+0

是的,它被抓到了一個不同的塊,但我的問題是,它不會導致應用程序停止,因爲它應該 – java123999

+0

當它被捕獲在一個不同的塊中,在該catch塊中採取了什麼操作?應用程序是以編程方式停止還是讓它繼續運行?如果你可以分享這個'catch {}'塊,問題可能會變得明顯。 –