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());
}
'[개발] Programming > Java' 카테고리의 다른 글
자바 Exception:Broken pipe 오류 해결 방법 (0) | 2018.11.09 |
---|---|
자바 쿠키 다루기 (쿠기 생성, 조회, 삭제) (0) | 2018.11.08 |
자바 HashMap vs Hashtable 차이점, 예제 (0) | 2018.11.08 |
자바, 몇몇 특수문자로 split이 안될 때 해결 방법 (2) | 2018.11.08 |
자바 SimpleDateFormat으로 Date 타입 String 타입으로 변환 (0) | 2018.11.07 |
댓글