首页
学习
活动
专区
工具
TVP
发布

JDBC异常处理和资源释放问题

这是2018年第二篇原创自学文章

昨天因为这张图阅读量明显增加啊!这说明了什么问题呢?

之前我们在介绍JDBC加载注册驱动的时候说过有三种方式,是哪三种方式呢?我们再来看看

以上三种方式都可以实现JDBC的驱动加载注册,这里我们推荐使用

另外

其实可以直接写成

这里我们了解就好,大可不必深究,除非有必要!

今天我们来说说JDBC连接数据库的异常的正确处理,还记得之前我们是怎么处理的吗?没错,我们直接给抛出了,代码是这个样子滴!

我们这里直接throws Exception了,其实这样是不妥的,那正确的异常处理方式是什么呢?在此之前我们应该知道处理异常我们都用try catch的,有时候也配合finally一起使用,在处理JDBC连接数据库的异常时我们需要着重了解的还有资源释放的问题,就是那个xxx.close,下面我们一步步结合代码来说

首先我们看需要处理异常的代码

诸如此类的代码异常我们都将它使用try catch包裹

然后将catch中的异常类型改为Exception,然后继续写代码,完成JDBC连接数据库的后续步骤,代码如下

到这里我们就已经将异常做了相应的处理,但是这里面还有个很大的问题那就是资源释放的问题,也就是说目前释放资源的代码放在那里是不妥的,如果之前代码出现个什么意外,那么资源就无法释放了,可能有人说了,为什么这个资源必须要释放呢?

那么我们就来说道说道这个资源为什么必须释放呢?

我们先来看这个Connection,这家伙是数据库的连接对象,你可要知道在JDBC中Connection这个资源是非常稀有的,使用之后必须马上释放,我记得在哪看过关于这块释放资源的一个原则好像是“晚点用,早点放”,嗯,大概就是这个意思,总之在使用的过程中只有用到的时候才去创建这个对象,使用之后也要记得立马释放。

因此,为了保证资源的必须释放,我们该怎么做呢?没错,我们可以将释放资源的代码放到finally里,这样就可以保证无论之前的代码怎样,释放资源的代码必定执行。

这样代码就变成了现在这个样子了

到了这一步,你看看是不是就可以了呢?其实不然,这里面还是不行,哪里不行呢?我们来看,假如在connection没有来得及赋值的时候出现了意外,这样就会直接执行finally里面的代码,这样就会导致一个空对象调用close,就会引起新的异常导致程序崩溃,对于statement依然如此,因此,我们需要进行判空

因此finally里面释放资源的代码应该这样写

因此正确完整的代码如下

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180309G0U7H800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券