All Day Tired

PersistenceException Cause : java.lang.NumberFormatException: for input String: 본문

Back/DB

PersistenceException Cause : java.lang.NumberFormatException: for input String:

yu.dev 2024. 9. 10. 18:10

마이바티스로 쿼리를 조회하는데

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exception.PersistenceException:

### Error querying databas. Cause: java.lang.NumberFormatException: For input string: "[문제의 string]"

 

이런 에러가 떴다....

동적 쿼리로 <if> 태그의 조건으로 그냥 useYn == 'Y'를 써줬을 뿐인데 자꾸 이런 에러가 나서 서치해보니까

OGNL의 문제였다...

그러면 OGNL이란 무엇인가

 

OGNL(Object-Graph Navigation Language)
  • Java 객체의 속성, 메서드, 컬렉션, 배열 등에 접근하고 조작할 수 있는 표현식 언어

그래서 동적쿼리를 쓸 때 반드시 OGNL을 쓸 수 밖에 없는 것

나의 경우처럼 <if>태그 안에 useYn이라고 쓴것이 OGNL

 

그러면 이게 왜 문제냐

OGNL은 '', 'N' 이렇게 작은 따옴표로 감싸고 한개의 문자만 들어가 있을 때 char형으로 보기 때문에 numberFormatException을 일으킨다.

왜냐하면 Java에서는 N이라는 char형 변수를 N으로 저장하는게 아니라 N의 코드값(숫자)를 저장하기 때문

따라서 이런 에러가 일어나지 않게 하기위해서는

 

해결법

동적쿼리를 사용할 때 "로 시작해서 문자를 ''로 감싸지 말고 애초에  '로 시작해서 비교할 문자를 ""로 감싸도록 하자

<if test = 'useYn == "Y"'>

'Back > DB' 카테고리의 다른 글

오라클 날짜 DATE 소요시간  (0) 2024.09.12
with절 트리구조 검색 조회 시 상위노드도 조회  (0) 2024.09.04
CTE  (1) 2024.09.03
인덱스 컬럼 변경 주의(where 조건)  (0) 2024.02.15
Comments