오라클 clob 예제
Lob type이란?
lob(Large Object) 타입은 대용량 데이터를 저장하기위한 데이터 타입으로 오라클 8버전부터 지원된다.
Lob 타입의 특징
이전에 대용량 처리는 long 타입으로 처리를 할 수 밖에 없었다. 그런데 이 칼럼은 한테이블에 하나만 사용할 수 있으며 최대 크기가 2GB였다. 더군다나 검색을 구현하기가 어려워 포기를 해야 했다. 그래서 이런 문제를 보안하기 위 나온 것이 Lob 타입이다. Lob 타입은 테이블에 여러개의 컬럼을 생성할 수 있으며 최대 크기가 4GB이다. 또한 long 타입보다 훨씬 쉬운 검색기능을 제공한다.
Lob type의 종류
이전에 대용량 처리는 long 타입으로 처리를 할 수 밖에 없었다. 그런데 이 칼럼은 한테이블에 하나만 사용할 수 있으며 최대 크기가 2GB였다. 더군다나 검색을 구현하기가 어려워 포기를 해야 했다. 그래서 이런 문제를 보안하기 위 나온 것이 Lob 타입이다. Lob 타입은 테이블에 여러개의 컬럼을 생성할 수 있으며 최대 크기가 4GB이다. 또한 long 타입보다 훨씬 쉬운 검색기능을 제공한다.
BLob | (Binary Large Object), 이진 바이너리 데이터의 저장시 사용된다. |
CLob | (Character Large Object), 문서 데이터의 저장시 사용된다. |
BFILE | 외부 파일에 저장된 이진 데이터가 있는 경로의 저장시 사용된다. |
Clob에 저장하기
1: import java.sql.*; 2: import java.io.*; 3: import oracle.sql.*; 4: import oracle.jdbc.driver.*; 5: ... 6: 7: public void insertQuery(UploadBoard up,int re_step,int re_level) throws Exception 8: { 9: ResultSet rs = null; 10: PreparedStatement pstmt = null; 11: Connection conn = null; 12: String query = "insert into "+up.getTableName()+ " (seq,re_step, re_level,name,title,pwd,email,readnum, writeday,ip,relativeCnt, homepage,imgInfo,content,tag) values(?,?,?,?,?,?,?,0,sysdate,?,0,?,?,empty_clob(),?)";
13: try{ 14: conn = DBManager.getClobConnection(); 15: conn.setAutoCommit(false);
16: pstmt = conn.prepareStatement(query); 17: pstmt.setInt(1,up.getSeq()); 18: pstmt.setInt(2,re_step); 19: pstmt.setInt(3,re_level); 20: pstmt.setString(4,up.getName()); 21: pstmt.setString(5,up.getTitle()); 22: pstmt.setString(6,up.getPwd()); 23: pstmt.setString(7,up.getEmail()); 24: pstmt.setString(8,up.getIp()); 25: pstmt.setString(9,up.getHomepage()); 26: pstmt.setString(10,up.getImgInfo()); 27: pstmt.setString(11,up.getTag()); 28: pstmt.executeUpdate(); 29: pstmt.close(); 30: String query2 = " select /*+ index_desc("+up.getTableName()+ " " +up.getTableName()+"_indx) */ content from "+ up.getTableName()+ " where seq = ? for update ";
31: pstmt = conn.prepareStatement(query2); 32: pstmt.setInt(1,up.getSeq()); 33: rs = pstmt.executeQuery(); 34: if(rs.next()) { 35: CLOB clob = ((OracleResultSet)rs).getCLOB(1); 36: Writer writer = clob.getCharacterOutputStream(); 37: Reader src = new CharArrayReader(up.getContent().toCharArray()); 38: char[] buffer = new char[1024]; 39: int read = 0; 40: while ( (read = src.read(buffer,0,1024)) != -1) { 41: writer.write(buffer, 0, read); // write clob. 42: } 43: src.close(); 44: writer.close(); 45: } 46: conn.commit(); 47: conn.setAutoCommit(true);
48: }finally{ 49: DBManager.close(rs,pstmt,conn); 50: } 51: } |
Clob 불러오기
... 1: public BoardTable getViewData(String tableName,int seq) throws Exception 2: { 3: BoardTable bTable = new BoardTable(); 4: String query = " select * from "+tableName+" where seq = ? "; 5: ResultSet rs = null; 6: PreparedStatement pstmt = null; 7: Connection conn = null; 8: try{ 9: conn = DBManager.getConnection(); 10: pstmt = conn.prepareStatement(query); 11: pstmt.setInt(1,seq); 12: rs = pstmt.executeQuery(); 13: if (rs.next()) { 14: ... 15: ... 16: StringBuffer output = new StringBuffer(); 17: Reader input = rs.getCharacterStream("content"); 18: char[] buffer = new char[1024]; 19: int byteRead; 20: while((byteRead=input.read(buffer,0,1024))!=-1){ 21: output.append(buffer,0,byteRead); 22: } 23: input.close(); 24: bTable.setContent(output.toString());
25: ... 26: ... 27: } 28: } finally { 29: DBManager.close(rs,pstmt,conn); 30: } 31: return bTable; 32: } |
[출처] [펌] 오라클 clob 예제|작성자 푸른하늘