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";//需要执行的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代码中再进行一次数据库连接的判断,就可以保证数据库连接资源不会被平白无故的浪费掉。

finally用法包含哪些相关推荐

  1. parser.add_argument 参数用法 包含metavar

    https://docs.python.org/zh-cn/3/library/argparse.html

  2. NotePad++的查找的用法(包含正则表达式)

    notepad++的查找 1.普通查找 普通查找很简单(快捷键是ctrl+f) 替换的(快捷键是ctrl+h) 在文件中查找(快捷键是ctrl+shift+f):顾名思义可以不打开文件进行查找和替换 ...

  3. string s.substr()的用法

    string s.substr()的用法 包含头文件 s . substr( pos , len ) ; 从初始位置 pos 开始读取长度为 len 个字符 #include <iostream ...

  4. Spring系列(三):@ComponentScan注解用法介绍

    今天给大家分享Spring中@ComponentScan注解的用法,希望对大家能有所帮助! 1.@ComponentScan注解的作用 @ComponentScan注解一般和@Configuratio ...

  5. PL/SQL之JOB用法 (定时跑数据)

    转载自   PL/SQL之JOB用法 (定时跑数据) 一.DBMS_Job包的用法   包含以下子过程:        Broken()过程.      change()过程.      Interv ...

  6. C++11 function和bind用法

    目录 function和bind用法 function的用法 Demo bind用法 Demo C/C++Linux服务器开发/后台架构师[零声教育]-学习视频教程-腾讯课堂 function和bin ...

  7. c语言pair的用法,C++ std::pair的用法

    1 pair的应用 pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存.另一个应用是,当一个函数需要返回2个数据的时候, ...

  8. 关于ceph源码 backtrace 打印函数调用栈

    当集中精力看一个问题的时候,时间久了就会有这样一个状态,天空飘来五个字,那都不算事 ceph源码庞大的体量以及复杂的设计让很多人望而却步,尤其是大量的纯虚函数更是让读者迷失在代码的海洋,这个时候函数调 ...

  9. ajax提交相对路径报错,ajax提交请求为啥url要用这个函数encodeURI

    参考如下: 如果你是通过form提交的,那就不需要用这个了.但是如果是你使用url的方式 例如:ajax提交到后台的,就需要对url进行encodeURI编码, 否则,会导致后台出现各种乱码,不加en ...

最新文章

  1. 中国大陆光伏中上游触底反弹 台湾省亦酝酿涨势
  2. 不懂SOLID,GRASP这些软件开发原则!写出来的代码都是垃圾!
  3. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
  4. STM32F407之搭建工程
  5. 字符串周期--hdu 3746 Cyclic Nacklace
  6. springboot整合shiro-关于登出时,redis中缓存没有清理干净的问题
  7. MySQL基础---增删改查语法
  8. 工作90:富文本编辑器使用篇wangedit
  9. Linux下SVN服务器的搭建
  10. 【Clickhouse】Clickhouse TTL 数据的存活时间
  11. gulp自己主动化任务脚本在HybridApp开发中的使用
  12. php常用库函数(二)
  13. 派生类构造的时候一定要调用_分手的时候,一定要好好说再见
  14. 利用数据细分目标客户群
  15. dnslog盲打学习
  16. IDEA文件编码格式修改为UTF-8
  17. vue项目启动后,页面显示空白
  18. php 求幂数,C 笔记九 求幂函数
  19. 单核cpu多线程有必要吗?
  20. 国密SM4,layui前端 和.net core后台 加密解密 .net加密解密

热门文章

  1. 贝加莱驱动器电源模块维修8B0C0320HW00.002-1
  2. 11.1 什么是模块,Python模块化编程
  3. 产品思考:如何计算资讯类产品的日活跃用户天花板?
  4. spring结合Echarts实现中国地图大区、省、市、区/县的穿透
  5. Doxygen与Vscode操作全解
  6. 全国产!瑞芯微RK3568J/RK3568B2工业核心板规格书
  7. 啊!公众号破1万粉了!!!
  8. Astar、A星算法解决八数码问题--python实现
  9. 计算机教学简案,电子表格EXCEL教学教案 简案 授课便签
  10. 更改小米,魅族手机状态栏字体颜色