HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
Spring Data
Spring Data
/
📌
Spring JDBC(Java Database Connectivity)
/
🎈
JDBC Exception — DataAccessException
🎈

JDBC Exception — DataAccessException

@Override @Nullable public <T> T execute(ConnectionCallback<T> action) throws DataAccessException { Assert.notNull(action, "Callback object must not be null"); Connection con = DataSourceUtils.getConnection(obtainDataSource()); try { // Create close-suppressing Connection proxy, also preparing returned Statements. Connection conToUse = createConnectionProxy(con); return action.doInConnection(conToUse); } catch (SQLException ex) { // Release Connection early, to avoid potential connection pool deadlock // in the case when the exception translator hasn't been initialized yet. String sql = getSql(action); DataSourceUtils.releaseConnection(con, getDataSource()); con = null; throw translateException("ConnectionCallback", sql, ex); } finally { DataSourceUtils.releaseConnection(con, getDataSource()); } } protected DataAccessException translateException(String task, @Nullable String sql, SQLException ex) { DataAccessException dae = getExceptionTranslator().translate(task, sql, ex); return (dae != null ? dae : new UncategorizedSQLException(task, sql, ex)); }
  • 위는 JdbcTemplate.java 의 소스 코드 중 한 부분인데, 보면 SQLException이 발생했을 때, translateException을 통해서 DataAccessException 의 예외로 전환해서 다시 에러를 발생시킴!
  • JdbcTemplate 내부적으로 CheckedException(SQLException) → UncheckedException(DataAccessException) 으로 전환해서 에러를 발생시킴
    • 왜냐하면 SQLException은 복구가 가능한 예외가 아닌 시스템의 예외임. 쉽게 말해 프로그램의 오류 또는 개발자의 부주의 때문에 발생하는 경우이거나, 통제할 수 없는 외부상황 때문에 발생해 코드 레벨에서는 복구할 방법이 없다는 것임
  • 이와 같이 함으로 DataAccessException은 SQLException에 대해 애플리케이션 레벨에서 신경을 쓰지 않도록 해주고, SQLException에 담긴 다루기 힘든 상세한 예외 정보를 의미 있는 예외로 전환시켜줌
 
notion image