본문으로 바로가기
반응형

spring boot에 mybatis를 사용해 쿼리를 작성하던 중, 뜬금없는 에러가 발생했다.


### Error updating database.  Cause: java.lang.NumberFormatException: For input string: "P"

### Cause: java.lang.NumberFormatException: For input string: "P"


분명 문자열을 문자열과 비교하였고, 해당 컬럼도 VARCHAR 였기 때문에 상당한 시간을 삽질했다.

if를 사용한 문자열 비교 구문에서 에러가 발생한 것을 알게 되었고, 구글링을 통해 원인과 해결 방법을 찾았다.




원인


에러가 발생한 부분의 코드는 아래와 같다.

1
2
3
<if test="stringVal!=null and stringVal=='Y'">
    .....
</if>
cs

얼핏 봐서는 뭐가 문제인지 알아차리기 쉽지 않다.


mybatis는 OGNL(Object Graph Navigation Language) 인터프리터를 사용하는데, OGNL은 작은따옴표로 감싸진 한 character의 알파벳을 char형식으로 취급한다.

즉, 내가 비교하려고 한 'Y'는 char형식으로 취급되어 86이라는 숫자로 인식된다.

이때문에 문자열인 "Y"와 숫자 86을 비교하려다 NumberformatException이 발생하는 것이다.


('YY'와 같이 문자열은 정상적으로 String으로 인식한다.)



해결


한 캐릭터의 문자를 비교하기 위해서는 큰따옴표(" ")로 감싸주면 해결된다.

즉 위 코드를 아래와 같이 수정하면 에러가 발생하지 않는다.


1
2
3
<if test='stringVal!=null and stringVal=="S"'>
    .....
</if>
cs



반응형

 Other Contents