Background Image
조회 수 54561 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

CLOB 이란?

CUBRID 매뉴얼에는 아래와 같이 나와 있다. 간단하게 설명하면, 사이즈가 데이터를 외부 파일로 저장하기 위한 데이터 타입이다.

ü  문자열 데이터를 DB 외부에 저장하기 위한 타입이다.

ü  CLOB 데이터의 최대 길이는 외부 저장소에서 생성 가능한 파일 크기이다.

ü  CLOB 타입은 SQL 문에서 문자열 타입으로 입출력 값을 표현한다. , CHAR(n), VARCHAR(n), NCHAR(n), NCHAR VARYING(n) 타입과 호환된다. , 명시적 타입 변환만 허용되며, 데이터 길이가 서로 다른 경우에는 최대 길이가 작은 타입에 맞추어 절삭(truncate)된다.

ü  CLOB 타입 값을 문자열 값으로 변환하는 경우, 변환된 데이터는 최대 1GB 넘을 없다. 반대로 문자열을 CLOB 타입으로 변환하는 경우, 변환된 데이터는 CLOB 저장소에서 제공하는 최대 파일 크기를 넘을 없다.

 

SQL JDBC 테스트를 위한 준비

아래와 같은 스키마를 가지는 테이블을 생성하고 임의의 테스트 데이터를 입력한다. 테스트 데이터 입력은 아래의 CLOB TYPE 사용 방법을 참고하여 입력한다.

CREATE TABLE CLOB_TBL( col1 CLOB );

 

SQL문에서 CLOB TYPE 사용 방법

SQL 이용한 CLOB 구문은 일반적으로 아래와 같이 사용된다.

ü  Oracle

INSERT INTO CLOB_TBL VALUES(‘VAL’);

SELECT col1 FROM CLOB_TBL;

ü  CUBRID

INSERT INTO CLOB_TBL VALUES(CHAR_TO_CLOB(‘VAL’));

SELECT CLOB_TO_CHAR(col1) FROM CLOB_TBL;

Oracle 묵시적 타입변환이 되지만 CUBRID 그렇지 않다. 그러므로 CHAR_TO_CLOB 또는 CLOB_TO_CHAR이라는 CUBRID에서 제공하는 함수를 이용하여 String CLOB 타입으로 변경을 해줘야 한다.

 

JDBC 이용한 SELECT 방법

기본적으로 CLOB 데이터는 파일로 저장된 데이터이다. 이러한 데이터를 JDBC드라이브를 통해 가져오기 위해서는 getString, StringBuffer, getClob 이용한 3가지 방법으로 나누어진다.

getString 이용한 방법

getString CUBRID 경우 최대 1G 크기를 받을 있다. 그렇기 때문에 1G이상의 데이터를 getString 이용할 없고 아래의 StringBuffer, getClob 이용해야 한다.

String sql = "SELECT col1 FROM CLOB_TBL";

Statement stmt = null;

ResultSet rs = null;

 

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

 

while(rs.next()){

       System.out.println("getString = " + rs.getString(1));

}

 

rs.close();

stmt.close();

StringBuffer 이용한 방법

StringBuffer 이용한 방법은 아래와 같다. 일반적으로 Oracle에서 Clob데이터를 출력하는 방법으로 많이 사용된다.

String sql = "SELECT col1 FROM CLOB_TBL";

Statement stmt = null;

ResultSet rs = null;

 

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

 

while(rs.next()){

       StringBuffer output = new StringBuffer();

       Reader input = rs.getCharacterStream(1);

       char[] buffer = new char[1024];

       int byteRead = 0;

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

                    output.append(buffer, 0, byteRead);

       }

       System.out.println("getCharacterStream = " + output.toString());

}

 

rs.close();

stmt.close();

getClob 이용한 방법

getClob 이용한 방법은 아래와 같다. ibatis(mybatis)에서 아래와 같이 Clob 처리하며 CUBRID Oracle에서 모두 동일한 결과를 출력한다.

String sql = "SELECT col1 FROM CLOB_TBL";

Statement stmt = null;

ResultSet rs = null;

 

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

 

while(rs.next()){

       Clob clob = rs.getClob(1);

       if (clob != null) {

                    int size = (int) clob.length();

                    System.out.println("getClob = " + clob.getSubString(1, size));

       }

}

 

rs.close();

stmt.close();

 

JDBC 이용한 INSERT 방법

Statement SQL 직접 수행 방법

