为什么只有conn关闭之前需要判断是否是否已经关闭?rs和stmt却不需要?

为什么只有conn关闭之前需要判断是否是否已经关闭?rs和stmt却不需要?

# 具体遇到的问题
到底有没有助教能解释明白,不懂让讲师来解答,别强行东拉西扯浪费时间。还把我原来的问题删了几个意思???

# 报错信息的截图

# 相关课程内容截图
http://img1.sycdn.imooc.com//climg/5fa8b69b0975c1ca13970986.jpg# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码,可通过选择【代码语言】突出显示

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,1. 可能是老师刚没有理解一下的意思,给您的学习带来不便,深感抱歉!

2.  因为ResultSet与Statement对象要么为null,要么就是可以被使用的状态所以不用判断,但是,作为Connection连接来说,除了这个对象可以为null以外,还可能会存在已经被关闭的情况,那么,已经被关闭的连接就不能再去执行close()了,也就是说只能在打开状态下,连接才可以被关闭。

    ​有一种是比较极端的情况,比如:作为当前JDBC底层使用的连接池,那么对于连接池来说,里边的连接是每一个连接对象,他是一定会存在的,但是这个连接不一定是可以使用的open状态,当如果我们在使用的时候没有做这个状态判定的话就会出问题了。所以ResultSet与Statement对象不用做是否关闭的判断,而Connection需要。

  • 慕函数6488525 提问者 #1
    可是即使使用了连接池,JDBC程序当前正在使用的这个Connection对象,肯定是open状态啊,就是说没有回收到连接池去,因为程序正在使用啊,为什么还存在您说的这个连接不一定是可以使用的open状态?换句话说,这个Connection对象难道不是只能由当前程序close然后回收到连接池吗?那就不用判断isClosed了啊,因为现在一定是open状态。
    2020-11-09 17:32:49
  • 好帮手慕小尤 回复 提问者 慕函数6488525 #2
    同学你好,如果在之前不小心写了调用关闭的方法,Connection就不再是open状态。所以为了避免出现关闭的连接调用close()情况,需要使用isClosed()方法进行判断。祝学习愉快!
    2020-11-09 19:00:19
  • 慕函数6488525 提问者 回复 好帮手慕小尤 #3
    OK 了解,多谢!
    2020-11-09 19:13:58
好帮手慕小尤 2020-11-09 15:13:15

同学你好,1. 是不会删除同学的问答的,可能与网络存在一定的关系,同学可以重新刷新页面查看一下。

2. 如果不使用连接池,ResultSet与Statement对象可以不进行关闭的,Connection一旦关闭,数据库物理连接就被释放,所有相关Java资源也可以被GC回收了。但如果使用连接池,则Connection关闭并不是物理关闭,只是归还连接池,从而ResultSet与Statement对象都需要进行关闭才可以。

3. 如果同学还存在不理解的地方同学可以重新反馈一下,老师会帮助同学理解学习的。

注:连接池在后期会详细讲解同学现阶段了解一下即可。

  • 提问者 慕函数6488525 #1
    连接池我学完了,不好意思,这里是没有用连接池的,我的问题表述应该很清楚,我问的并不是rs和stmt可不可以不关闭,我问的是既然这三者都要close,为啥只有conn关闭前需要调用isClosed方法判断是否已经关闭,rs和stmt不需要,很难理解我的问题吗?你们回答的都是些什么,风马牛不相及。
    2020-11-09 15:25:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师