2016-07-01 1 views
0

J'obtiens 'Fuite de ressources:' rsHP 'n'est pas fermé à cet endroit' partout où j'utilise un rsHP = stmt.executeQuery (query);Résultat Définir une fuite de ressources même si je ferme le RS?

Voici un schéma de base de ce que cette méthode fait ...

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 

A la fin ici je ferme bien toutes mes affaires. Je suis confus quant à la façon dont j'ai une fuite de mémoire s'il est littéralement impossible que ma méthode se termine sans fermer le RS en dehors d'une erreur lancée.

Répondre

1

Connection#createStatement() déclenche une exception SQLException afin que ce code ne puisse pas du tout être compilé.

Je vous suggère de changer la signature de la méthode à

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

Pour la fuite des ressources, je suppose que l'aide de la logique suivante vous aidera

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

J'ai eu la throws Exception sql , j'essayais juste d'être bref, j'ai un peu d'erreur interne si j'attrape que je pense est en conflit avec la prise d'essai, donc je vais probablement nettoyer cela et voir si cela résout le problème. Je pense que vous avez raison d'ajouter la fin à la fin de l'essai, en les retirant enfin, et en ajoutant les if à la fin. Merci pour la contribution! – Cody

+0

@Cody De rien! N'hésitez pas à marquer cette réponse comme acceptée :) –