关于JDBC资源释放的问题探究

参考资料
https://stackoverflow.com/questions/2225221/closing-database-connections-in-java

前言

关于JDBC资源的释放这块,我们应该怎么释放呢? 只关闭Connection,还是连同Statement和ResultSet一起关闭呢?
在不同的场景下,比如连接池的操作下这些又应该怎么办呢?

解决

1、源码介绍查看

首先的话肯定Connection肯定是需要先关闭的。所以我查看了ResultSet和Statement的close方法源码解释

ResultSet 接口的

Note: A ResultSet object is automatically closed by the Statement

object that generated it when that Statement object is closed

说明resultSet会随着Statement关闭而自动关闭

查看Statement接口的close方法,发现Statement没有会自动关闭什么的相关介绍。

继续查看Connection接口的close方法,发现也没有关闭Connection会将什么隐式关闭的介绍。

那么说明一点,资源释放的时候,我们只需要将connection和 Statement关闭就好了

2、文档查看

后来又去查看文档,
https://stackoverflow.com/questions/2225221/closing-database-connections-in-java
发现关于释放连接这块还有不同的说法。关于连接池的,关于不同数据库不同情况的,大家有兴趣可以看下相关的文章。

3、总结

一圈看下来,总结了下,还是将所有的都关闭,按照ResultSet、Statement、Connection的顺序去依次关闭。
可能会麻烦了点,但是这样总不会有内存泄露之类的隐患存在。这样总不会出错。

2 、资源释放模板

资源释放的代码要放到finally代码块里,这样防止在代码出现异常执行不到close的情况,造成资源释放不了。
模板如下所示 (在我们使用的时候,我们可以将其封装成方法,直接调用,这样也很方便)

	try {
		if (resultSet != null) {
			resultSet.close();
		}
	} catch (Exception e) {
	}
	try {
		if (statement != null) {
			statement.close();
		}
	} catch (Exception e) {
	}
	try {
		if (connection != null) {
			connection.close();
		}
	} catch (Exception e) {
	}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值