java的finally用法

                                          java的finally用法

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

之前在写爬虫的时候数据库连接的频率很高,有时候数据处理的不好,sql报错后,抛出异常但后边的数据库连接没有断开。导致最后数据库连接数过大,不让再连接了(因为是个人库,所以直接重启了一下)。这个释放数据库连接的操作就可以用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代码中再进行一次数据库连接的判断,就可以保证数据库连接资源不会被平白无故的浪费掉。

【参考】:https://developer.ibm.com/zh/articles/j-lo-finally/

https://blog.csdn.net/w605283073/article/details/103841999

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页