본문 바로가기
[개발] Programming/Java

LOB의 종류와 CLOB을 자바 스트링으로 변환시키는 방법

by eatyourKimchi 2018. 11. 7.

LOB (Large OBject)

 

- LOB은 TEXT, 그래픽, 이미지, 비디오, 사운드 등 구조화되지 않은 대형 데이터를 저장하는데 사용한다.

- 일반적으로 테이블에 저장되는 구조화된 데이터들은 크기가 작지만, 멀티미디어 데이터는 크기가 크다.

- 크기가 큰 데이터는 DB에 저장하기 힘들기 때문에 OS상 존재하는 파일을 데이터베이스가 접근하게 된다.

- LONG, LONG RAW 데이터 유형은 예전에 사용던 것이고, 현재는 대부분 LOB 데이터 유형을 사용한다.

- TO_LOB 함수를 이용하여 LONG 및 LONG RAW 를 LOB 으로 변경할 수 있다.

 

종류

   - CLOB: 문자 대형 객체 (Character). Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행한다.

   - BLOB: 이진 대형 객체 (Binary). 이미지, 동영상, MP3 등... 

   - NCLOB: 내셔널 문자 대형 객체 (National). 오라클에서 정의되는 National Character Set을 따르는 문자.

   - BFILE: OS에 저장되는 이진 파일의 이름과 위치를 저장. 읽기 전용 모드로만 액세스 가능.

 

데이터베이스 내부, 외부에 따라

   - 내부 : BLOB, CLOB, NCLOB - Table에 LOB 형식의 컬럼을 생성하고 이곳에 데이터의 실제 위치를 가리키는 Locator(위치자) 저장.

   - 외부 : BFILE

 

특징

- 하나의 테이블에 여러 개의 LOB 열(column) 가능

- 최고 4GB까지 저장

- SELECT로 위치자 반환

- 순서대로 또는 순서없이 데이터 저장

- 임의적 데이터 액세스

 

LOB 구성

- LOB 값 : 저장될 실제 객체를 구성하는 데이터

- LOB 위치자 : 데이터베이스에 저장된 LOB값의 위치에 대한 포인터

- LOB열에는 데이터가 없고 LOB 위치자만 들어있다.

 

출처: http://stepping.tistory.com/30 [디딤돌]

 

 

 

예제

DB에서 SELECT 해온 데이터가 CLOB인지 아닌지 검사 후 String으로 변환하는 예제

(CONTENTS는 테이블의 컬럼 명)

 

자바단 소스

if( row.get("CONTENTS") instanceof java.sql.Clob ) { 

 

    StringBuffer strOut = new StringBuffer(); 

    String str = ""; 

    Clob clob = (java.sql.Clob)row.get("CONTENTS"); 

    BufferedReader br = new BufferedReader(clob.getCharacterStream()); 

 

    while ((str = br.readLine()) != null) { 

        strOut.append(str); 

    }

 

    System.out.println("> 이제 출력된다 = " + strOut.toString());

}

 

 

댓글