当前位置: 代码迷 >> Java Web开发 >> 请问:java.sql.SQLException: 关闭的连接
  详细解决方案

请问:java.sql.SQLException: 关闭的连接

热度:4246   发布时间:2016-04-11 00:05:49.0
请教:java.sql.SQLException: 关闭的连接
各位大侠:我用hibernate和 oracle开发的基于apache james的邮件系统。系统部署在服务器(tomcat)上后一直运行正常。但昨天突然出现错误,用户无法登录系统。分析日志发现抛出大量java.sql.SQLException: 关闭的连接的异常。
[2012-08-27 05:40:49] com.csc.mail.jsh.db.hibernate.dao.generic.HibernateDao : [INFO ]  - [findByParameters]excute sql:from com.csc.mail.jsh.db.pojo.TblUser where fullName=? 
[2012-08-27 05:40:49] org.hibernate.util.JDBCExceptionReporter : [WARN ]  - SQL Error: 17008, SQLState: null
[2012-08-27 05:40:49] org.hibernate.util.JDBCExceptionReporter : [ERROR]  - 关闭的连接
[2012-08-27 05:40:49] com.csc.mail.jsh.db.hibernate.dao.generic.HibernateDao : [ERROR]  - [findByParameters] error when excute sql:[from com.csc.mail.jsh.db.pojo.TblUser where fullName=? ],could not execute query,cause:java.sql.SQLException: 关闭的连接
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2235)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at com.csc.mail.jsh.db.hibernate.dao.generic.HibernateDao.findByParameters(HibernateDao.java:198)
at com.csc.mail.jsh.business.service.serv.impl.UserServImpl.getUserByName(UserServImpl.java:206)
at com.csc.mail.jsh.action.UserAction.login(UserAction.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept

请问会是什么原因?我hibernate连接数据库的dao,每一次操作后面都有finally,并且在finally里面关闭连接(closeSession();)。
我的hibernate配置文件没有配置连接池。
请各位大侠不吝赐教!

------解决方案--------------------
数据库停止服务了,再开启就行。可能访问数多,崩溃了吧
------解决方案--------------------
建立连接池吧

<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="300" />
<property name="maxIdleTime" value="60" />
<property name="acquireIncrement" value="5" />
<property name="initialPoolSize" value="1" />


------解决方案--------------------
如果你保证每次操作都close了,那就配置连接池吧,很可能是资源耗尽了
------解决方案--------------------
运行几天,然后突然报错,很可能是数据库有些连接资源没有被关闭,达到了数据库的最大连接数,导致后来的请求无法连接数据库,资源耗尽,建议配置数据库连接池。要是程序的问题,即使使用连接池也会有问题的。
------解决方案--------------------
引用:
运行几天,然后突然报错,很可能是数据库有些连接资源没有被关闭,达到了数据库的最大连接数,导致后来的请求无法连接数据库,资源耗尽,建议配置数据库连接池。要是程序的问题,即使使用连接池也会有问题的。


说得对,还是仔细检查一下程序。
  相关解决方案