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_java的finally用法相关推荐

  1. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

  2. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  3. Java程序中Timer的用法

    Java程序中Timer的用法 import java.io.IOException; import java.util.Timer; public class CheckTimer {/*** @p ...

  4. Java中Date各种相关用法

    Java中Date各种相关用法 本文主要介绍Java中Date各种相关用法. AD:   Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=C ...

  5. Java 动态代理介绍及用法

    Java 动态代理介绍及用法 一,静态代理模式的特点 在之前的文章中 java代理模式 已经介绍里java里的(静态)代理模式 下面是上文静态代理类的例子: public class ProxyBea ...

  6. java string()函数_转载java String.split()函数的用法详解

    转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...

  7. java反斜杠\的用法

    java反斜杠\的用法比较怪异,分为两种场景: 1. 正则表达式 匹配点(.) 或  {.[.(.?.$.^ .+和 * 这些特殊符号要要前加双斜框,表示字符类的时候也是用双斜杠譬如(\\s[空白符] ...

  8. bigdecimal 等于0_好程序员Java培训分享BigDecimal的用法

    好程序员Java培训分享BigDecimal的用法,如果对数值结果精度要求很高,那么就可以使用BigDecimal,BigDecimal可以精准的控制小数点后面的数字 Java培训 1. 实例 Big ...

  9. Java中二维数组的用法(不定长二维数组)

    Java中二维数组的用法(不定长二维数组),即每个第二维的数组长度不一样. 1>代码如下: package com.demo.test;public class Test {public Tes ...

最新文章

  1. 搭建mongodb分片
  2. Notepad++ 删除空白行的方法(转)
  3. 在Mysql中count(*)、count(1)与count(字段/列名)的详解—聚合函数count
  4. html中文字描边效果代码,css如何设置文字描边效果?
  5. 线程5-生产者消费者模式(线程通信)
  6. ASP.NET对验证控件的一些整理(一)
  7. Windows下Mysql定时备份的实现
  8. k8s架构以及相关概念普及
  9. PHP之JWT接口鉴权(二) 自定义错误异常
  10. 职场 软件实施工程师的地位以及发展前景
  11. spring-mvc集成urule
  12. deepin驱动精灵_Deepin 20 Beta X64官方正式版(64位)
  13. Spring bean销毁的过程
  14. java类图与代码实例
  15. 计算机图形学-颜色科学基础
  16. java计算限流工具
  17. ATmega32U4 芯片介绍 相关开源应用
  18. 键盘锁定/键盘长按才有反应
  19. js的遍历器(Iterator)
  20. GPU芯片海飞科联合创始人兼总裁姚飞到访极客天成ScaleFlash

热门文章

  1. php 微信公众号 记录数据库,PHP构建微信公众号关键字数据库多图文回复
  2. SQLite学习手册(实例代码一)
  3. 香帅的北大金融学课笔记16 -- 公司决策
  4. python3精要(10)-while,for
  5. 【深度学习】90.94%准确率!谷歌刷新ImageNet新纪录!Model soups:提高模型的准确性和稳健性...
  6. 【Python】疯狂的加速函数!
  7. 【推荐系统】基于知识图谱的推荐系统总结
  8. 推荐特征筛选偷懒神器-M3USelector
  9. 【机器学习基础】(三):理解逻辑回归及二分类、多分类代码实践
  10. 与优秀的人在一起进步:我发起的“乐学”分享活动