if (ex instanceof DataAccessException) { SQLException se = (SQLException) ((DataAccessException) ex).getRootCause(); msg = se.getMessage(); LOGGER.debug("****** DataAccessException : {} // {}", se.getErrorCode(), se.getMessage()); } |
왜 이걸 정리 안해놨지? 라는 생각을 하며
올린다..ㅋ
Spring은 SQL Exception이 발생하면
자신의 Exception으로 wrapping해서 throw하기 때문에
기존에 봤었던 SQL Exception에 맞는 메시지처리 등의
아래와 같이 instanceof 함수를 이용해서 처리하면 될 것이다.
if (ex instanceof BadSqlGrammarException) { SQLException se = ((BadSqlGrammarException) ex).getSQLException(); LOGGER.debug("**BadSqlGrammarException {} ", se.getErrorCode()); } else if (ex instanceof InvalidResultSetAccessException) { SQLException se = ((InvalidResultSetAccessException) ex).getSQLException(); LOGGER.debug("**InvalidResultSetAccessException {} ", se.getErrorCode()); } else if (ex instanceof DuplicateKeyException) { LOGGER.debug("**DuplicateKeyException {} ", ex.getMessage()); } else if (ex instanceof DataIntegrityViolationException) { LOGGER.debug("**DataIntegrityViolationException {} ", ex.getMessage()); } else if (ex instanceof DataAccessResourceFailureException) { LOGGER.debug("**DataAccessResourceFailureException {} ", ex.getMessage()); } else if (ex instanceof CannotAcquireLockException) { LOGGER.debug("**CannotAcquireLockException {} ", ex.getMessage()); } else if (ex instanceof DeadlockLoserDataAccessException) { LOGGER.debug("**DeadlockLoserDataAccessException {} ", ex.getMessage()); } else if (ex instanceof CannotSerializeTransactionException) { LOGGER.debug("**CannotSerializeTransactionException {} ", ex.getMessage()); } |
<bean id="Oracle" class="org.springframework.jdbc.support.SQLErrorCodes"> <property name="badSqlGrammarCodes"> <value>900,903,904,917,936,942,17006</value> </property> <property name="invalidResultSetAccessCodes"> <value>17003</value> </property> <property name="duplicateKeyCodes"> <value>1</value> </property> <property name="dataIntegrityViolationCodes"> <value>1400,1722,2291,2292</value> </property> <property name="dataAccessResourceFailureCodes"> <value>17002,17447</value> </property> <property name="cannotAcquireLockCodes"> <value>54</value> </property> <property name="cannotSerializeTransactionCodes"> <value>8177</value> </property> <property name="deadlockLoserCodes"> <value>60</value> </property> </bean> |