Поведение при закрытии указано в Спецификации JDBC . Закрытие соединения освобождает все ресурсы JDBC, связанные с соединением, и неявно закрывает все операторы, ResultSets и т. Д. Закрытие оператора закрывает ResultSets.
Пример 2 не гарантированно работает. Оператор должен быть закрыт ПОСЛЕ того, как ResultSet был использован. В спецификации сказано, что вы должны получить исключение SQLException, если попытаетесь использовать этот ResultSet (некоторые драйверы JDBC не строго следуют спецификации - а MS не самый большой нарушитель).
Если вы забудете закрыть ResultSet или Statement, в худшем случае вы будете использовать ресурсы базы данных и JVM дольше, чем необходимо. В системе с ограниченными ресурсами или высокой нагрузкой это может привести к ошибкам памяти / соединения / ресурса или снижению производительности.