Когда использовать catch и когда использовать throws в обработке исключений

Вопрос не в синтаксисе обработки исключений, но это все о том, какое место лучше написать блок catch для исключения в его путешествии по методам через распространение.

public boolean validateUser(String username, String password) throws SQLException {
    Connection conn = dataSource.getConnection();
    boolean result = false;
    PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM USERS WHERE   USERNAME=? AND PASSWORD=?");
    pstmt.setString(1, username);
    pstmt.setString(2, password);
    result = pstmt.executeQuery().next();
    conn.close();
    return result;
}

Предполагатьmethod1() называетсяmethod2() а такжеmethod2() названный выше метод. В приведенном выше методе, если я обработаю исключение, я должен вернуть значение. Давайте предположим, что я вернулсяfalse после вылова блока,method2() неправильно понимает, как неправильный логин или пароль.

Если я не обращаюсь,method2() не получит никакого значения, и будет выполнен блок catch, и та же проблема возникнет вmethod1().

Теперь вы можете определить, где я могу эффективно обработать исключение?