2012-01-18 2 views
11

Все блестяще, пока я не столкнусь с местом, где мне действительно нужно ловить исключения. Когда я помещаю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){ 


} 

Спасибо,

+2

SQLExceptions не существует; Весна завершает их в RuntimeException; Я забыл корневое имя класса. –

+0

вы должны сделать ответ. – hvgotcodes

ответ

27

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

4

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

т.е.

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