반응형
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 |