한바다
[JSP]SQL Exception; error code 내부 표기로 변환할 수 없습니다 & 로그로 정보 확인 하기 본문
☑️ 스프링부트 실행시 "내부 표기로 변환할 수 없습니다" 에러가 떳다!!!!
SQLException; SQL state [99999]; error code [17059]; 내부 표기로 변환할 수 없습니다] with root cause
해당오류는 오라클 SQL 데이타 타입과 jsp에 작성한 자료형이 달라서 발생한 문제 였다.
[SQL 작성한 데이터 타입]
[스프링 부트 DTO.java에 작성한 자료형]
▶ 위와 같이 snack_name 컬럼의 데이터 타입은 VARCHAR2기 때문에
java 작성시 자료형 int가 아닌 String 문자열 자료형으로 변경해줘야 한다!!
그러니 데이타 타입이 NUMBER일 경우 자료형 int를 써야 하는 것이였다.
또한 DATABASE에서 자료형이 NUMBER면 자바 작성시 int ,VARCHAR2면
String 이지만 회사마다 규율이 다르기 때문에 무조건이라 단정 지을 수는 없다
때문에 String으로 맞춰주는 회사도 있고 데이터 유형에 따라 쓰는 경우도 있다는
것이다. Strig으로 맞춰주는 회사의 경우에는 서비스쪽 페이지에서 int로 변경
해 주는 경우가 있다고 한다.
☑️ JSP 스프링부트 코드 오류를 해결하기 위한 로그
작성한 구문을 실행하다 보면은 코드 오류는 없는데 정상적으로 수행이 안될 경우
작성한 값을 추적하는 log.info를 작성해 줄 수 있다!
즉 어노테이션 @Slf4j (Simple logging facade 4(for) Java 약자 -->System.out.println 비슷한 종류)
를 작성하여 inport 한 후 아래와 같이 작성해준다.
[예시 코드 1.]
public String paramTest1(HttpServletRequest req) {
String inputName = req.getParameter("inputName");
String inputAddress = req.getParameter("inputAddress");
int inputAge = Integer.parseInt(req.getParameter("inputAge"));
log.info("정보 확인하기");
log.debug("로그로 이름확인 : " + inputName);
log.debug("로그로 나이확인 : " + inputAge);
log.debug("로그로 주소확인 : " + inputAddress);
▶ System대신 log.debug를 활용해서 출력하는 것이 메모리 부담이 적으며 값이 잘못 된 경우 추적한다!
[예시코드2]
@PostMapping("test2")
public String paramTest2(@RequestParam(/*value=*/"title"/*, required=true*/) String title,
@RequestParam( "writer" ) String writer,
@RequestParam( "price" ) int price,
@RequestParam(value="publisher",defaultValue="교보문고", required=false) String publisher
) {
log.info("문제없이 insert 가능한지 확인하기");
log.debug("title : " + title);
log.debug("writer : " + writer);
log.debug("price : " + price);
log.debug("publisher : " + publisher);
return "redirect:/param/main";
}
※ @PostMapping 어노테이션은 HTTP POST요청을 특정 메소드와 매핑하기 위해 사용하며
주로 데이터를 생성하거나 갱신할 때 사용한다.
@RequestParam 어노테이션은 HTTP 요청 파라미터를 메소드 매개변수에 바인딩하기 위해 사용하며
주로 쿼리 마라미터나 폼 데이터를 받을 때 사용 한다.
☑️ 오류발생 방지. 오라클 컬럼 작성값과 JSP 폴더명 일치, 괄호 갯수 체크 하기