728x90

일반적으로 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한다.

출처 : http://cafe.naver.com/teamsolution/4

728x90

+ Recent posts