JAvaのfinallyの使い方

1625 ワード

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