일반적으로 oracle jdbc driver에서 제공하는 OracleResultSet과 OraclePreparedStatement, oracle.sql.CLOB을 사용하여 CLOB데이타의 조회와 Update를 처리하였다.
Weblogic에서는 자체 Wrapper를 사용하는 관계로 OracleResultSet으로 Casting하는 부분에서 Exception이 발생하였다.(Exception도 안 뜨고 프로그램 실행 중지 현상 발생)
그래서, 사용한 것이 java.sql.Clob을 사용한 것이다.
/**
* Weblogic에서 Oracle Clob Data를 읽어 String을 변환
* @param clob Clob
* @return String
*/
public String weblogicClobToString(Clob clob)
{
// Buffer to hold the Clob data
StringBuffer clobdata = new StringBuffer();
if (clob != null)
{
try
{
Reader reader = clob.getCharacterStream();
char[] buffer = new char[1024];
int byteRead;
while ((byteRead = reader.read(buffer, 0, 1024)) != -1)
{
clobdata.append(buffer, 0, byteRead);
}
}
catch (Exception ex)
{ // Trap errors
ex.printStackTrace();
}
}
return clobdata.toString();
}
위 소스에서 볼 수 있듯이 java.sql의 Clob으로부터 Stream을 추출하여 java.io의 Reader를 생성하여 String으로 변환한다.
getCharacterStream()과 getAsciiStream()이 있는데, ascii stream은 2byte문자가 깨지니 당연히 getCharacterStream()을 사용하여야 겠다.
Database에 Clob data를 update 할 때는,
String tempNote = exnewsvo.getNote();
Reader sqlcontent = new StringReader(tempNote);
pstmt.setCharacterStream(7, sqlcontent, tempNote.length());
PreparedStatement의 setCharacterStream() Method를 이용하여, String을 Stream으로 바꾼 Reader를 이용하여 Update한다.
'WebLogic' 카테고리의 다른 글
java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence (0) | 2012.09.05 |
---|---|
웹로직 weblogic 오라클 clob (0) | 2012.08.24 |
WEBLOGIC 비밀번호 (0) | 2012.07.29 |
TOMCAT java.lang.ClassCastException: oracle.sql.CLOB (0) | 2012.07.29 |
ORA-01000: 최대 열기 커서 수를 초과했습니다. (0) | 2012.07.29 |