private void closeResultSet
        (CodeBuilder b, LocalVariable rsVar, Label tryAfterRs)
    {
        Label contLabel = b.createLabel();
        Label endFinallyLabel = b.createLabel().setLocation();

        b.loadLocal(rsVar);
        b.invokeInterface(TypeDesc.forClass(ResultSet.class), "close", null, null);
        b.branch(contLabel);

        b.exceptionHandler(tryAfterRs, endFinallyLabel, null);
        b.loadLocal(rsVar);
        b.invokeInterface(TypeDesc.forClass(ResultSet.class), "close", null, null);
        b.throwObject();

        contLabel.setLocation();
    }
private void closeResultSet ( CodeBuilder b , LocalVariable rsVar , Label tryAfterRs ) { Label contLabel = b . createLabel ( ) ; Label endFinallyLabel = b . createLabel ( ) . setLocation ( ) ; b . loadLocal ( rsVar ) ; b . invokeInterface ( TypeDesc . forClass ( ResultSet . class ) , "close" , null , null ) ; b . branch ( contLabel ) ; b . exceptionHandler ( tryAfterRs , endFinallyLabel , null ) ; b . loadLocal ( rsVar ) ; b . invokeInterface ( TypeDesc . forClass ( ResultSet . class ) , "close" , null , null ) ; b . throwObject ( ) ; contLabel . setLocation ( ) ; }
Generates code which emulates this:

...
} finally {
rs.close();
}

@param rsVar ResultSet variable
@param tryAfterRs label right after ResultSet acquisition