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);
}