java学习(127):finally语句
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语句相关推荐
- Java学习之for---each语句
//filename foreach1.java /*自JDK5开始引进了一种新的for循环,他不用下标就可以遍历整个数组,这种新的循环称为foreach语句.foreach语句只需要提供三个数据:元 ...
- Java学习之while语句
while1 /*while语句既是循环语句也是条件判断语句 结构如下: while(条件表达式){ 循环体 } */ //计算Fibonacci斐波那契序列的前16项 //file name wh1 ...
- Java学习之for语句
//filename For.java /*for循环流程图如下: for(表达式1:条件表达式:表达式2){循环体} 本例中将演示for语句的两种使用方法 法一:循环变量i以递增的方式从1变化到n, ...
- Java学习之switch语句
//file name switch1.java public class switch_1{public static void main(String[] args) throws Excepti ...
- Java学习之do-while-if语句实操
//filename dwif.java //题目要求:求100以内的素数,并输出 /*由题目可知最小素数为2,其余偶数均为非素数,对于一个奇数k,使用3√k的每个整数j去除k,如果找到一个整数j能除 ...
- Java学习之do---while语句
do-while 1 /*do-while结构如下 do{循环体 } while(条件表达式) 特点:无条件的执行一次循环体,再来判断条件表达式的值,至少循环一次*/ import java.util ...
- Java学习之if---elif语句
public class elif1{public static void main(String[] args){int testScore=50;char grade;if(testScore&g ...
- 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 ...
- [Java]学习Java(1)运算符语句类
[Java]学习Java(1)运算符&语句&类 一.运算符&语句 1.相等运算符"==" (1)基本类型时值相等就为true (2)对象比较时比较其引用地址 ...
- 嘉明的Java学习(6)之Scanner与if...语句
嘉明的Java学习(6) 学习资料来源:B站传智博学谷 内容: (1)Scanner的使用步骤与语句 (2)使用Scanner做一次简单的计算 (3)流程控制结构 (4)if语句的运用 (5)swit ...
最新文章
- 修改所有列_多人编辑,自动汇总,领导可见所有?用 SeaTable 表格更简单
- 北京智源大会 | 启元AI战胜中国星际冠军,智能体激发人类探索未知
- 老李秘技:loadrunner11是否还支持dblib协议?
- 设计模式之-工厂方法模式
- Python_装饰器Decorator
- 如何在 macOS 中批量重命名文件?
- 苹果系统和安卓系统的区别_Android和iPhone的区别?还不如说安卓系统和IOS系统的差别...
- python科学计算基础教程pdf下载-python科学计算 第二版
- 微软也招 Java!
- 蚂蚁金服 Service Mesh 大规模落地系列 - 网关篇
- 【大话云原生】微服务篇-五星级酒店的服务方式
- 转载好用的小工具 【who-lock-me】
- 模糊图像的倒谱matlab,基于倒谱分析方法的离焦模糊图像特征鉴别
- opencv实战项目:基于opencv的车牌号码识别
- 安科瑞数据中心行业电能质量监测与治理方案-李亚俊
- Keil MDK5 详细安装教程
- 京东主图怎么保存原图_京东图片怎么保存
- Android自动手绘,圆你儿时画家梦!
- 【ybt高效进阶5-6-3】耗费体力(单调队列优化DP)
- 【BZOJ1455】罗马游戏
热门文章
- 如何恢复被破坏的PowerDesigner pdm文件
- 玩转12306之系统登录
- [bbk5307]第76集 第9章 -数据库性能维护 03
- 在 Delphi 下使用 DirectSound (14): 测试镶边效果器 IDirectSoundFXFlanger8
- java局部内部类 final_Java的局部内部类以及final类型的参数和变量
- fifo算法_缓存算法FIFO、LFU、LRU
- 数据库杂谈(七)——数据库的存储结构
- 计算机设备行业特征,自动装配机在自动化设备行业具有的特点
- WordPress函数:get_sidebar(获取侧边栏)
- Mac 运行 psql postgres 报错