Connection关闭, PreparedStatement关闭, ResultSet不关闭会有什么影响?

resultset会不会持有某些资源而不释放导致系统越来越卡,甚至内存溢出?注意:项目是部署在weblogic里面的java程序,连接的获取方式是通过连接池的方式获取的。... resultset会不会持有某些资源而不释放导致系统越来越卡,甚至内存溢出?
注意:项目是部署在weblogic里面的java程序,连接的获取方式是通过连接池的方式获取的。
展开
 我来答
micro0369
2013-07-23 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4053万
展开全部
搜索到这么一段,觉得挺有道理

如果你不使用连接池,那么就没有什么问题,一旦Connection关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。
但是如果你使用连接池,那么请注意,Connection关闭并不是物理关闭,只是归还连接池,所以PreparedStatement和ResultSet都被持有,并且实际占用相关的数据库的游标资源,在这种情况下,只要长期运行,往往就会报“游标超出数据库允许的最大值”的错误,导致程序无法正常访问数据库。
百度网友923dcbd
2017-09-19 · 超过12用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:15.4万
展开全部

通常我们会使用以下代码,其中ResultSet可以理解为定义的一个指针,实际上并没有为他分配内存空间。所以当PreparedStatement关闭时, ResultSet所指向的是一个不可用空间相当于ResultSet也被关闭了。

以下代码亲测:

Connection conn = getConn();

PreparedStatement ps = null;

ResultSet rs = null;

try {

ps = conn.prepareStatement(sql);

rs = ps.executeQuery();

} catch (SQLException e) {

throw new RuntimeException(e);

} finally {

closeAll(ps, conn);

}

//测试部分

try {

rs.next();

} catch (SQLException e) {

e.printStackTrace();

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是超人159858
2013-07-23 · 超过18用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:45.7万
展开全部
连接池也有分多种的,比如Hibernate使用的C3P0数据源,它是会自动关闭
Connection
PreparedStatement
ResultSet
其实不管是通过连接池还是直接连数据库,都有好坏。建议楼主在用连接池的时候,自己在一段时间可以关闭整个程序,释放连接池的资源,省的出现资源被大量占用!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tytwddd
2013-07-23 · TA获得超过110个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:136万
展开全部
连接关闭就可以了。用的连接池,即使你不关闭连接,过一段时间不使用,连接池也会关闭它
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangda146
2013-07-23 · TA获得超过1160个赞
知道小有建树答主
回答量:836
采纳率:0%
帮助的人:576万
展开全部
用连接池就算不close也会自动回收,不过最好是写上。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式