베하!
안녕하세요 여러분! 일단고 팀입니다.
오늘은 개발을 진행하다가 겪은 에러에 대해서 공유하고자 합니다.
에러 발생 상황
Mybatis 쿼리문을 작성하던 상황이었습니다.
예시 :
SELECT a.id
, a.name
FROM user a
WHERE 1=1
<if test="delFilter.equals('Y')">
AND a.del = 'Y'
</if>
테스트를 진행하니 다음과 같은 에러가 나왔습니다.
### Error querying database. Cause: java.lang.NumberFormatException: For input string: ”Y"
### Cause: java.lang.NumberFormatException: For input string: "Y"
에러 원인
이 에러에 대한 내용은 ‘Y’라는 문자열을 숫자로 변환하려 하는데, 숫자로 변환하니 mybatis 쿼리문에서 의도한 결과가 나오지 않고 에러가 나오는 겁니다.
좀 더 정확하게 이야기하자면, Y라는 문자열이 ‘(single quotation)으로 작성되어 있어서 문자형이 아닌 숫자형으로 인식하여 발생한 문제입니다.
에러 해결방법
1. double quotation 사용하기
- 쿼테이션의 위치를 변경하면 Y 문자가 double quotation에 들어가게 되어 문자열로 인식합니다.
SELECT a.id
, a.name
FROM user a
WHERE 1=1
<if test='delFilter.equals("Y")'>
AND a.del = 'Y'
</if>
2. equals 사용하기
- equals를 사용하면 문자열로 인식합니다.
SELECT a.id
, a.name
FROM user a
WHERE 1=1
<if test='"Y".equals(delFilter)'>
AND a.del = 'Y'
</if>
처음보는 에러라 당황하셨을 수 있지만 알고나면 문제의 원인도 명확하고 간단하게 해결할 수 있는 문제였습니다!
즐거운 코딩합시다~!
베빠!!
'Programming' 카테고리의 다른 글
java Exception 전파 (0) | 2024.02.08 |
---|---|
정규표현식 활용 (1) | 2024.01.21 |
HTTP 상태 코드 정리 (2) | 2024.01.13 |
Spring Boot Model validation 관련 애노테이션 (0) | 2024.01.12 |
Overloading과 Overriding의 차이 (1) | 2024.01.05 |
댓글