2008년 8월 18일 월요일

JAVA 에서 ORACLE의 CLOB 타입 사용하기

JAVA 에서 ORACLE의 CLOB 타입 사용하기


INSERT시
1. CLOB 타입인 필드의 기본값을 empty_clob() 로 설정합니다.

2. setAutoCommit(false) 를 선언한다.

3. CLOB 타입 필드를 제외한 나머지 필드에 데이터를 저장한다.

4. CLOB 타입 필드에 데이터를 넣는 동안 다른 변경 작업을 막기 위해 LOCK을 건다.

5. CLOB 타입 필드에 데이터를 넣는다.

6. Commit() 한다.

7. setAutoCommit(true) 를 선언한다.


예제 소스 코드


import! java.io.*;
import! java.net.*;
import! java.sql.*;

import! oracle.sql.*;
import! oracle.jdbc.driver.*;

public class ClobTest {
public static void main(String[] argv) {

String drv = "oracle.jdbc.driver.OracleDriver";
String dburl = "jdbc:oracle:thin:@192.168.3.30:1521:GRDB21";
String user = "scott";
String password = "tiger";

Connection conn = null;
Statement st;
ResultSet rs;

try {
Class.forName(drv);
System.out.println("Drive Loading...");
conn = DriverManager.getConnection(dburl, user, password);
System.out.println("Connecting...");
st = conn.createStatement();

// 입력할 텍스트 만들기
StringBuffer sb = new StringBuffer();
String clobTest = "한글 테스트입니다
It is difficult
";
for (int i = 0; i < 300; i++)
sb.append(clobTest);



// 1. CLOB 데이터 입력하기 위해, empty_clob() 생성
try {
st.executeUpdate("insert into test_clob values (''02'', empty_clob())");
} catch (Exception ee) {
ee.printStackTrace(System.out);
}

// 2. setAutoCommit을 false로 꼭 해야 한다.
conn.setAutoCommit(false);


// 3. CLOB column에 대한 lock을 얻는다.
rs = st.executeQuery("select desc2 from test_clob where code = ''02'' for update");
if (rs. next()) {

// 4. 오라클의 함수들을 사용하기 위해 cast 하였다.
CLOB cl = ((OracleResultSet)rs).getCLOB("desc2");

// 스트림을 이용한 값 저장
BufferedWriter writer = new BufferedWriter(cl.getCharacterOutputStream());
writer.write(sb.toString());
writer.close();
}
conn.commit();
conn.setAutoCommit(true);

// 입력한 값 읽어 오기
rs = st.executeQuery("select * from test_clob where code = ''02''");

if (rs.next()) {
String code = rs.getString("code");

// CLOB column에 대한 스트림을 얻는다.
Reader rd = rs.getCharacterStream("desc2");

sb = new StringBuffer();
char[] buf = new char[1024];
int readcnt;
while ((readcnt = rd.read(buf, 0, 1024)) != -1) {
// 스트림으로부터 읽어서 스트링 버퍼에 넣는다.
sb.append(buf, 0, readcnt);
}
rd.close();

System.out.println("code : " + code);
System.out.println("desc2 : " + sb.toString());
}


}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
}

코드 출처 : http://rudaks.co.kr/bbs/view.jsp?seq=379&bbs=db&PageNo=1





UPDATE 시
기본은 Insert 와 동일하나, CLOB 필드 업데이트 전에 CLOB 필드의 내용을 모두 비워줘야 한다.


예제 소스 코드

ex) UPDATE 테이블 SET CLOB필드 = empty_clob() WHERE 조건


SELECT 시
1. CLOB 가 아닌 데이터를 모두 SELECT 한다.

2. CLOB 인 데이터를 SELECT 한다.


예제 소스 코드




--- 우선은 밑의 거 두개를 import! 합니다.

< % @ page import!="oracle.jdbc.driver.*" % >

< % @ page import!="oracle.sql.*" % >



-- clob를 불러올 query를 만든다 .(clob만 select 합니다.)

--조건은 물론 pk이겠지요.



queryclob.append(" select body from r2enjoybbs ");

queryclob.append(" where bbsid = ? ");



--- 가져오는 부분

--- body1에다가 clob의 데이타를 넣는다.

StringBuffer body1 = new StringBuffer();

pstmt2 = con.prepareStatement(queryclob.toString());

pstmt2.setInt(1,bbsid);

rs2 = pstmt2.executeQuery();

if(rs2.next())

{

Reader input = rs2.getCharacterStream(1);

char[] buffer = new char[1024];

int byteRead;

while((byteRead=input.read(buffer,0,1024))!=-1)

{

body1.append(buffer,0,byteRead);

}

input.close();

}

rs2.close();

pstmt2.close();

코드 출처 : http://database.ssarang.net/?inc=read&aid=11196&criteria=oracle&subcrit=&id=&limit=20&keyword=clob+select&page=5


참조 사이트 : http://cafe.daum.net/boilra/5ZZ3/6?docid=1vPt|5ZZ3|6|20080319085849&q=empty_clob()&srchid=CCB1vPt|5ZZ3|6|20080319085849

댓글 없음: