17.4.9 Blobインタフェース
- 〈この項の構成〉
(1) 概要
Blobインタフェースでは,主に次の機能が提供されます。
-
バイナリデータの取得
-
バイナリデータ長の取得
-
パターンに一致する位置の取得
JDBCドライバは,BlobインタフェースをPrdbBlobクラスで実装します。
PrdbBlobクラスのオブジェクトは,ResultSetやCallableStatementのgetBlobメソッドの返却値として,JDBCドライバが生成します。
(2) メソッド
Blobインタフェースのメソッド一覧を次の表に示します。なお,表に記載されていないメソッドはサポートしていません。サポートしていないメソッドを指定すると,SQLExceptionを投入します。
メソッド |
提供ドライバ |
機能 |
||
---|---|---|---|---|
JDBC2.0 |
JDBC4.0 |
JDBC4.3 |
||
○ |
○ |
○ |
BLOB又はBINARY値をストリーム(PrdbDataStreamオブジェクト)として返します。 |
|
○ |
○ |
○ |
BLOB又はBINARY値の全部又は一部をバイト配列として返します。 |
|
○ |
○ |
○ |
このPrdbBlobオブジェクトによって指定されたBLOB又はBINARY値のバイト数を返します。 |
|
○ |
○ |
○ |
PrdbBlobオブジェクトによって指定されたBLOB又はBINARY値内で,patternが始まるバイト位置を返します。 |
|
○ |
○ |
○ |
このBlobオブジェクトが表すBLOB値内で,指定されたバイトpatternが始まるバイト位置を返します。 |
|
× |
○ |
○ |
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