반응형
#NumberformatException #if #문자 #1글자비교 #equals #MyBatis #JAVA #자바
ex 1)
<if test="stringValue == 'Y'">
</if>
ex 2)
<if test="condition.equals('Y')">
</if>
지금처럼 한 글자를 다이나믹쿼리 IF 안에서 비교할 때
java.lang.NumberFormatException: For input string: "Y" 에러 또는
비교가 되지 않을 수 있다. (인식 불가 혹은 오작동 가능성도 있음)
결론적으로 위 현상은 myBatis 문제는 아니고
OGNL(Object Graph Navigation Language) 의 문제이다.
OGNL 인터프리터에서는 위 구문의 'Y' 를 char 형으로 인식하고,
'YY' 나 "Y" 는 String으로 인식한다. (따옴표를 잘보자)
그래서 이와 같은 구문을 비교할 때
NumberFormat으로 비교를 시도하여 Exception이 발생한다.
이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다.
그래서 아래와 같은 형변환이 가능하다.
char y = 'Y';
int code = (int)y; // code에는 Y의 코드값인 89가 저장된다
그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재한다.
1. <if test='stringValue == "Y"'> – 쌍따옴표와 홑따옴표의 위치를 변경
2. <if test="stringValue == "Y""> – 쌍따옴표를 HTML 코드로 변경
3. <if test="stringValue == 'Y'.toString()"> – toString() 함수를 사용해 String 형으로 변환
4. 함수 생성 (equals 함수를 새로 생성하고 가져다 쓰는 방법 )
http://cofs.tistory.com/97 에서 설명하고 있는
함수를 생성해서
사용방법을 참조하여 equals함수를 재정의
1번과 4번 방법을 추천한다.
출처: https://cofs.tistory.com/96 [CofS]
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
java 어제 날짜 구하기 (0) | 2019.12.17 |
---|---|
String으로 된 날짜에 일자를 더해서 세팅 (0) | 2019.12.05 |
JSTL - <c:set> 태그 사용법 (0) | 2019.11.22 |
[JAVA]자바에서 현재날짜 YYYYMMDD (0) | 2019.11.06 |
[iBATIS/MyBatis] iBATIS와 MyBatis의 차이 (0) | 2019.11.05 |