[Mybatis] java.lang.NumberFormatException: For input string: 에러시

2017. 8. 9. 16:38IT개발/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

결론 : 차라리 전체 비교문을 홑따옴표로 감싸고, 해당 한글자 문자열을 쌍따옴표로 감싸면 해결. (사실 그게 젤싸게 먹혀서 그렇다. 사내 코딩켄벤션에도 따로 정리해야겠다.)


반응형