zoukankan      html  css  js  c++  java
  • finally应用

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

  • 相关阅读:
    SublimeText4 相比3的更新亮点与安装
    [原创]产品和成本效率总结提炼
    [原创]企业的生命周期总结提炼
    [原创]从不确定到确定性总结提炼
    [原创]验证需求(需求三角)总结提炼
    [原创] Test Card 模型用于验证商业 Idea(想法)总结提炼
    [原创]精益画布(lean canvas)总结提炼
    [原创]商业画布( Business Model Generation)总结提炼
    [原创]总结常见获客渠道
    [原创]什么是增长总结提炼
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/10968164.html
Copyright © 2011-2022 走看看