- xrath.com 에서 번역됨

# Clob

## 10.1 Clob 의 개요

`Clob` 객체란, SQL 의 `CLOB` (문자 라지 객체)를 Java 프로그램 언어에 매핑 한 표현 형식입니다. SQL 의 `CLOB` 는, 문자 라지 객체를 데이타베이스표의 은행내의 렬치로서 포함하는 편입의 형태입니다. 프로그래머는,`ResultSet`,`CallableStatement`, 및 `PreparedStatement` 인터페이스내의 메소드를 사용해, 보다 기본적인 SQL 의 형태에 액세스 하는 것과 같이 SQL3 형 `CLOB` 에 액세스 할 수 있습니다. 즉, JDBC 2.0 API 를 사용하는 어플리케이션에서는,`CLOB` 치에 대한 `getClob` 및 `setClob` 등의 메소드가,`INTEGER` 치에 대한 `getInt` 및 `setInt`,`CHAR` 치 또는 `VARCHAR` 치에 대한 `getString` 및 `setString` 와 같이 사용됩니다.

디폴트에서는, JDBC 드라이버는, 뒤에서 SQL 의 `LOCATOR(CLOB)` 형을 사용해 `Clob` 인터페이스를 구현합니다. `LOCATOR(CLOB)` 에 의해 데이터 베이스 서버-위의 SQL 의 `CLOB` 의 값이 지정되어 locator상의 조작에 의해 얻을 수 있는 결과는,`CLOB` 치 자체에서의 조작과 같습니다. 즉, 클라이언트 머신상에서 `CLOB` 데이터를 생성하지 않아도, 클라이언트는 `Clob` 인스턴스상에서 조작할 수 있습니다. `LOCATOR(CLOB)` 는, 드라이버에 의해 뒤에서 사용되기 (위해)때문에, 프로그래머는, JDBC 드라이버를 완전하게 투과적으로 사용합니다.

`Clob` 인스턴스의 표준적인 동작은, 이 인스턴스가 작성된 트랜잭션(transaction)가, 확정 또는 원래대로 돌아갈 때까지 유효합니다.

`Clob` 인터페이스에는, SQL 의 `CLOB` 치를 취득하는 메소드, 클라이언트상에서 `CLOB` 치내에 데이터를 생성하는 메소드, 및`CLOB` 치내에서 부분 캐릭터 라인 또는 `CLOB` 객체를 검색하는 메소드가 준비되어 있습니다.

### 10.1. 1 Clob 객체의 생성

다음의 코드는,`Clob` 객체의 작성 방법을 나타내고 있습니다. `rs` 는,`ResultSet` 객체입니다.

>     Clob clob = rs.getClob(1);

이것으로, 변수 `clob` 를 사용해, 결과 세트 `rs` 의 최초의 열에 포함된 `CLOB` 치를 조작할 수 있게 됩니다.

### 10.1. 2 Clob 데이터의 구체화

프로그래머는,`Clob` 객체상에서, 그 객체로 지정한 SQL `CLOB` 상에서 조작하고 있는것 같이, JDBC API 내의 메소드를 호출할 수가 있습니다. 다만,`Clob` 객체를 Java 프로그램 언어내의 객체와 같이 조작하는 경우는, 먼저 클라이언트상에서 `CLOB` 의 데이터를 구체화할 필요가 있습니다. `Clob` 인터페이스에는,`Clob` 객체를 Java 프로그램 언어에 의한 객체로서 구체화하는, 3 개의 메소드가 준비되어 있습니다.

- `getAsciiStream` 는,`CLOB` 의 값을 ASCII 바이트를 포함한 바이트 스트림로서 구체화한다

>     Clob notes = rs.getClob("NOTES");
>     java.io.InputStream in = notes.getAsciiStream();
>     byte b = in.read();
>     // in contains the characters in the CLOB value designated by
>     // notes as Ascii bytes; b contains the first character as an Ascii
>     // byte

- `getCharacterStream` 는,`CLOB` 의 값을 Unicode 문자의 스트림로서 구체화한다

>     java.io.Reader reader = notes.getCharacterStream();
>     int c = Reader.read();
>     // c contains the first character in the CLOB that notes designates

- `getSubString` 는,`CLOB` 의 값의 모두 또는 일부를 `String` 객체로서 구체화한다

>     String substring = notes.getSubString(10, 5);
>     // substring contains five characters, starting with the tenth
>     // character of the CLOB value that notes designates
>     long len = notes.length();
>     String substring = notes.getSubString(1, len);
>     // substring contains all of the characters in the CLOB object that
>     // notes designates

### 10.1. 3 Clob 객체의 포함

`Clob` 객체를 데이타베이스에 포함하려면 ,`PreparedStatement` 메소드의 `setClob` 에 파라미터로서 `Clob` 객체를 건네줍니다. 예를 들어 다음의 코드예에서는,`PreparedStatement` 객체의 `pstmt` 에의 최초의 입력 파라미터로서 건네주는 것으로,`Clob` 객체의 `notes` 가 포함됩니다.

