2017. 8. 9. 16:38ㆍIT개발/iBatis & MyBatis
기존 전자정부의 ibatis를 Mybatis로 변경하면서
다음과 같은 문제가 발생했다. ( 사실 변환해서 발생되는 문제는 아니었다;;; )
### Error querying database. Cause: java.lang.NumberFormatException: For input string: "D"
### Cause: java.lang.NumberFormatException: For input string: "D"
아놔 뭔 잘못인가 봤더니 문자열로 인식하기 위해선 쌍따옴표로 감싸줘야했던 것이다! 털썩...
수정-> 그게아니고 해당 현상은 myBatis의 버그가 아니라OGNL(Object Graph Navigation Language) Interpreter에 의해 홑따옴표로 감싸진 한 글자 ‘Y’를 char 형으로 인식하기 때문이다. (2글자 이상은 문자열로 인식)하여 char형을 int 값으로 변환하여 저장하려고 cast하면서 발생하는 것!
before |
SELECT SUM(CREAT_CO) AS statsCo <if test="pdKind == 'D'"> , SUBSTRING(OCCRRNC_DE, 1, 4) + '-' + SUBSTRING(OCCRRNC_DE, 5, 2) + '-' + SUBSTRING(OCCRRNC_DE, 7, 2) AS statsDate </if> FROM COMTSBBSSUMMARY |
after |
SELECT ISNULL(SUM(TOT_RDCNT) / (CASE SUM(CREAT_CO) WHEN 0 THEN 1 ELSE SUM(CREAT_CO) END), 0) AS avrgInqireCo <if test='pdKind == "D"'> , SUBSTRING(OCCRRNC_DE, 1, 4) + '-' + SUBSTRING(OCCRRNC_DE, 5, 2) + '-' + SUBSTRING(OCCRRNC_DE, 7, 2) AS statsDate </if> FROM COMTSBBSSUMMARY |
결론 : 차라리 전체 비교문을 홑따옴표로 감싸고, 해당 한글자 문자열을 쌍따옴표로 감싸면 해결. (사실 그게 젤싸게 먹혀서 그렇다. 사내 코딩켄벤션에도 따로 정리해야겠다.)