DB : 오라클

프레임워크 : 전자정부 프레임워크 (java+spring+mybatis 등등)


보통은  select문을 써서 원하는 값을 가져오곤하는데 다른사람이 작성한 프로시져로 값을 받아와야하는 상황이 생겼다. 우선 sqlquery맵부터 작성해보자


sqlmap.xml


inParam01, inParam02 두 값을 던져서 outParam01, outParam02, outParam03라는 값을 받고 싶어하는 단순한 프로시져이다.

그럼 Controller를 작성해보자.  (Service와 DAO는 생략함)


testController.java


여기까지 하고 실행했을 때 NullpointException이 난다.

왜일까?.....왜일까....왜일까...
분명 result로 받았는데 왜 resultVo는 null일까...

그것은 바로 return이 resultVo로 오는게 아니라 parameter로 넘겼던 vo에 담기는 것이기 때문이었다. (왜 그런지는 다음에...)


자 이제 제대로된 소스를 작성해보자


sqlmap.xml

testController.java


sqlmap.xml에 있던 resultType을 삭제했다. 필요없으니까.

testController에서는 resultVo로 받는 것이 아니라 그냥 vo객체를 출력한다. testService.getValues(vo);를 호출함으로해서 vo에 값이 이미 담겼으니까.



VO에 useYN이라는 변수가 있다. 물론 String형으로 선언된.

이 변수에 'Y'라는 값을 받아와서 query xml에서 조건문으로 비교를 했는데 NumberformatException이 난다면?

당황하지말고...다음과 같이 해본다.





자, 금방 해결되었다.


이는  myBatis 문제는 아니고 OGNL(Object Graph Navigation Language) 의 문제.

OGNL 인터프리터에서는 위 구문의 ‘Y’를 char 형으로 인식하고, ‘YY’나 “Y”는 String으로 인식한다. java의 char형은 실제로 문자의 코드값을 저장하기 때문이라고 한다.

해결책으로는 다음과 같은 방법이 있다.

1. <if test=’stringValue == “Y”‘> – 쌍따옴표와 홑따옴표의 위치를 변경 (이건 헷갈릴거같고)
2. <if test=”stringValue == &quot;Y&quot;”> – 쌍따옴표를 HTML 코드로 변경(이건..음...)
3. <if test=”stringValue == ‘Y’.toString()”> – toString() 함수를 사용해 String 형으로 변환(당첨)

(출처 : http://t-ara72.blogspot.kr/2013/10/mybatis-numberformatexception.html)





어느날 디비접속하는데 저런 에러가 난다면


다음을 수행해준다.


윈도우시작버튼->실행->services.msc->OracleOraHome92CliendCache 시작




+ Recent posts