>     Clob notes = rs.getClob("NOTES");
>     PreparedStatement pstmt = con.prepareStatement(
>     		"UPDATE SALES_STATS SET COMMENTS = ?  WHERE SALES > 500000");
>     pstmt.setClob(1, notes);
>     pstmt.executeUpdate();

`notes` 가 지정하는 `CLOB` 의 값은,`SALES_STATS` 테이블내에서,`SALES` 열의 값이 `500000` 보다 큰 경우에, 각 행의 `COMMENTS` 열에 포함됩니다.

## 10.2 Clob 인터페이스의 정의

    package java.sql;
    public interface java.sql.Clob {
    	long length() throws SQLException;
    	InputStream getAsciiStream() throws SQLException;
    	Reader getCharacterStream() throws SQLException;
    	String getSubString(long pos, int length) throws SQLException;
    	long position(String searchstr, long start) throws SQLException;
    	long position(Clob searchstr, long start) throws SQLException;
    }

## 10.3 Clob 의 메소드

#### getAsciiStream

    InputStream getAsciiStream() throws SQLException

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치를 ASCII 바이트의 스트림로서 생성합니다.

> 반환값:

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치의 ASCII 데이터가 포함된 `InputStream` 객체

> 례:

> >     java.io.InputStream in = clob.getAsciiStream();
> >     byte b = in.read();
> >     // in has all of the characters in the CLOB value designated by
> >     // clob as Ascii bytes; b designates the first character as an Ascii
> >     // byte

#### getCharacterStream

    Reader getCharacterStream() throws SQLException

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치를 Unicode 문자의 스트림로서 구체화합니다.

> 반환값:

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치의 모든 데이터를 Unicode 문자로서 가지는 `Reader` 객체

> 례:

> >     Reader read = clob.getCharacterStream();
> >     // read has all the data in the CLOB value designated by clob
> >     // as Unicode characters

#### getSubString

    length getSubString(long pos, int length) throws SQLException

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치의,`pos` 의 위치에서 시작되어 최고 `length` 개가 연속한 문자의 부분의 카피를 돌려줍니다.

> 파라미터:

> pos |  | 이 `Clob` 객체에 의해 지정되는 `CLOB` 치로부터 추출되는 최초의 `char` 의 위치. 초기 위치는 1
> length |  | 카피되는 연속한 문자수

> 반환값:

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치의,`pos` 의 위치로부터 `char` 로 시작되는, 연속한 최대 `length` 문자의 카피를 포함한 `String` 객체

> 례:

> >     String substr = clob.getSubString(1, 100);
> >     // substr contains the first 100 characters in the CLOB value
> >     // designated by clob (those in positions 1 through 100, inclusive)

#### length

    long length() throws SQLExceptions

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치의 문자수를 돌려줍니다.

> 반환값:

> 이 `Clob` 객체가 표시하는 `CLOB` 치의 문자의 길이

> 례:

> >     Clob clob = rs.getClob(3);
> >     long len = clob.length();
> >     // len contains the number of characters in the CLOB value
> >     // designated by clob

#### position

    long position(Clob searchstr, long start) throws SQLException

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치내에서,`Clob` 객체의 `searchstr` 가 개시하는 문자 위치를 결정합니다. 검색은,`start` 의 위치로부터 시작됩니다.

> 파라미터:

> searchstr |  | 검색 대상의 `Clob` 객체
> start |  | 검색을 시작하는 위치. 최초의 문자의 위치는 `1`

> 반환값:

> `Clob` 객체의 `searchstr` 가 시작되는 위치. `start` 의 위치에서 검색을 시작해 성공했을 경우는 `start` 이상의 값, 그 이외의 경우는 -1 이 돌려주어집니다.

> 례:

> >     Clob clob2 = rs.getClob(4);
> >     long beginning = clob.position(clob2, 1024);
> >     // if clob2 is contained in clob starting at position 1024 or later,
> >     // beginning will contain the position at which clob2 begins

#### position

    long position(String searchstr, long start) throws SQLException

> 이 `Clob` 객체에 의해 지정되는 `CLOB` 치내에서,`String` 객체의 `searchstr` 가 개시하는 문자 위치를 결정합니다. 검색은,`start` 의 위치로부터 시작됩니다.

> 파라미터:

> searchstr |  | 검색 대상의 캐릭터 라인
> start |  | 검색을 시작하는 위치. 최초의 문자의 위치는 `1`

> 반환값:

> `String` 객체의 `searchstr` 가 시작되는 위치. `start` 의 위치에서 검색을 시작해 성공했을 경우는 `start` 이상의 값, 그 이외의 경우는 -1 이 돌려주어집니다.

> 례:

> >     String searchstr= clob.getSubString(5, 100);
> >     long beginning = clob.position(searchstr, 1024);
> >     // if searchstr is contained in clob from position 1024 on, beginning
> >     // will contain the position at which searchstr begins

Copyright © 2000, Sun Microsystems, Inc. All rights reserved.