不能及时释放数据库连接池的连接

黎某人 2010-07-04 08:56:31
用了数据库连接之后, 老是过1,2天就提示
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
等问题, 说是数据库连接池已经满了,这个怎么办啊
但是我连接sql的时候 都用finnaly close了呀 这是怎么回事,

我在连接数据库的时候这么做的

写一个DataHelp类 然后再构造方法里获取数据库连接

操作数据库的类继承DataHelp 每个方法完了后都会调用DataHelp的close方法,这样有问题么

...全文
2353 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lookluuk 2010-07-05
  • 打赏
  • 举报
回复
我也觉得是你写的close没有执行,写个测试程序,dubug看看
黎某人 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 poba_liuyichao 的回复:]

你出现连接池溢出,肯定是你的close语句没有执行,应该是代码逻辑出现了某种问题。

你将数据库连接池的最大允许连接数,设置小一点,自己访问产生jdbc连接的连接,在你产生连接和close语句前后加上打印语句,看代码执行了没有。还有对close语句添加异常处理。
[/Quote]
我在本机调试的时候设置最大连接数3 然后多刷新几次 多去几个页面就没事,
当部署到服务器上的时候 过一段时间就会出现那个问题
黎某人 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 licip 的回复:]

这种问题一般是自己应起的。多从代码中找找原因。你刚刚说都用finally去关了,但如果你的finally前的代码没有放到try{中,是可能有问题的。
[/Quote]
这东西闭着眼睛都能写出来,怎么可能会犯这低级错误
黎某人 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zeer1983 的回复:]

每个连接关闭之后,设置成null,试试看
[/Quote]

if(con!=null&!con.isClosed())
{
con.close();
con=null;
}
一开始就这么用的
xinleicn 2010-07-05
  • 打赏
  • 举报
回复
恩。是不是通过mysql也可以设置一下。。。
zzh200411 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mason520 的回复:]
我觉得也有可能是JDBC驱动的问题。
考虑用一些开源的连接池吧,不要自己写connection了。
[/Quote]
+1
closewbq 2010-07-05
  • 打赏
  • 举报
回复
可能是驱动版本的问题。
poba_liuyichao 2010-07-05
  • 打赏
  • 举报
回复
你出现连接池溢出,肯定是你的close语句没有执行,应该是代码逻辑出现了某种问题。

你将数据库连接池的最大允许连接数,设置小一点,自己访问产生jdbc连接的连接,在你产生连接和close语句前后加上打印语句,看代码执行了没有。还有对close语句添加异常处理。

mason520 2010-07-05
  • 打赏
  • 举报
回复
我觉得也有可能是JDBC驱动的问题。
考虑用一些开源的连接池吧,不要自己写connection了。
licip 2010-07-05
  • 打赏
  • 举报
回复
这种问题一般是自己应起的。多从代码中找找原因。你刚刚说都用finally去关了,但如果你的finally前的代码没有放到try{中,是可能有问题的。
lxh.lcl 2010-07-05
  • 打赏
  • 举报
回复
每个连接关闭之后,设置成null,试试看
黎某人 2010-07-05
  • 打赏
  • 举报
回复
急需帮助哇
黎某人 2010-07-05
  • 打赏
  • 举报
回复
顶起来吧
黎某人 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 lookluuk 的回复:]

我也觉得是你写的close没有执行,写个测试程序,dubug看看
[/Quote]
断点调试过 关闭方法也执行了
黎某人 2010-07-04
  • 打赏
  • 举报
回复
目前是使用jdbc来连接数据库, tomcat+mysql,按理说我及时的去close连接后,连接应用会回到连接池中的,但是我就想知道问什么 close之后 连接并没有回到连接池,而是占着不走
kurama_mail 2010-07-04
  • 打赏
  • 举报
回复
如果确实关闭,是不会出现连接池满的。
因为你这个问题要1-2天才发生,我估计不是连接未释放。但你也可以做个测试:故意多次访问一个需要开启连接的逻辑。你自己设置的连接池大小,你清楚测试多少次后应该会出错。
如果你的连接池是由其他框架控制可能导致你的关闭连接代码是无效的。这样的情况下大部分连接框架会帮你收回,但可能存在个别地方因为你的代码原因连接无法释放。
这样的问题找身边技术好点的人解决起来会比较快。
以后问这样的问题最好注明使用的数据库版本、连接池版本、谁控制连接池、出现错误的容器环境…………
黎某人 2010-07-04
  • 打赏
  • 举报
回复
自己顶起来

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