數據庫操作、IO操作的資源沒有及時釋放

錯誤案例

public class ReleaseRes
{
    public void releaseDB ()
    {
        Connection conn = null;
        APLResultSet rs = null;
        String sql= "";
        try
        {
            conn = DB.getConnection();

            rs = DB.query(sql);
            if (rs.next())
            {
                return rs.getString("currentdate");
            }
            else
            {
                return DateTool.getCurrentDate(pattern);
            }
             Conn.close();  //錯誤1
        }
        catch (DBException e)
        {
            ...................
        }
        //錯誤2 
    }
     
    public void releaseIO (File file)
    {
        StringBuffer sb = null;
        BufferedReader in = null;
        try
        {
            in = new BufferedReader(new FileReader(file));

            sb = new StringBuffer();
            for (String line; (line = in.readLine()) != null;)
            {
                sb.append(line + "\r\n");
            }
        }
        catch (IOException ex)
        {
            Throw ex;
        }
        //錯誤3 
   }

錯誤分析

錯誤1:連接沒有在finally正確釋放,會出現異常時導致在運行一段時間後,系統由於連接池滿載而崩潰。錯誤2:資源APLResultSet沒有正確釋放錯誤3:IO資源沒有正確釋放,需要在finally中釋放資源

對任何的數據庫,IO等資源的操作完畢之後,都需要進行釋放,假如不釋放資源會被耗盡,導致系統崩潰。


正確用法

public class ReleaseRes
{
    public void releaseDB ()
    {
        Connection conn = null;
        ResultSet rs = null;
        String sql= "";
        try
        {
            conn = DB.getConnection();

            rs = DB.query(sql);
            if (rs.next())
            {
                return rs.getString("currentdate");
            }
            else
            {
                return DateTool.getCurrentDate(pattern);
            }
             
        }
        catch (DBException e)
        {
            ...................
        }
        finally
        {
           conn.close(); 
           rs.close();
        } 
    }
     
    public void releaseIO (File file)
    {
        StringBuffer sb = null;
        BufferedReader in = null;
        try
        {
            in = new BufferedReader(new FileReader(file));

            sb = new StringBuffer();
            for (String line; (line = in.readLine()) != null;)
            {
                sb.append(line + "\r\n");
            }
        }
        catch (IOException ex)
        {
            Throw ex;
        }
        finally
        {
           in.close(); 
        }
    }

發佈了26 篇原創文章 · 獲贊 2 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章