В целом, я прочитал javadoc, чтобы сказать, что если соединение недопустимо (имеется в виду, что оно не закрыто и не может быть использовано), или если превышено время ожидания, оно вернет false.
Если, однако, что-то не так с запросом к базе данных о достоверности соединения, SQLException все еще может быть сгенерировано. (Скажем, например, запрос относится к требуемой системной таблице базы данных, которая отсутствует или транзакция откатывается в середине проверки).
SQLException всегда генерируется, если значение тайм-аута меньше нуля.
При этом существует множество проблем с (JDBC в целом и) этой спецификацией в частности.
Что определяет недопустимое соединение? Если выдается ошибка в базе данных, пытаясь выяснить, можем ли мы действительно сказать, что не знаем, допустимо ли соединение. Это, вероятно, сломано в любом случае. Единственное, о чем я могу думать, это то, что соединение все еще должно быть закрыто, тогда как valid == false может означать, что соединение не работает, нет необходимости закрывать его. Это приводит к следующей проблеме:
Действительный, формально не определен. Значит не закрыто и что-то еще. Но это что-то еще немного расплывчато. Это должно означать «можно использовать», но что, если оно не закрыто, но не может использоваться?
И, наконец, почему так нетерпимо относиться к отрицательному числу? Это так же легко сказать: значение 0 или меньше указывает, что тайм-аут не применяется к операции базы данных.
И, конечно, спецификация isClosed () не была обновлена для распознавания нового метода isValid (int).
API JDBC действительно пародия в целом.
С другой стороны, если значение равно тогда и только тогда, когда , это должно было бы сказать это, и если SQLException не может быть сгенерировано по любой другой причине, то это должно быть исключение времени выполнения (например, IllegalArgumentException ), потому что передача отрицательного значения будет просто ошибкой программирования. Если, с другой стороны, SQLException может быть вызвано по другим причинам, то, по крайней мере, можно утверждать, что не стоило вводить отдельное исключение, когда проверенное исключение все равно нужно было обработать. Я не уверен, что согласен с аргументом, но, по крайней мере, он может быть достоин. (Обратите внимание, я не пишу этот последний абзац как доказательство того, что спецификация не имеет в виду, если и только если, а скорее как дополнительную критику, если это то, что она означает.)