次のコードを検討してください
ResultSet rs = null;
Statement st = null;
try {
//do somehting
} catch (Exception e){
//do something
} finally {
if(st != null){
try {
st.close();
} catch (SQLException e) {
log.error("Exception while closing statement: " + e);
}
}
}
問題は、ステートメントを閉じるときに、結果セットも閉じるのか、それともこのように結果セットを明示的に閉じる必要があるのかということです。
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
log.error("Exception while closing result set: " + e);
}
}
ステートメントを閉じると結果セットが自動的に閉じられると思いましたが、結果セットを明示的に閉じないと、FindBugsは次の警告をスローします
このメソッドは、java.sql.ResultSetのクリーンアップに失敗する可能性があります