Spring jdbcTemplate как отловить исключение? - PullRequest
14 голосов
/ 18 января 2012

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

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){


}

Спасибо,

Ответы [ 3 ]

34 голосов
/ 19 января 2012

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

5 голосов
/ 20 января 2014

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

т.е.

try
{
   // Your Code 
}
catch (InvalidResultSetAccessException e) 
{
    throw new RuntimeException(e);
} 
catch (DataAccessException e)
{
    throw new RuntimeException(e);
}
0 голосов
/ 06 декабря 2018

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

try
{
   // Your Code 
}
catch (DataAccessException e)
{
    throw new MyApplicationException("A problem occurred while retrieving my data", e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...