jdbc关闭数据库操作容易产生的陷阱

本文讨论了在Java中安全地关闭数据库资源的方法,特别是在使用Statement时的注意事项。文章提供了如何避免空指针异常并确保Connection正确关闭的代码示例,同时强调了使用PreparedStatement代替普通Statement的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家都知道使用hibernate可以简化数据库的操作,减少一大堆try…catch的书写,以及关闭数据库的操作,大大方便了程序员的开发。然而有时候我们不得不采用jdbc,比如在银行业务中处理大批量业务数据,并对这些数据进行操作,这个时候hibernate就不太合适了。
先上一段代码:

	public void releaseResources() {
try {
if (statement != null) {
statement.close();
statement = null;
}

} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这段代码看上去没问题,主要作用是关闭数据库。其实是容易产生陷阱的。
首先当 statement为空时,就会抛出空指针异常,导致connection没有关闭,这样的话数据库是不会关闭的,最终会影响性能。因此我们需要对statement进行判断
代码应该如下:
public void releaseResources() {
if (statement != null) {
try {
statement.close();
statement = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
if (connection != null)
try {
connection.close();
connection = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

同时对connection也进行了判断是否为空,这样代码是安全了,但是还是有一个隐患。
在代码中出现
// TODO Auto-generated catch block
e.printStackTrace();
这就表明是eclipse自动生成的,没有这段代码进行处理的。如果将抛出异常的代码的底层信息在web上或者桌面程序上显示,用户是接受不了的。因此我们有必要使用logger.debug(e);将异常信息记录在日志里面,而对于客户,可以抛出一个自定义封装的异常。

最后一个要注意的就是尽量使用PreparedStatement来代替Statement
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值