Что вы действительно хотите сделать, так это объединить ответ «The Elite Gentleman» с аннотацией @edu.umd.cs.findbugs.annotations.SuppressWarnings( "OBL_UNSATISFIED_OBLIGATION" )
.Похоже, что FindBugs будет счастлив, если вы завершите метод закрытия следующим образом (что является предпочтительной последовательностью для этого):
...
}finally{
try{
resultSet.close();
}catch( SqlException e ){
//log error
}finally{
try{
statement.close();
}catch( SqlException e ){
//log error
}finally{
try{
connection.close();
}catch( SqlException e ){
//log error
}
}
}
}
Это очень многословно, и вы, вероятно, не хотитеДелайте это, если не по какой-либо другой причине, кроме любви к вашему запястному туннелю, поэтому вы должны использовать метод DBUtils.closeQuietly()
(или создать свой собственный вызов).Однако FindBugs не распознает это (т. Е. Используя библиотеку или свой собственный метод) как правильное закрытие ресурсов и выдает предупреждение.В этом случае это явно ложный положительный результат .Поэтому убедитесь, что это единственное предупреждение, которое вы получаете, а затем отключите это специальное предупреждение для этого метода.
@edu.umd.cs.findbugs.annotations.SuppressWarnings( "OBL_UNSATISFIED_OBLIGATION" )
public void doStuff( final Connection connection ){
try{
//Do databasey stuff
}catch( SqlException e ){
//throw a glorious exception....
}finally{
DbUtils.closeQuietly( resultSet );
DbUtils.closeQuietly( statement );
DbUtils.closeQuietly( connection );
}
Таким образом вы очищаете свои ресурсы с помощью нескольких строк кода и избегаете предупреждения FindBugs.