时间:2021-05-19
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。
之前在写爬虫的时候数据库连接的频率很高,有时候数据处理的不好,sql报错后,抛出异常但后边的数据库连接没有断开。导致最后数据库连接数过大,不让再连接了(因为是个人库,所以直接重启了一下)。这个释放数据库连接的操作就可以用finally来进行。
首先看一下没有用finally的代码(不能直接运行,能看懂什么意思就行)
Connection conn;Statement stmt;try{ conn = DriverManager.getConnection(url,userName,password); stmt = conn.createStatement; String sql = "sql";//需要执行的sql stmt.executeUpdate(sql); stmt.close(); conn.close();}catch(Exception e){ e.printStackTrace();}在程序正常运行的时候,没有异常抛出,没有问题。
但在程序抛出异常(sql出错了),try里面的语句不执行了直接被执行catch里面的语句了,就造成了一个数据库连接没有正常关闭。数据量如果大起来,数据库的最大连接数到达上限,就不再允许创建新的连接了。
然后finally的用处现在就能体现出来了
Connection conn = null;Statement stmt = null;try { conn = DriverManager.getConnection(url,userName,password); stmt = conn.createStatement; String sql = "sql";//需要执行的sql stmt.executeUpdate(sql); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ if(stmt! = NULL){ stmt.close(); } if(conn! = NULL){ conn.close(); } }这样即使sql运行出错,抛出了异常,在最后的finally代码中再进行一次数据库连接的判断,就可以保证数据库连接资源不会被平白无故的浪费掉。
以上所述是小编给大家介绍的java中finally的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文研究的主要是Java中finally和return的关系,具体介绍和实例如下所示。finally和return关系的总结1.try块中有System.exi
前言大家应该都知道,在一些语言中,有try/finally这样的控制语句,比如Java。这种语句可以让我们在finally代码块中执行必须要执行的代码,不管之前
本篇浅析java中static的用法,主要五个方面:静态成员变量,静态方法,静态块,静态内部类,静态导包。首先还是一张表格说一下静态对象和非静态对象的区别:静态
在java中的finally关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会被执行,
1、在Java1.7之前,我们需要通过下面这种方法,在finally中释放资源,这种方法有点繁琐。BufferedReaderbr=null;Stringstr