Spring jdbcTemplate, как поймать исключение?

Все блестяще, пока я не столкнусь с местом, где мне действительно нужно ловить исключение. Когда я помещаю

jdbcTemplate.query(something...)

в

try{}

Я получаю:

 Unreachable catch block for SQLException. This exception is never thrown from the try statement body. 

Что мне делать в этой ситуации?

try{
    personIdReturnedByDb = jdbcTemplate.queryForInt(sql, p.getEmail(),
            p.getName(), p.getSurname(), encPw, dateSql);
}

catch(SQLException sa){


}

Спасибо,

Ответ 1

Это потому, что SQLException, проверенное исключение, не выбрано ни одним из методов JdbcTemplate.query(...) (ссылка javadoc). Spring переводит это в один из DataAccessException, который является более общим семейством исключений во время выполнения, чтобы абстрагировать любую конкретную реализацию базовой базы данных.

Ответ 2

Вы должны поймать исключение JdbcTemplate

то есть.

try
{
   // Your Code 
}
catch (InvalidResultSetAccessException e) 
{
    throw new RuntimeException(e);
} 
catch (DataAccessException e)
{
    throw new RuntimeException(e);
}

Ответ 3

InvalidResultSetAccessException - это исключение DataAccessException, поэтому нет необходимости ловить его в вашем случае. И DataAccessException уже является RuntimeException, поэтому нет необходимости бросать исключение Runtime. Но вы должны указать конкретное исключение своего приложения, например:

try
{
   // Your Code 
}
catch (DataAccessException e)
{
    throw new MyApplicationException("A problem occurred while retrieving my data", e);
}