在我的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>
答案 0 :(得分:1)
您应该检查连接状态,然后相应地调用或执行您的查询。有isClosed()
方法告诉您连接是否处于关闭状态,您可以使用相同的方法。下面的内容可能假设您的连接对象名称为conn
if(!conn.isClosed())
personName = findPersonNameById(id);
此外,请参阅此其他帖子Java JDBC connection status
答案 1 :(得分:0)
您是否在调用代码中捕获ClosedConnectionException
?
- 如果答案是肯定的,那么处理异常的行为是什么?
- 如果答案为否,那么您的代码将一直运行,直到它被其他地方捕获,因为它是运行时异常。
- 遇到与数据库的封闭连接有点奇怪。根据我的经验,这是一个罕见的例外。可能存在一个严重的隐藏问题。