finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。

之前在写爬虫的时候数据库连接的频率很高,有时候数据处理的不好,sql报错后,抛出异常但后边的数据库连接没有断开。导致最后数据库连接数过大,不让再连接了(因为是个人库,所以直接重启了一下)。这个释放数据库连接的操作就可以用finally来进行。

首先看一下没有用finally的代码(不能直接运行,能看懂什么意思就行)

Connection conn;
Statement stmt;
try{conn = DriverManager.getConnection(url,userName,password);stmt = conn.createStatement; String sql = "sql";//需要执行的sqlstmt.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";//需要执行的sqlstmt.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学习(127):finally语句相关推荐

  1. Java学习之for---each语句

    //filename foreach1.java /*自JDK5开始引进了一种新的for循环,他不用下标就可以遍历整个数组,这种新的循环称为foreach语句.foreach语句只需要提供三个数据:元 ...

  2. Java学习之while语句

    while1 /*while语句既是循环语句也是条件判断语句 结构如下: while(条件表达式){ 循环体 } */ //计算Fibonacci斐波那契序列的前16项 //file name wh1 ...

  3. Java学习之for语句

    //filename For.java /*for循环流程图如下: for(表达式1:条件表达式:表达式2){循环体} 本例中将演示for语句的两种使用方法 法一:循环变量i以递增的方式从1变化到n, ...

  4. Java学习之switch语句

    //file name switch1.java public class switch_1{public static void main(String[] args) throws Excepti ...

  5. Java学习之do-while-if语句实操

    //filename dwif.java //题目要求:求100以内的素数,并输出 /*由题目可知最小素数为2,其余偶数均为非素数,对于一个奇数k,使用3√k的每个整数j去除k,如果找到一个整数j能除 ...

  6. Java学习之do---while语句

    do-while 1 /*do-while结构如下 do{循环体 } while(条件表达式) 特点:无条件的执行一次循环体,再来判断条件表达式的值,至少循环一次*/ import java.util ...

  7. Java学习之if---elif语句

    public class elif1{public static void main(String[] args){int testScore=50;char grade;if(testScore&g ...

  8. Java学习之if语句

    public class if1{public static void main(String[] args){int a = 1,b=2,c=3,max,min;if(a>b)max=a;el ...

  9. [Java]学习Java(1)运算符语句类

    [Java]学习Java(1)运算符&语句&类 一.运算符&语句 1.相等运算符"==" (1)基本类型时值相等就为true (2)对象比较时比较其引用地址 ...

  10. 嘉明的Java学习(6)之Scanner与if...语句

    嘉明的Java学习(6) 学习资料来源:B站传智博学谷 内容: (1)Scanner的使用步骤与语句 (2)使用Scanner做一次简单的计算 (3)流程控制结构 (4)if语句的运用 (5)swit ...

最新文章

  1. 修改所有列_多人编辑,自动汇总,领导可见所有?用 SeaTable 表格更简单
  2. 北京智源大会 | 启元AI战胜中国星际冠军,智能体激发人类探索未知
  3. 老李秘技:loadrunner11是否还支持dblib协议?
  4. 设计模式之-工厂方法模式
  5. Python_装饰器Decorator
  6. 如何在 macOS 中批量重命名文件?
  7. 苹果系统和安卓系统的区别_Android和iPhone的区别?还不如说安卓系统和IOS系统的差别...
  8. python科学计算基础教程pdf下载-python科学计算 第二版
  9. 微软也招 Java!
  10. 蚂蚁金服 Service Mesh 大规模落地系列 - 网关篇
  11. 【大话云原生】微服务篇-五星级酒店的服务方式
  12. 转载好用的小工具 【who-lock-me】
  13. 模糊图像的倒谱matlab,基于倒谱分析方法的离焦模糊图像特征鉴别
  14. opencv实战项目:基于opencv的车牌号码识别
  15. 安科瑞数据中心行业电能质量监测与治理方案-李亚俊
  16. Keil MDK5 详细安装教程
  17. 京东主图怎么保存原图_京东图片怎么保存
  18. Android自动手绘,圆你儿时画家梦!
  19. 【ybt高效进阶5-6-3】耗费体力(单调队列优化DP)
  20. 【BZOJ1455】罗马游戏

热门文章

  1. 如何恢复被破坏的PowerDesigner pdm文件
  2. 玩转12306之系统登录
  3. [bbk5307]第76集 第9章 -数据库性能维护 03
  4. 在 Delphi 下使用 DirectSound (14): 测试镶边效果器 IDirectSoundFXFlanger8
  5. java局部内部类 final_Java的局部内部类以及final类型的参数和变量
  6. fifo算法_缓存算法FIFO、LFU、LRU
  7. 数据库杂谈(七)——数据库的存储结构
  8. 计算机设备行业特征,自动装配机在自动化设备行业具有的特点
  9. WordPress函数:get_sidebar(获取侧边栏)
  10. Mac 运行 psql postgres 报错