2017-01-12 68 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 {}'块,问题可能会变得明显。 –