반응형

pstmt = conn.prepareStatement(" insert into TEST (A, B) values (?, ?) ");
pstmt.setString(1, a);
pstmt.setString(2, b);


환경
 - NLS_LANG : ko_kr.KO16KSC5601

기능.
 - varchar2(4000)에 PreparedStatement로 setString() 함수를 이용하여 insert

문제점.
 - java.sql.SQLException: 데이터 크기가 해당 유형의 최대 크기보다 큽니다: 2001
 - 확인 결과 UTF8로 2000이 넘어가면 위와 같은 Exception이 발생.
 - 환경 설정이 KSC5601 등으로 설정 되어 있어도 UTF-8 로 변환하여 체크하기 때문에 문제 발생.

해결 방법 1.
 - UTF8 bytes길이가 2000이 넘어갈때 setString() 대신 setCharacterStream()을 사용해야 하는데
    컬럼이 1개 일때만 해당 컬럼을 맨 뒤로 빼서 사용하는게 안전.
    여러개의 setCharacterStream()을 사용하면 순서가 뒤바뀔수 있음.
 - pstmt.setCharacterStream(2, new StringReader(b), b.length());

해결 방법 2.
 - Statement를 사용
    Statement를 사용할때는 '만 ''로 escape.
 - pstmt = conn.prepareStatement(" insert into TEST (A, B) values (?, '" + b "') ");


참고 : http://www.javaservice.com/~java/bbs/read.cgi?b=jdbc&c=r_p&n=1153792017
반응형

'Database > Oracle' 카테고리의 다른 글

오라클 JOIN / ANSI JOIN  (0) 2022.02.03
NLS 파라미터 확인  (0) 2020.11.17
캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09

+ Recent posts