2013/07/23 17:04

iBatis를 이용해서 쿼리 작성시 SQL Exception 처리문제. ORM/myBatis



흠,
이번건은 좀 대박..



Spring-myBatis 환경에서 Exception처리 중, 
SQL Exception 발생시 별도 처리 방법에 대해서는 이전 포스트에서 설명했다.

이걸로 모두 처리 될 줄 알았는데,, 정말 단순하게.. 

그런데 위 방법은 iBatis 쿼리 호출시 SqlMapClientTemplate 를 이용했을때 
가능한 방법이었다. 

즉, 저건 Spring을 이용해서 iBatis를 이용하는 방법으로서,
SQL Exception을 Spring이 Translate해서 
Spring Exception(DataAccessException)으로 변경해서 보내준다.

이게 의미가 큰 이유가.. 
SqlMapClient를 이용했을 시에는 SQL Exception만 발생시켜주는데,
이 Exception에서는 무슨이유에선지 getErrorCode()라는 메서드가 있음에도 불구하고
Sql Error code를 알려주지 못하고 계속 '0' 만 뱉어 낸다.

그런데, 
SqlMapClientTemplate 를 이용했을 때 
(getSqlMapClientTemplate().queryForList() 등..)
SQL Exception이 발생하면
DataAccessException으로 translate해 주고, 
이 DataAccessException을 통해서 기존 SQL Exception을 뽑아 정상적으로
getErrorCode() 등의 메서드를 사용할 수 있게 되는 것이다.

머나먼 길을 돌아서 이걸 찾아낸것 같다.

덧글

  • haku 2013/08/01 12:57 # 삭제 답글

    안녕하세요! 이번에 개발을 시작하는 신입개발자 입니다. 현재 포스팅 하신 글의 문제로 일주일째 애를 먹다가 이 포스팅을 서치 했는데요 ! 저는 현재 spring + mybatis + sqlite3 를 이용해서 웹UI를 구현했느데요.
    제가 자바도 처음이다 보니 포스팅 내용만으로 어떻게 어디에 사용해야대는지 잘 이해가 안되더라구요.. ㅠㅠ
    자세한 설명 좀 부탁드려도 댈까 싶어서 이렇게 댓글 남깁니다 !
  • 말근우슴 2013/08/01 17:04 # 답글

    ㅎㅎㅎ 기존에 써 놓은 포스트가 있습니다. 그걸 보시면 구체적인 코드가 있구요..
    Spring Exception 처리를 어떻게 처리 하셨느냐에 따라 적용방법이 다릅니다만..
    Exception resolver나 AOP 등을 사용하신다면 그곳에 포스트 내용내의 코드를 적용하시구요.
    DAO 호출시에 try, catch 구문을 사용하셨다면 catch 쪽에 적용하시면 됩니다.

    혹시 설명이 부족하시면 다시 댓글 달아주세요..
  • 개발자 2016/08/24 16:30 # 삭제 답글

    너무 너무 감사드립니다. ~~~
댓글 입력 영역