본문 바로가기
Web Development/Spring Legacy

[Spring / Legacy / Error] Mybatis 사용 시 java.lang.NumberFormatException: For input string 에러

by 감자맹고우 2022. 1. 12.
728x90
반응형

Spring Mybatis 프로젝트를 진행하는 도중 다음과 같은 메세지가 콘솔에 찍혔다.

 

### Error querying database.  Cause: java.lang.NumberFormatException: For input string: "N"
### Cause: java.lang.NumberFormatException: For input string: "N"

 

NumberFormatException 이었기 때문에 숫자로 사용되는 위치에 'N'이라는 문자열이 입력되어 발생했다는 것을 알 수 있었다.

문제는 해당 위치가 String 으로 처리되는 부분이라는 것이다.

 

<!-- VO(간략하게 표현하였음) -->
@Getter @Setter
private int testId;
private String testCd;

<!-- Mapper -->
<select id="getList" parameterType="TestVO" resultType="TestVO">
	SELECT *
    FROM
    	TEST
    WHERE
    	TEST_ID = #{testId}
        <!-- 문제가 발생한 위치 -->
        <if test="testCd == 'N'">
        	AND
            	TEST_CD = 'N'
        </if>

 

위의 예제에서 testCd를 if로 조건 처리하는 부분이 에러가 발생한 위치였다.

 

무엇이 문제일까?

 

 

반응형

 

[ 해결 방법 ]

 

에러는 아주 기초적인 부분에 근거해 발생하고 있었다.

바로 싱글쿼테이션(' : 작은 따옴표).

Mapper에서 작성하고 있어 간과한 결과였다.

 

싱글쿼테이션 때문에 'N'을 Char 형으로, Number Format으로 인식한 것으로 보인다.

그렇기에 해당 부분을 문자열 비교 방식으로 변경하면 에러는 간단히 해결된다.

 

여러가지 방법이 있지만, 대표적으로 equals와 toString, 더블쿼테이션(" : 큰 따옴표)으로 변경하는 방법이 있다.

 

<!-- 문제 -->
<if test="testCd == 'N'">
	AND
	TEST_CD = 'N'
</if>

<!-- 해결1(더블쿼테이션) -->
<if test='testCd == "N"'>

<!-- 해결2(equals) -->
<if test="'N'.equals(testCd)">

<!-- 해결3(toString) -->
<if test="testCd == 'N'.toString()">

 

위와 같이 처리하면 에러가 해결된다 !

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글