이야기앱 세상
오라클 CLOB 데이터 입출력 본문
1. 오라클 10g에서 CLOB 처리
오라클 10g에서 CLOB 처리는 다른 데이터 타이입을 처리할 때와 마찬가지로 처리하면 된다.
오라클 9i 이하에서는 아래 2번 항목 참고
2. 오라클 9i 이하에서 CLOB 처리
1) 저장하기
String sql = "insert into board (seq,name, conenet, reg_date) values (board_seq.nextval,?,empty_clob(),sysdate)";
// empty_clob()를 이용해 데이터를 입력하기 위해 공간 확보
try{
conn = getConnection();
conn.setAutoCommit(false); // auto commit 해제
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,bd.getName());
pstmt.executeUpdate();
pstmt.close();
ps = con.prepareStatement("select board_seq.CURRVAL from dual");
// CLOB 타입의 데이터를 입력하기 위해 현재 시퀀스 번호를 조회함
rs = ps.executeQuery();
rs.next();
int seq = rs.getInt(1);
String sql2 = " select content from board where seq = ? for update ";
// for update를 이용해 CLOB column에 lock 건다
pstmt = conn.prepareStatement(sql2);
pstmt.setInt(1,seq);
rs = pstmt.executeQuery();
if(rs.next()) {
CLOB clob = ((OracleResultSet)rs).getCLOB(1);
// ======1 번 방법 ================
Writer writer = clob.setCharacterStream(0L);
StringReader src = new StringReader((db.getContent());
char[] buffer = new char[1024];
int read = 0;
while ( (read = src.read(buffer) != -1) {
writer.write(buffer, 0, read);
src.close();
writer.close();
// =======2번 방법 ================
BufferedWriter bw = new BufferedWriter(clob.setCharacterStream(0L));
bw.write(db.getContent());
bw.close();
}
}
conn.commit();
catch (Exception e) {
conn.rollback();
..................
}finally{
conn.setAutoCommit(true);
..................
}
}
2) 불러오기
String sql = " select * from board where seq = ? ";
try{
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,seq);
rs = pstmt.executeQuery();
if (rs.next()) {
...
...
// =======1번 방법 ================
StringBuffer sb = new StringBuffer();
Reader rd = rs.getCharacterStream("content");
char[] buffer = new char[1024];
int byteRead;
while((byteRead=rd.read(buffer,0,1024))!=-1){
sb.append(buffer,0,byteRead);
}
rd.close();
bean.setContent(sb.toString());
// =======2번 방법 ================
CLOB c1 = ((OracleResultSet)rs).getCLOB("content");
BufferedReader br = new BufferedReader(c1.getCharacterStream());
String temp = "";
String comments = "";
while( (temp=br.readLine()) != null ) {
comments += temp+System.getProperty("line.separater");
}
br.close();
bean.setContent((comments));
...
...
}
} finally {
..........
}
return bean;
}
'IT > Database' 카테고리의 다른 글
컬럼 추가,수정,삭제, 테이블명, 컬럼명 변경 (0) | 2016.03.21 |
---|---|
sqlldr 을 이용한 다량의 데이터 import (0) | 2016.03.21 |
오라클 ROWNUM을 이용한 페이징 처리 (0) | 2016.03.21 |
오라클 시퀀스 생성 및 수정, 삭제 (0) | 2016.03.21 |
오라클 계정 비밀번호 변경 (0) | 2016.03.21 |