In Eclipse
erhielt ich eine Warnung Resource leak: 'ps' is not closed at this location
, die ich nicht verstehe.Ressource Leckwarnung in der Sonnenfinsternis
In meinem Java
Code erkläre ich die "ps" als eine vorbereitete Anweisung und ich benutze (und schließe) es oft. Dann habe ich die folgende Sequenz:
try {
if(condition) {
ps = c.prepareStatement("UPDATE 1 ...");
} else {
ps = c.prepareStatement("UPDATE 2 ...");
}
ps.executeUpdate();
} catch (SQLException e) {
// exception handling
} finally {
if (null != ps)
try {
ps.close();
} catch (SQLException e) {
// exception handling
};
}
Das „Ressource Leck“ -Warnung kommt auf dem „Update“ -Statement im anderen Abschnitt. Wenn ich ps = null
setze, bevor ich den try Block starte, gibt es keine Warnung.
Wenn die zweite UPDATE-Anweisung auskommentiert ist, wird keine Warnung angezeigt.
Ist das ein Verständnis oder ein Java/Eclipse-Problem?
Meine Vermutung ist, dass Eclipse erkennt, dass Sie das vorbereitete Anweisungsobjekt zuvor verwenden und aufgrund des Potenzials für die SQLException es möglicherweise nicht ordnungsgemäß schließen. Wenn Sie 'ps = null;' im finally-Block machen, wird es wahrscheinlich repariert und dies wäre ein vernünftigerer Ort, um es zu bereinigen. –