连接池在建立连接后用关闭连接吗?

解灵运 2009-05-18 06:19:21
我现在想用连接池技术连接数据库我发现,建立连接的代码为
Context ctx=new InitialContext();
DataSource ods=(DataSource)ctx.lookup("java:comp/env/jdbc/bookstore");
conn = ods.getConnection();

书上没有关闭连接的代码,不用关闭连接吗?
那是不是每一次建立连接都用相同的代码呢?
连接自己会断开么?
还是csdn好啊,javaeye想问个问题没有积分都问不成
...全文
1563 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xo8080 2011-10-19
  • 打赏
  • 举报
回复 1
连接池必须close掉,但这里的close并不是关闭连接,而是释放占用,否则连接池会认为该连接一直在使用,不断创建新的connection,直至超过最大上限导致死锁。
这里的close方法是连接池重写的方法,connection只是一个接口,其实连接池getConnection返回的是自定义的实现类,重写了connection中所有方法。 所以这里的close并不是断开TCP连接,而是将连接返回连接池。
亡灵游侠 2011-04-11
  • 打赏
  • 举报
回复
引用 2 楼 tohmin 的回复:
连接池中的连接不需要关闭, 如果手动关闭就失去了连接池的意义,连接池的作用就是存储可用的连接对象,从而下次用客户端连接上来, 系统就不需要花时间建立新的连接,而是直接从连接池中取出可用连接, 因为省去了创建新连接的时间,这样就极大的提高的系统的效率。


同意
cky417 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cjdxhc 的回复:]

虽然可以调用close()方法关闭!
但是实际上是把连接池中的连接"关闭"指的是把连接又放到了连接池中,供下一次使用!
而不是真正意义上的关闭!
[/Quote]
正解
lababawan 2009-05-18
  • 打赏
  • 举报
回复
你要把连接池关闭了别人还怎么用
Connection也不需要关闭
blazingfire 2009-05-18
  • 打赏
  • 举报
回复
Connection要关的,这样就把这个连接释放到连接池里面去了。如果不关只能等到连接池的超时机制强制关闭连接,这样一来很容易导致有些应用得不到连接资源,会出现等待连接“假死”情况
吥説再见 2009-05-18
  • 打赏
  • 举报
回复
必须调用close()不然占用系统资源
Da侠饶命 2009-05-18
  • 打赏
  • 举报
回复
应该还是需要close()的,书上是这么写的,嘿嘿
murton 2009-05-18
  • 打赏
  • 举报
回复
不关闭,只是变为空闲状态,这样再有用户请求连接的时候就不用重新建立连接,节约资源,节约时间。
Rachael1001 2009-05-18
  • 打赏
  • 举报
回复
你用的是数据源
不需要关闭连接
ldg_2 2009-05-18
  • 打赏
  • 举报
回复
一般连接池的关闭并不是真正的关闭,而是为了复用连接,使连接重新回到连接池。
Looking_Glass 2009-05-18
  • 打赏
  • 举报
回复
个人认为:关闭同不关闭结果一样!
myairland 2009-05-18
  • 打赏
  • 举报
回复
连接池的不需要关,但你程序里必须要关,要不你就一直占着那个连接,直到失效
mike_24 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tohmin 的回复:]
连接池中的连接不需要关闭, 如果手动关闭就失去了连接池的意义,连接池的作用就是存储可用的连接对象,从而下次用客户端连接上来, 系统就不需要花时间建立新的连接,而是直接从连接池中取出可用连接, 因为省去了创建新连接的时间,这样就极大的提高的系统的效率。
[/Quote]

学习
liuguoshou 2009-05-18
  • 打赏
  • 举报
回复
应该用动关闭一下.
qq707472 2009-05-18
  • 打赏
  • 举报
回复
你在程序中一定要手动关闭,因为这个关闭的方法被重写掉了,他不是关闭了和数据库的通讯,而是将连接放回连接池中。
lgq_0714 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tohmin 的回复:]
连接池中的连接不需要关闭, 如果手动关闭就失去了连接池的意义,连接池的作用就是存储可用的连接对象,从而下次用客户端连接上来, 系统就不需要花时间建立新的连接,而是直接从连接池中取出可用连接, 因为省去了创建新连接的时间,这样就极大的提高的系统的效率。
[/Quote]
顶!!!!
fangpengyu 2009-05-18
  • 打赏
  • 举报
回复
使用完就关闭,不要一直占着,以便别人使用
  • 打赏
  • 举报
回复
连接池的作用就是存储可用的连接对象,从而下次用客户端连接上来, 系统就不需要花时间建立新的连接,而是直接从连接池中取出可用连接, 因为省去了创建新连接的时间,这样就极大的提高的系统的效率。可以参考连接池创建的参数:

<Resource
name="jdbc/jspdev"
type="javax.sql.DataSource"
password="bn"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
username="bn"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev"
maxActive="4"/

cjdxhc 2009-05-18
  • 打赏
  • 举报
回复

虽然可以调用close()方法关闭!
但是实际上是把连接池中的连接"关闭"指的是把连接又放到了连接池中,供下一次使用!
而不是真正意义上的关闭!
xnjnmn 2009-05-18
  • 打赏
  • 举报
回复
多看看连接池的属性配置和作用 比如 连接池里的属性“maxCount"限制一个上限,超过此树不能连接, 连接池他是多个连接的组合,配置多个连接是为了提高连接的速度,你只需要对连接进行控制。

连接池一般不会断开除非服务器或是数据库挂了



加载更多回复(3)

81,091

社区成员

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

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