如何抛出错误是oracle关闭连接?

时间:2017-01-12 14:33:21

标签: java sql oracle entity-framework hibernate

在我的java hibernate应用程序中,我收到以下错误消息,尽管应用程序在显示消息后继续运行:

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>

2 个答案:

答案 0 :(得分:1)

您应该检查连接状态,然后相应地调用或执行您的查询。有isClosed()方法告诉您连接是否处于关闭状态,您可以使用相同的方法。下面的内容可能假设您的连接对象名称为conn

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

此外,请参阅此其他帖子Java JDBC connection status

答案 1 :(得分:0)

您是否在调用代码中捕获ClosedConnectionException?   - 如果答案是肯定的,那么处理异常的行为是什么?   - 如果答案为否,那么您的代码将一直运行,直到它被其他地方捕获,因为它是运行时异常。   - 遇到与数据库的封闭连接有点奇怪。根据我的经验,这是一个罕见的例外。可能存在一个严重的隐藏问题。