2016-07-01 1 views
0

리소스 누출 : 'rsHP'가 'rsHP = stmt.executeQuery (query);를 사용하는 모든 곳에서이 위치에서 닫히지 않습니다.결과 RS를 닫았지만 자원 누출을 설정합니까?

여기에 내가 분명히 내 모든 물건을 폐쇄하고 여기 끝에

public static void method(String x, Connection conn){ 
Statement stmtHP = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
        ResultSet.CONCUR_UPDATABLE); 
ResultSet rsHP = null; 

try{ 
     ----ALGORITHM IN HERE------ 
     ****This is the general form of this method***** 

     queryHP = "select * from SOMETABLE where SOMETHING = 'blah'"; 
     rsHP = stmtHP.executeQuery(queryHP); 

     while(rsHP.next()){ 
      List.add(rsHP.getString("COLNAME")); 
     } 
      . 
      . 
     repeats for 8 different queries 
      . 
      . 
     queryHP = "select * from SOMEOTHERTABLE where SOMETHINGELSE = 'blah2'"; 
     rsHP = stmtHP.executeQuery(queryHP); 

     while(rsHP.next()){ 
      List.add(rsHP.getString("NEWCOLNAME")); 
     } 

}catch(Exception e){ 
     System.out.println("Hey dumbo you suck, Exception Found"); 
     rsHP.close(); 
     stmtHP.close(); 
     conn.close(); 
}finally{ 
     rsHP.close(); 
     stmtHP.close(); 
     // connection gets closed later if no exceptions thrown 
} 

}// end method 

...이 방법은 무엇의 기본 레이아웃입니다. 오류가 발생하지 않고 RS를 닫지 않고 내 메소드를 종료하는 것이 실제로 불가능하다면 메모리 누수가 발생하는 방법에 대해 혼란 스럽습니다.

답변

1

Connection#createStatement()은이 코드가 전혀 컴파일되지 않도록 SQLException을 던집니다.

는 나는이 SQL 예외가 발생하면, 나는 다음과 같은 논리가 내가 가진 당신에게

try{ 
    // code 
    rsHP.close(); 
    conn.close(); 
}catch(Exception e){ 
    // StackTrace 
}finally{ 
    if (rsHP != null) rsHP.close(); 
    if (conn != null) conn.close(); 
} 
+1

도움이 될 것입니다 사용 같아요

public static void method(String x, Connection conn) throws SQLException 
자원 누수

에 메소드의 서명을 변경 제안 , 나는 단지 짧은 노력하고 있었고, 나는 내부 catch catch와 충돌이 있다고 생각되면 일부 내부 오류가 발생했습니다. 그래서 아마도이를 정리하고 문제가 해결되는지 확인합니다. 나는 당신이 시도의 끝까지 클로즈를 추가하고 마침내 그것을 제거하고 마지막에 if를 추가하는 것이 옳다고 생각합니다. 의견을 보내 주셔서 감사합니다! – Cody

+0

@Cody 당신을 환영합니다! 이 답변을 허용 된 것으로 표시해주세요. :) –