CUBRID Oracle 모두 아래와 같이 수행 가능하다. 하지만, Statement 경우 특정 사이즈 이상이 되면 exception 에러가 발생하기 때문에 대용량 데이터 입력을 위해 BLOB데이터 타입을 이용한다면 PrapareStatement 사용은 필수이다.

Statement stmt = null;

 

String sql = "INSERT INTO CLOB_TBL VALUES('CLOB TEST')";

stmt = conn.createStatement();

stmt.executeUpdate(sql);

stmt.close();

setSting 이용한 방법

getString 동일하게 최대 1G까지의 데이터만 받을 있다. Oracle 경우 getString 이용하여 출력이 가능하지만 CUBRID CHAR_TO_CLOB 함수를 이용하여 묵시적 변환을 해야 데티어 getString 이용한 데이터 입력이 가능하다.

ü  Oracle

PreparedStatement pstmt = null;

String sql = "INSERT INTO CLOB_TBL VALUES(?)";;

 

pstmt = conn.prepareStatement(sql);

pstmt.executeUpdate();

pstmt.close();

ü  CUBRID

PreparedStatement pstmt = null;

String sql = "INSERT INTO CLOB_TBL VALUES(CHAR_TO_CLOB(?))";

 

pstmt = conn.prepareStatement(sql);

pstmt.executeUpdate();

pstmt.close();

setClob(CUBRID), EMPTY_CLOB(Oracle) 이용한 방법

CLOB 이용하여 데이터 입력 방법은 Oracle보다 CUBRID 간단하고 사용하기가 쉽다.

ü  Oracle

PreparedStatement pstmt = null;

String sql = "INSERT INTO CLOB_TBL VALUES(?)";;

 

pstmt = conn.prepareStatement(sql);

conn.setAutoCommit(false);

sql = "INSERT INTO CLOB_TBL VALUES(EMPTY_CLOB());";

pstmt = conn.prepareStatement(sql);

pstmt.executeUpdate();

 

sql = "SELECT col1 FROM CLOB_TBL WHERE ~";

pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery();

 

if(rs.next()){

        oracle.sql.CLOB clob =  ((OracleResultSet)rs).getCLOB(1);

        Writer writer = clob.getCharacterOutputStream();

        Reader reader = new CharArrayReader("CLOB TEST-PREPARE-SETCLOB".toCharArray());

        char[] buffer = new char[1024];

        int byteRead = 0;

       

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

                     writer.write(buffer, 0, byteRead);

        }

}

ü  CUBRID

PreparedStatement pstmt = null;

String sql = "INSERT INTO CLOB_TBL VALUES(?)";;

 

pstmt = conn.prepareStatement(sql);

Clob clob = conn.createClob();

clob.setString(1, "CLOB TEST-PREPARE-SETCLOB");

pstmt.setClob(1, clob);

pstmt.executeUpdate();


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
166 기타 트랜잭션과 LOCK 초급과정 정만영 2010.07.01 20760
165 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1419
164 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13433
163 기타 조인 방법(Join Method) 설명 file 웁쓰 2009.12.31 27995
162 기타 제로보드 XE 사용하기 file admin 2008.11.21 33069
161 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81441
160 기타 자동증가 속성 사용 방법 및 주의 사항 남재우 2010.02.26 35690
159 Windows 윈도우즈 환경에서 배치화일을 이용하여 백업 또는 데이터베이스 정리 수행하기 남재우 2010.03.03 27487
158 기타 오래 걸리는 질의 및 동일 시간에 수행 중인 질의 추출하기 손승일 2009.05.26 20069
157 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49822
156 기타 예제로 배우는 CUBRID 스터디 문학청년 2009.12.29 18558
155 기타 에러 메시지(error) 설명 및 조치 가이드 file CUBRID_DEV 2009.07.11 24457
154 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12079
153 기타 시스템 카다로그 2 admin 2008.11.21 22333
152 기타 스칼라 서브쿼리 사용 가이드 웁쓰 2009.12.31 28275
151 기타 서비스 오픈을 위한 CUBRID 구성 가이드 손승일 2009.11.28 23204
150 Linux 복제 따라하기 admin 2008.11.21 29096
149 기타 보안 설정 admin 2008.11.21 22838
148 기타 멀티미디어 데이터 관리를 위한 CUBRID GLO Method 활용 janus 2009.12.11 16191
147 Linux 리소스를 제한(limits.conf) 하여 DB서버를 관리하자 1 주현 2015.12.31 26643
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales