Background Image
조회 수 54548 추천 수 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 기타 자주 발생하는 큐브리드(cubrid) 에러 메시지 정리 admin 2011.07.14 81364
165 Linux 리눅스에서 top 명령어를 통한 CPU 점유율 확인 및 측정하기 file 정훈 2017.06.02 79911
» Java CUBRID와 Oracle의 Clob 타입 사용 방법 비교. seongjoon 2012.06.30 54548
163 Java iBATIS framework with CUBRID file 웁쓰 2009.05.19 54546
162 Linux HP-UX에서 CUBRID 사용을 위한 kernel 설정값 조정 1 admin 2009.04.01 54135
161 Java Spring framework 사용 예제 admin 2009.04.01 53119
160 기타 [주의사항] CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 admin 2011.07.14 52553
159 기타 connect by 구현 방법 admin 2009.04.01 52371
158 PHP windows 상에서 PHP 설치하기 file admin 2008.11.21 51804
157 기타 오라클 개발자를 위한 CUBRID 개발 안내 1 admin 2009.04.01 49817
156 Java DBCP 사용법 1 admin 2008.11.21 48362
155 Windows CUBRID 2008 사용법 admin 2008.11.21 47933
154 Java jsp용 jdbc 샘플입니다. file 시난 2009.05.25 47606
153 기타 CUBRID 활용 - 질의 튜닝 사례 중심 file cubrid 2010.12.02 45960
152 Java CUBRID에서 log4sql을 사용하자 정병주 2009.06.12 44302
151 Install Windows 에서 CUBRID 설치하기 file 남재우 2008.11.22 43641
150 PHP LINUX에서 PHP 사용하기 file admin 2008.11.21 42495
149 Install CUBRID Manager 사용시 로그인에 대하여 1 file admin 2009.04.01 42038
148 PHP Apache, PHP 설치 방법 file 이용미 2013.05.16 41246
147 기타 CUBRID 개발 로드맵 admin 2008.12.27 40321
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