메뉴 건너뛰기

조회 수 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 

  1. 오라클(PL/SQL) 미리 정의된 예외처리

    Date2016.12.08 Views7215
    Read More
  2. 오라클 계정 lock 해제

    Date2016.12.08 Views8444
    Read More
  3. ORA-01652 128(으)로 테이블 공간 ***에서 임시 세그먼트를 확장할 수 없습니다.

    Date2016.12.08 Views9248
    Read More
  4. IMP-00010: 엑스포트 파일이 유효하지 않고, 헤더가 검증에 실패했습니다

    Date2016.12.08 Views8807
    Read More
  5. 오라클 DB 생성 후 설정 Listener.ora & Tnsnames.ora (윈도우)

    Date2016.12.08 Views23306
    Read More
  6. 오라클11g DB 생성

    Date2016.12.08 Views9727
    Read More
  7. 오라클 테이블 생성 스크립트 DDL 추출 - 깔끔하게 Table 전부 추출(Export)하기

    Date2016.12.08 Views12514
    Read More
  8. CentOS 6.5 에 Oracle Database 11g Release 2 설치하기

    Date2016.12.08 Views12409
    Read More
  9. Oracle DBMS_CRYPTO 사용하기 - 암복호화 하기

    Date2016.12.08 Views11605
    Read More
  10. sqlplus에서 Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법 sqlplus 데이터 insert 입력값 요구

    Date2016.12.08 Views8910
    Read More
  11. Oracle SQL Developer 도구 활용하기 - Part2

    Date2016.12.08 Views11317
    Read More
  12. Oracle SQL Developer 도구 활용하기 - Part1

    Date2016.12.08 Views11740
    Read More
  13. ORA-39142 덤프 버전이 틀려서 넣지 못할 때

    Date2016.12.08 Views8967
    Read More
  14. 데이터의 암호화 및 복호화

    Date2016.12.08 Views13237
    Read More
  15. oracle 에서 Index를 이용해서 즉 힌트와 rownum을 이용하여 게시판 작성하기

    Date2016.12.08 Views7023
    Read More
  16. 오라클에서 레코드 값이 없을때

    Date2016.12.08 Views13469
    Read More
  17. CLOB TEXT 데이타를 저장하고, 조회하는 예제

    Date2016.12.08 Views13061
    Read More
  18. 오라클 25가지 SQL 작성법

    Date2016.12.08 Views7706
    Read More
  19. rownum 사용 - 최근글 몇개만 가져오기

    Date2016.12.08 Views9984
    Read More
  20. Oracle Batch Processing

    Date2016.12.08 Views6822
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved