본문 바로가기
Programming

[Mybatis] For input string 에러

by BTC_아리 2024. 1. 17.

베하!

안녕하세요 여러분! 일단고 팀입니다.

오늘은 개발을 진행하다가 겪은 에러에 대해서 공유하고자 합니다.

 

에러 발생 상황

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

댓글