메뉴 건너뛰기

조회 수 13093 추천 수 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 SQL 쿼리문 보기 좋게 정렬해주는 사이트 - Instant SQL Formatter file 2016.08.29 11016
120 Oracle 저장 프로시저 샘플 2016.08.29 7140
119 WITH문으로 쿼리를 임시테이블이나 View처럼 사용하자. 2016.08.29 8382
118 단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 2016.08.29 9409
117 Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용) 2016.08.29 8148
116 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 file 2016.08.29 9628
115 Merge into를 이용해서 insert나 update를 자동으로 실행하자. 2016.08.29 7577
114 Oracle에서 세자리 콤마 찍기 file 2016.08.29 11725
113 Oracle에서 사용자가 생성한 모든 Table, View를 삭제하는 쿼리 만들기 file 2016.08.29 7476
112 Oracle에서 Foreign Key가 걸려있는 컬럼값 업데이트(update) 하기 file 2016.08.29 9182
111 WHERE절에서 Null 값 비교하기 file 2016.08.29 9358
110 Oracle에서 ORA-28000: 계정이 잠금되었습니다. - 해결 방법 file 2016.08.29 7329
109 간단한 쿼리로 일련번호 쉽게 넣기 - ROWNUM 사용 file 2016.08.29 9477
108 오라클(Oracle) 대용량 데이터 토드(Toad)를 이용해서 넣기 file 2016.08.30 8038
107 UNION ALL 과 ORDER BY 섞어서 쓰기 2016.08.30 9904
106 TOAD 에서 Edit 를 통해 sql문을 작성할때 참고해야할 View file 2016.08.30 7474
105 Oracle 시퀀스 생성, 추가, 삭제 file 2016.08.30 8157
104 rownum 으로 범위지정을 해주고 싶을 때 2016.08.30 8631
103 Oracle 에서 NVL, NVL2 함수 사용하는 예제 2016.08.30 8341
102 Toad 사용시 캐릭터 인코더 UTF-8 로 변경하기 file 2016.08.30 10100
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved