Aubergine
Aubergine

Reputation: 6042

spring jdbcTemplate how to catch exception?

Everything is brilliant until I encounter place where I actually do need to catch exception. When I place

jdbcTemplate.query(something...)

in

try{}

block I get:

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

What do I do in this situation?

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

catch(SQLException sa){


}

Thank You,

Upvotes: 22

Views: 64875

Answers (3)

Nicolas
Nicolas

Reputation: 66

InvalidResultSetAccessException is a DataAccessException so that no need to catch it in your case. And DataAccessException is already a RuntimeException so that no need to throw a Runtime exception. But you should throw a specific exception of your application such as :

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

Upvotes: 4

praveen.jakkali
praveen.jakkali

Reputation: 81

You should catch the JdbcTemplate exception

i.e.

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

Upvotes: 8

matsev
matsev

Reputation: 33779

That's because SQLException, a checked exception, is not thrown by the any of the JdbcTemplate.query(...) methods (javadoc link). Spring translates this to one of the DataAccessException, which is more generic family of runtime exceptions, in order to abstract away any specific underlying database implementation.

Upvotes: 43

Related Questions