Clob

10.1 Clob の概要

Clob オブジェクトとは、SQL の CLOB (文字ラージオブジェクト) を Java プログラミング言語にマッピングした表現形式です。 SQL の CLOB は、文字ラージオブジェクトをデータベース表の行内の列値として格納する組み込みの型です。 プログラマは、ResultSetCallableStatement、および PreparedStatement インタフェース内のメソッドを使用して、より基本的なSQL の型にアクセスするのと同じように SQL3 型 CLOB へアクセスできます。 つまり、JDBC 2.0 API を使用するアプリケーションでは、CLOB 値に対する getClob および setClob などのメソッドが、INTEGER 値に対する getInt および setIntCHAR 値または VARCHAR 値に対する getString および setString と同じように使用されます。

デフォルトでは、JDBC ドライバは、裏で SQL の LOCATOR(CLOB) 型を使用して Clob インタフェースを実装します。 LOCATOR(CLOB) によってデータベースサーバ上の SQL の CLOB の値が指定され、ロケータ上の操作によって得られる結果は、CLOB 値自体での操作と同じです。 つまり、クライアントマシン上で CLOB データを生成しなくても、クライアントは Clob インスタンス上で操作できます。 LOCATOR(CLOB) は、ドライバによって裏で使用されるため、プログラマは、JDBC ドライバを完全に透過的に使用します。

Clob インスタンスの標準的な動作は、このインスタンスが作成されたトランザクションが、確定または元に戻るまで有効です。

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 つのメソッドが用意されています。

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
java.io.Reader reader = notes.getCharacterStream();
int c = Reader.read();
// c contains the first character in the CLOB that notes designates
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.