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
번호 분류 제목 글쓴이 날짜 조회 수
21 Java JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드 file 윤준수 2017.03.30 3918
20 Java tomcat8.0(DBCP2)과 CUBRID 연동하기 손승일 2016.07.01 15525
19 Java CUBRID에서 Java AddBatch 사용 엄기호 2016.06.28 8339
18 Java CUBRID와 MyBATIS 빠르게 연동하기 file 김승훈 2015.05.07 19123
» Java CUBRID와 Oracle의 Clob 타입 사용 방법 비교. seongjoon 2012.06.30 54548
16 Java SELECT ~ FOR UPDATE 대체 방법 손승일 2009.12.30 32367
15 Java CUBRID Java Stored Procedure와 DB Server Memory 관계 file 손승일 2009.10.31 40190
14 Java QuantumDB Eclipse Plugin을 사용하여 CUBRID연동하기 2 cubebridge 2009.10.06 28920
13 Java CUBRID JDBC에서 유니코드 사용하기 1 손승일 2009.08.15 27434
12 Java CUBRID Collection Data Type 사용하기 - JDBC 손승일 2009.08.15 24902
11 Java CUBRID GLO 사용하기 - JDBC 손승일 2009.08.15 23493
10 Java JavaSP SampleCode(Pivot기능) cubebridge 2009.07.28 27553
9 Java log4jdbc를 사용한 JDBC 로그 분석 시난 2009.07.02 36391
8 Java CUBRID에서 log4sql을 사용하자 정병주 2009.06.12 44302
7 Java jsp용 jdbc 샘플입니다. file 시난 2009.05.25 47606
6 Java iBATIS framework with CUBRID file 웁쓰 2009.05.19 54546
5 Java SQuirreL SQL Client에서 CUBRID 사용하기 3 Prototype 2009.04.18 34533
4 Java Power*Architect 에서 CUBRID 사용하기 Prototype 2009.04.18 23879
3 Java AquaDataStudio 에서 CUBRID 사용하기 Prototype 2009.04.18 23666
2 Java Spring framework 사용 예제 admin 2009.04.01 53119
Board Pagination Prev 1 2 Next
/ 2

Contact Cubrid

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