显式实现ResultSetExtractor接口时如何正确关闭ResultSet
问题解答
1. 是否需要自行关闭ResultSet?
不需要,你当前基于Spring JDBC ResultSetExtractor 接口实现的结果集处理逻辑,无需手动关闭ResultSet。
2. 背后逻辑说明
ResultSetExtractor是Spring JDBC提供的回调接口,其生命周期完全由JdbcTemplate托管:
JdbcTemplate在内部完成JDBC查询、拿到ResultSet对象后,才会调用你重写的extractData方法,将ResultSet作为入参传入- 无论
extractData是正常执行返回结果,还是运行过程中抛出SQLException、数据访问异常,JdbcTemplate都会在finally代码块中统一释放资源:按顺序关闭ResultSet、对应Statement、数据库连接,完全避免资源泄露问题
3. 正确操作方式
你当前的代码已经符合规范,不需要额外加rs.close()相关逻辑,手动关闭反而属于冗余操作,即使JDBC驱动允许重复关闭ResultSet,也没有任何必要。只有当你脱离Spring JDBC封装、自行原生创建JDBC连接/Statement/ResultSet的场景下,才需要手动处理资源释放。
内容的提问来源于stack exchange,提问作者santosh kumar
相关产品推荐
相关产品推荐

