메뉴 건너뛰기

조회 수 13060 추천 수 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
번호 제목 날짜 조회 수
81 오라클(PL/SQL) 미리 정의된 예외처리 2016.12.08 7215
80 오라클 계정 lock 해제 2016.12.08 8444
79 ORA-01652 128(으)로 테이블 공간 ***에서 임시 세그먼트를 확장할 수 없습니다. file 2016.12.08 9248
78 IMP-00010: 엑스포트 파일이 유효하지 않고, 헤더가 검증에 실패했습니다 file 2016.12.08 8807
77 오라클 DB 생성 후 설정 Listener.ora & Tnsnames.ora (윈도우) file 2016.12.08 23306
76 오라클11g DB 생성 file 2016.12.08 9727
75 오라클 테이블 생성 스크립트 DDL 추출 - 깔끔하게 Table 전부 추출(Export)하기 file 2016.12.08 12514
74 CentOS 6.5 에 Oracle Database 11g Release 2 설치하기 file 2016.12.08 12409
73 Oracle DBMS_CRYPTO 사용하기 - 암복호화 하기 file 2016.12.08 11605
72 sqlplus에서 Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법 sqlplus 데이터 insert 입력값 요구 2016.12.08 8910
71 Oracle SQL Developer 도구 활용하기 - Part2 file 2016.12.08 11317
70 Oracle SQL Developer 도구 활용하기 - Part1 file 2016.12.08 11740
69 ORA-39142 덤프 버전이 틀려서 넣지 못할 때 2016.12.08 8967
68 데이터의 암호화 및 복호화 file 2016.12.08 13237
67 oracle 에서 Index를 이용해서 즉 힌트와 rownum을 이용하여 게시판 작성하기 2016.12.08 7023
66 오라클에서 레코드 값이 없을때 2016.12.08 13469
» CLOB TEXT 데이타를 저장하고, 조회하는 예제 2016.12.08 13060
64 오라클 25가지 SQL 작성법 2016.12.08 7706
63 rownum 사용 - 최근글 몇개만 가져오기 2016.12.08 9984
62 Oracle Batch Processing 2016.12.08 6822
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved