- 오라클의 VARCHAR2 타입에서 입력 가능한 최대 크기는 4KB(4000Byte)인데, 영문은 1Byte로서 4,000자. 한글은 2Byte로서 2,000자를 넣을 수 있습니다.
- 하지만, 문자열의 길이를 byte로 계산하기 때문에 한글과 같이 2바이트 이상을 사용하는 경우에는 실제 이론상의 길이보다 훨씬 적게 들어갑니다.
- PreparedStatement 인스턴스에서 setString() 으로 문자열을 지정할 경우에 그러한데, 내부적으로 문자를 UTF-8로 변환해서 길이가 4KB를 넘는지 보게 됩니다.
- 영문의 경우 2바이트로 계산해서 최대 2천자까지 들어가나, 한글의 경우 UTF-8에서 문자당 3바이트(?)를 차지하므로 입력 가능한 문자의 개수는 666자(1998 바이트)에 불과합니다.
해결책은 setString()이 아니라, setCharacterStream을 사용하면 됩니다.
StringReader contentreader = new StringReader(content);
...
...
...
pstmt.setCharacterStream(1,contentreader,content.getBytes().length);
위와 같은 방법으로 사용하면 많이 많이 넣을 수 있습니다.
자세한 설명은 아래의 사이트를 참고하세요.
[2]
ref : http://blog.naver.com/rockmg?Redirect=Log&logNo=90008680601
ref : http://apmtip.com/board/zboard.php?id=mysql&no=79
[3]
ref : http://www.jee1.name/blog/186?TSSESSION=40ea754930d07fc940a26c7c2b2bdf9f
마지막으로 삽으로 퍼온 예제
Connection conn = null;
PreparedStatement pstmt = null;
StringBuffer query = new StringBuffer();
query.append(" insert into ").append(" EVENT_LOTTORY_LOG ").append(
" (CUST_SEQ,EDATE,ETIME,EPATH,CONTENT) ").append(" values(?,?,?,?,?)");
DbConnect dbCon = new DbConnect();
try {
StringReader contentreader = new StringReader(content);
conn = dbCon.getConnection();
pstmt = conn.prepareStatement(query.toString());
pstmt.setString(++index, cust_seq);
pstmt.setString(++index, W3sliUtil.getToday("yyyyMMdd"));
pstmt.setString(++index, W3sliUtil.getToday("HHmm"));
pstmt.setString(++index, path);
pstmt.setCharacterStream(++index, contentreader,content.getBytes().length);
pstmt.executeUpdate();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
dbCon.release(pstmt);
dbCon.release(conn);
}
'Languages > Java' 카테고리의 다른 글
JAVA excute / excuteUpdate / excuteQuery 차이점 (0) | 2012.08.15 |
---|---|
JAVA - JDBC, Supported Database, JDBC Drivers, and Deployment Containers (0) | 2012.08.15 |
JAVA - 설정된 java class path 정보 확인하기. (0) | 2012.08.15 |
JAVA - System.getProperty(String key, String def) (0) | 2012.08.15 |
JAVA - java.net.UnknownHostException (0) | 2012.08.15 |