tomcat连接池,重复多次调用方法出错: Connection is closed

suan2046 2009-02-06 11:37:49
配置了一个tomcat连接池,

然后多次重复调用下面方法getStaticEntiy() ,部分能获取数据,部分报错误:java.sql.SQLException: Connection is closed

大家帮忙看看,是什么原因导致的?看看有什么优化方法 ?谢了!!

--获取连接池--
public class DBPool
{
private static DataSource pool;
static
{
Context env = null;
try
{
env = (Context) new InitialContext().lookup("java:comp/env");
pool = (DataSource) env.lookup("jdbc/DBpool");
if(pool == null)
System.err.println("'DBpool' is an unknown DataSource");
}
catch (NamingException ne)
{
ne.printStackTrace();
}
}

public static DataSource getPool()
{
return pool;
}
}



--getStaticEntity() 方法:--

public byte[] getStaticEntiy(String pmname, int scalesize, float x, float y)
{
byte[] bContent = null;
try
{
conn = DBPool.getPool().getConnection(); //获取连接池中的链接

bContent = scaledao.getStaticEntiy(pmname, scalesize, x, y, conn); //这是一般的从数据库读取流数据的方法
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
if(conn!=null){
try
{
conn.close(); //释放链接
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}

return bContent;
}


...全文
1945 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
etjnety 2012-07-13
  • 打赏
  • 举报
回复
楼主怎么解决的,能分享一下吗。。。
developerinit 2011-11-01
  • 打赏
  • 举报
回复
极其鄙视7#,不知道分享,你还不如不说话来的痛快,省得占csdn数据库,最后再鄙视一下,bs7#。。
suan2046 2009-02-09
  • 打赏
  • 举报
回复
恩!我前天也发现了这个问题,已经解决了,谢谢了!
  • 打赏
  • 举报
回复
如果一定要将这些对象封装成成员变量,需要考虑很多的问题,Web 程序不像普通的单线程程序,
Servlet 容器是通过多线程来处理来自客户端不同请求的,特别是多个请求同时访问的并发问题,
如果数据库连接对象封装处理稍有差错就会产生一些稀奇古怪的问题,甚至会造成数据库连接对象
无法关闭,直至连接池中的连接耗尽,程序无法获得连接而报错。
  • 打赏
  • 举报
回复
conn = DBPool.getPool().getConnection(); //获取连接池中的链接

-----------------------------------------------------------------------------------------
在这个论坛上我也说过很多次了,如果没有很高的面向对象程序设计水平,请不要把数据库连接对象:
Connection, PreparedStatement, ResultSet 等设为成员变量!因为设成成员变量在多个请求同时访
问时会产生严重的问题(大量的数据库连接无法释放),特别是在设计不是很好的情况下。

因此建议将这些对象置为局部变量。
dadi5566 2009-02-07
  • 打赏
  • 举报
回复
xuexi
JadoNet 2009-02-07
  • 打赏
  • 举报
回复
conn.close();
好像不是释放链接,是关闭链接,当你取得链接到达你连接池设置中的数量后,链接就都被你关闭了。所以当你再次去取的时候,就会报错。
换句话说你每次取得的链接用完就关闭了,而没有还给连接池。
xinyung 2009-02-07
  • 打赏
  • 举报
回复
一个方法getConnection
一个方法getStaticEntiy
再一个方法closeConnection
suan2046 2009-02-07
  • 打赏
  • 举报
回复
那在这个地方 我阳刚如何释放 链接到连接池中?

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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