메뉴 건너뛰기

조회 수 13061 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
ORACLE.SQL.CLOB CLASS를 이용하여 4000 BYTES이상의 CLOB TEXT 데이타를 저장하고, 조회하는 예제 
====================================================================== 


PURPOSE 
------- 
jdbc의 standard method인 setClob, setObject로 LOB type의 데이타를 입력하는 
경우에는 4000 bytes이상이 되면 오류가 발생하여 허용하지 않는다. 
oracle.sql.CLOB class를 이용하여 이 제한과 관계없이 CLOB column에 데이타를 
입력하고 조회하는 예제를 살펴본다. 


Explanation 
----------- 
CLOB type에 text를 insert하기 위한 oracle.sql.CLOB.putString을 사용하고, 
입력된 데이타에 대한 조회를 위해서는 CLOB.getCharacterStream을 사용한다. 

JDBC 2.0에서 java.sql에서 제공하는 class는 Clob이고, oracle.sql에서 제공하는 
class는 CLOB으로 대소문자에 차이가 있음을 구별한다. 
오라클의 CLOB/BLOB 처리를 위해서는 oracle.sql.CLOB과 oracle.sql.BLOB을 사용 
하도록 권한다. 


[참고] 이 문서에서는 변수에 text data를 넣어 입력하고, 조회한것은 화면에 
       display하였다. text file을 읽어 CLOB에 저장하거나 CLOB 데이타를 화일에 
       입력하는 것은 다른 class와 method가 사용되므로 별도의 bulletin으로 
       작성하였다. 다음 bulletin을 참조한다. 
       <Bulletin No: 19341>: FILE을 CLOB에 INSERT하고, 반대로 컬럼을 읽어 FILE로 
                             WRITE하는 JDBC PROGRAM 예제 (JDBC 8.1 이상) 



Example 
-------- 

1. 테이블의 생성과 데이타 입력 

미리 다음 작업이 수행되어 있어야 하며, 이 작업도 java application내에 
statement.execute를 통해 포함시킬 수 있다. 

   sqlplus scott/tiger 
   SQL> create table test_clob(id number, c clob);   
   SQL> insert into test_clob values (1, empty_clob()); 

2. ClobHandle.java 

다음 내용을 ClobHandle.java라는 이름으로 생성한 후, 다음과 같이 compile후 
실행한다. 

   os>javac ClobHandle.java 
   os>java ClobHandle 

-------------------------------------------------------------------------------   

   import java.sql.*; 
   import java.io.*; 
   import oracle.jdbc.*; 
   import oracle.sql.*; 


   public class ClobHandle 
   { 
   public static void main (String args [])  throws Exception 
   { 
     Connection   conn; 

     DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver() ); 
     conn = DriverManager.getConnection( "jdbc:oracle:thin:@krint-5:1521:ORA920" 
, "scott","tiger" ); 

     conn.setAutoCommit (false); 

     Statement stmt = conn.createStatement (); 
     try 
     { 
       CLOB lob_loc = null; 

       String buf = new String ("Some Text To Write"); 

       ResultSet rset = stmt.executeQuery 
                ( "SELECT c FROM test_clob WHERE id = 1 FOR UPDATE"); 

       if (rset.next()) 
       { 
           lob_loc = ((OracleResultSet)rset).getCLOB (1);   
       } 

       long pos = 0; // CLOB 데이타가 insert되는 위치의 offset값을 나타낸다. 
       long length = 0; 
       pos = lob_loc.length()+1; 

       // CLOB.putString이 buf에 담긴 데이타를 해당 CLOB 컬럼에 update하는 
       // 작업을 하게 된다. 
       lob_loc.putString(pos, buf); 
     
       conn.commit(); 


       rset = stmt.executeQuery 
                ( "SELECT c FROM test_clob WHERE id = 1 FOR UPDATE"); 

       if (rset.next()) 
       { 
           lob_loc = ((OracleResultSet)rset).getCLOB (1);   
       } 

       dumpClob(lob_loc); 

       stmt.close(); 
       conn.commit(); 
       conn.close(); 
     } 
     catch (SQLException e) 
     { 
             e.printStackTrace(); 
     } 
   } 

   // --------------------------------------------------------------- 
   // CLOB 컬럼의 데이타를 10글자씩 끊어서 화면에 display한다. 
   static void dumpClob (CLOB clob) 
      throws Exception 
   { 
     Reader instream = clob.getCharacterStream(); 

     char[] buffer = new char[10]; 
     int length = 0; 

     while ((length = instream.read(buffer)) != -1) 
     { 
      System.out.print("Read " + length + " chars: "); 

      for (int i=0; i<length; i++) 
               System.out.print(buffer[i]); 
      System.out.println(); 
     } 

    instream.close(); 
   } 
   } 


Reference Documents 
------------------- 
<Note:68349.1> 8i: JDBC Support for BLOB/CLOB 
<Note:103492.1> Example: Using the JDK 1.2 (JDBC 2.0) Clob and Blob Classes 
<Note:157704.1> Errors when inserting LOB data using standard JDBC methods 
Application Developers Guide - Large Objects (LOBs) using Java 

List of Articles
번호 제목 날짜 조회 수
121 피봇(Pivot)을 이용하여 행(Row)을 열(Column)로 바꾸기 file 2016.12.08 12675
120 테이블 생성(다중 PK) 2016.09.12 7936
119 쿼리 파싱 시간 측정 - query parsing time 2016.12.08 7704
118 컬럼의 값 만큼 행(Row)을 늘리기 file 2016.12.08 14092
117 초 이하 단위 시간 얻어오기 2016.09.12 7906
116 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 file 2016.08.29 9612
115 제로보드 reg_date 필드 date 형으로 변환하기 2016.09.12 7168
114 자동증가 SEQUENCE 생성 2016.09.12 7249
113 오라클에서 레코드 값이 없을때 2016.12.08 13469
112 오라클] 숫자 체크 방법 (IS_NUMBER, IS_NUMERIC) file 2017.01.20 8620
111 오라클11g DB 생성 file 2016.12.08 9727
110 오라클(PL/SQL) 미리 정의된 예외처리 2016.12.08 7215
109 오라클(Oracle) 에서 varchar 와 varchar2 의 차이점은 무엇인가 file 2016.08.30 8029
108 오라클(Oracle) 대용량 데이터 토드(Toad)를 이용해서 넣기 file 2016.08.30 8031
107 오라클(Oracle) SUBSTR 함수로 문자열을 다양하게 자르는 방법 file 2016.08.30 7827
106 오라클 해당 월 의 맨첫날 ~ 마지막 일 가져 오는 쿼리 2016.12.08 8417
105 오라클 테이블 생성 스크립트 DDL 추출 - 깔끔하게 Table 전부 추출(Export)하기 file 2016.12.08 12519
104 오라클 인스턴스 클라이언트(oracle instant client) 2016.09.12 10980
103 오라클 웹로직 12.1.3 설치 방법 file 2016.09.21 9902
102 오라클 암호를 분실한 경우 접속 방법 2016.09.21 7274
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved