Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


17.4.9 Blobインタフェース

〈この項の構成〉

(1) 概要

Blobインタフェースでは,主に次の機能が提供されます。

JDBCドライバは,BlobインタフェースをPrdbBlobクラスで実装します。

PrdbBlobクラスのオブジェクトは,ResultSetやCallableStatementのgetBlobメソッドの返却値として,JDBCドライバが生成します。

(2) メソッド

Blobインタフェースのメソッド一覧を次の表に示します。なお,表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると,SQLExceptionを投入します。

表17‒69 Blobインタフェースのメソッド一覧

メソッド

提供ドライバ

機能

JDBC2.0

JDBC4.0

getBinaryStream()

BLOB又はBINARY値をストリーム(PrdbDataStreamオブジェクト)として返します。

getBytes(long pos, int length)

BLOB又はBINARY値の全部又は一部をバイト配列として返します。

length()

このPrdbBlobオブジェクトによって指定されたBLOB又はBINARY値のバイト数を返します。

position(Blob pattern, long start)

PrdbBlobオブジェクトによって指定されたBLOB又はBINARY値内で,patternが始まるバイト位置を返します。

position(byte[] pattern, long start)

このBlobオブジェクトが表すBLOB値内で,指定されたバイトpatternが始まるバイト位置を返します。

free()

×

Blobオブジェクトが保持しているリソースを解放します。

(凡例)

○:提供されます。

×:提供されません。

(a) getBinaryStream()

【機能】

BLOB又はBINARY値をストリーム(PrdbDataStreamオブジェクト)として返します。

【形式】
public InputStream getBinaryStream() throws SQLException
【引数】

なし。

【戻り値】

InputStreamを派生したPrdbDataStreamを返します。

【機能詳細】

BLOB又はBINARY値をストリーム(PrdbDataStreamオブジェクト)として返します。

位置付け子機能使用時は,PrdbResultSetオブジェクトから位置付け子を取得し,取得した位置付け子をPrdbDataStreamクラスのコンストラクタに渡してPrdbDataStreamオブジェクトを生成します。

位置付け子機能使用時は,PrdbDataStreamオブジェクト内部にBLOB又はBINARY値を保持していないため,データ取得要求が行われるたびにHiRDBサーバに対してデータ取得要求を行います。

位置付け子機能を使用していない場合はPrdbResultSetオブジェクトからBLOB又はBINARY値を取得し,取得した値をPrdbDataStreamクラスのコンストラクタに渡してPrdbDataStreamオブジェクトを生成します。この場合は,BLOB又はBINARY値を保持しているため,HiRDBサーバに対してデータ取得要求は行いません。

【発生する例外】

次の場合,SQLExceptionを投入します。

  • 位置付け子機能使用時に,このPrdbBlobオブジェクトに関連しているPrdbConnectionオブジェクトがcloseされている場合

  • トランザクションの決着によってPrdbBlobオブジェクトが無効になった場合

  • 位置付け子機能使用時に,通信エラーなどでデータが取得できなかった場合

  • freeメソッドが呼び出し済みの場合

(b) getBytes(long pos, int length)

【機能】

BLOB又はBINARY値の全部又は一部をバイト配列として返します。バイト配列には,posの位置からlengthの連続するバイト数を格納します。

【形式】
public byte[] getBytes(long pos,int length) throws SQLException
【引数】
long pos:

BLOB値内の最初に抽出されるバイトの位置(序数)

最初のバイトの位置は1

int length:

コピー対象の連続するバイトの数

【戻り値】

BLOB又はBINARY値内の,posの位置からlengthの連続するバイト数が格納されている配列

【機能詳細】

BLOB又はBINARY値の全部又は一部をバイト配列として返します。バイト配列には,posの位置からlengthの連続するバイト数を格納します。

posとlengthの指定値と返されるデータを次に示します。

pos

length

実長(X)※1

制限値※2とlength

制限値※2と実長(X)※1

返されるデータ

1<=pos<=実長(X)※1

<0

SQLException

>=0

<=length

Y<制限値

実長(Y)の長さのBLOB又はBINARY値

Y>=制限値

制限値の長さのBLOB又はBINARY値

Y>length

length<制限値

lengthで指定された長さのBLOB又はBINARY値

length>=制限値

制限値の長さのBLOB又はBINARY値

>実長(X)※1

0長データ

上記以外

SQLException

(凡例)

−:該当しません。

注※1

実長(X)とは,取得可能なBLOB又はBINARY値の実長(BLOB又はBINARY値の実長−引数pos+1)を示します。

注※2

制限値は,MaxFieldSize又はHiRDB_for_Java_MAXBINARYSIZEが該当します。制限値として有効になる値を次に示します。

