2016-07-01 16 views
0

Я получаю «утечка ресурсов:« rsHP »не закрывается в этом месте» везде я использую rsHP = stmt.executeQuery (запрос);Результат Установить утечку ресурсов, хотя я закрываю 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, поэтому этот код не будет компилироваться вообще.

Я предлагаю вам изменить подпись метода

public static void method(String x, Connection conn) throws SQLException 

Для утечки ресурсов, я думаю, используя следующую логика поможет вам

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

Я имел броски исключения SQL , я просто пытался быть кратким, у меня есть некоторая внутренняя ошибка if else, которая, по моему мнению, противоречит try catch, поэтому я, вероятно, смогу ее очистить и посмотреть, исправляет ли она проблему. Я думаю, вы правы, добавляя конец до конца попытки, удалив их, наконец, и добавив if's к окончанию. Спасибо за вход! – Cody

+0

@Cody Добро пожаловать! Не стесняйтесь отмечать этот ответ как принято :) –