MaxFieldSize

HiRDB_for_Java_MAXBINARYSIZE

HiRDBのデータ型

取得できるデータの最大長(制限値)

0(デフォルト)

0(デフォルト)

全データ型

定義長(デフォルト)

0(デフォルト)

>0(指定有り)

BLOB又はBINARY型

HiRDB_for_Java_MAXBINARYSIZE

BLOB又はBINARY型以外

定義長(デフォルト)

>0(指定有り)

0(デフォルト)

全データ型

MaxFieldSize

>0(指定有り)

>0(指定有り)

全データ型

MaxFieldSize

注※

文字型(HiRDBデータ型のCHAR,VARCHAR,NCHAR.NVARCHAR,MCHAR,MVARCHARが該当)

【発生する例外】

次の場合,SQLExceptionを投入します。

  • 引数posが<1又は引数lengthが<0の場合

  • トランザクションの決着によってPrdbBlobが無効の場合

  • 位置付け子機能使用時に,このPrdbBlobオブジェクトに関連しているPrdbConnectionオブジェクトがcloseされている場合

  • 位置付け子機能使用時に,通信エラーなどでデータが取得できなかった場合

  • freeメソッドが呼び出し済みの場合

(c) length()

【機能】

このPrdbBlobオブジェクトによって指定されたBLOB又はBINARY値のバイト数を返します。

【形式】
public long length() throws SQLException
【引数】

なし。

【戻り値】

BLOB又はBINARY値の長さ(バイト単位)

【発生する例外】

次の場合,SQLExceptionを投入します。

  • 位置付け子機能使用時に,PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

  • 位置付け子機能使用時に,トランザクションの決着によってPrdbBlobが無効になった場合

  • 位置付け子機能使用時に,通信エラーなどでデータが取得できなかった場合

  • freeメソッドが呼び出し済みの場合

(d) position(Blob pattern, long start)

【機能】

PrdbBlobオブジェクトによって指定されたBLOB又はBINARY値内で,patternが始まるバイト位置を返します。patternの検索は,startの位置から開始します。

【形式】
public long position(Blob pattern, long start) throws SQLException
【引数】
Blob pattern:

検索対象のBLOB又はBINARY値を指定するBlobオブジェクト

long start:

検索を開始するBLOB又はBINARY値内の位置。最初の位置は1です。

【戻り値】

patternで指定されたデータが開始する位置

【発生する例外】

次の場合,SQLExceptionを投入します。

  • 位置付け子機能使用時に,PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

  • 位置付け子機能使用時に,トランザクションの決着によってPrdbBlobが無効になった場合

  • 位置付け子機能使用時に,通信エラーなどでデータが取得できなかった場合

  • freeメソッドが呼び出し済みの場合

(e) position(byte[] pattern, long start)

【機能】

このBlobオブジェクトが表すBLOB値内で,指定されたバイトpatternが始まるバイト位置を返します。patternの検索は,startの位置から開始します。

【形式】
public long position(byte[] pattern, long start) throws SQLException
【引数】
byte[] pattern:

検索対象のbyte[]

long start:

検索を開始するBLOB値内の位置。最初の位置は1です。

【戻り値】

patternで指定されたデータが開始する位置

【発生する例外】

次の場合,SQLExceptionを投入します。

  • 位置付け子機能使用時に,PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

  • 位置付け子機能使用時に,トランザクションの決着によってPrdbBlobが無効になった場合

  • 位置付け子機能使用時に,通信エラーなどでデータが取得できなかった場合

  • freeメソッドが呼び出し済みの場合

(f) free()

【機能】

Blobオブジェクトが保持しているリソースを解放します。

【形式】
void free() throws SQLException
【引数】

なし。

【戻り値】

なし。

【機能詳細】

Blobオブジェクトが保持しているリソースを解放します。位置付け子機能使用時は,HiRDBサーバに対して位置付け子の解放要求を行います。

このメソッドを呼び出した後はオブジェクトが無効となるため,freeメソッド以外のメソッドを呼び出した場合,KFPJ20023-EのSQLExceptionが投入されます。

このメソッドを複数回呼び出した場合,2回目以降の呼び出しは無視されます。

【発生する例外】

次の場合,SQLExceptionを投入します。

  • 位置付け子機能使用時に,PrdbBlobオブジェクトに関連したPrdbConnectionオブジェクトがcloseされている場合

  • 位置付け子機能使用時に,通信エラーなどでデータが取得できなかった場合

(3) パッケージ名称及びクラス名称

このインタフェースを実装するパッケージ名称とクラス名称を次に示します。

パッケージ名称:JP.co.Hitachi.soft.HiRDB.JDBC

クラス名称:PrdbBlob