スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

17.9 BLOB型を使用する場合の注意事項

BLOB型を使用する場合のメソッドの注意点などについて説明します。

<この節の構成>
(1) 各メソッドの処理内容と注意事項
(2) ?パラメタでの指定方法

(1) 各メソッドの処理内容と注意事項

各メソッドの処理内容と注意事項を次の表に示します。

表17-17 各メソッドの処理内容と注意事項

Blobインタフェースクラスのメソッド名 処理内容と注意事項
getBinaryStream JdbhInputStreamを実装としたInputStreamクラスを返します。取得できるデータ長は2,147,483,639までです。
getBytes(long pos, int length) 指定したpos位置から,最大lengthまでのデータをbyte[]オブジェクトで返します。データベースの内容がナル値の場合,指定した位置からデータが取得できない場合,又は0バイトデータの場合は,nullを返します。ただし,lengthの値は2,147,483,639まで有効であるため,それを超えるとSQLExceptionを投入します。
length() 実データ長を返します。
position(Blob pattern,long start) position(pattern.getBytes(1, (int)(pattern.length())), start)に置き換えて実行します。ただし,patternにnullを指定した場合は,NullPointerExceptionを投入します。
position(byte[] pattern,long start) 指定したstart位置から,patternに合った位置を返します。返す値は>=startとなります。patternに合った位置が見付からなかった場合,-1を返します。ただし,pattern.lengthの値が2,147,483,639まで有効であるため,それを超えるとSQLExceptionを投入します。また,patternにnullを指定した場合は,NullPointerExceptionを投入します。
setBinaryStream(long pos) 無条件にSQLExceptionを投入します。
setBytes(long pos,byte[] bytes)
setBytes(long pos,byte[] bytes,int offset,int len)
truncate(long len)

位置付け子機能を使用してデータを取得した場合,ResultSet.close()やStatement.close()などを行うと,データが取得できなくなります。

(2) ?パラメタでの指定方法

?パラメタに値を指定する場合,PreparedStatement. setBlob()メソッド,及びCallableStatement.setBlob()メソッドを使用する方法があります。これらを使用する場合の注意点を次に示します。

(a) Blobインタフェースを実装したオブジェクトを使用する場合

setBlob()メソッドを使用する場合,Blobインタフェースを実装したオブジェクトを指定する必要があります。また,Blobインタフェースを実装したオブジェクトをUAPが作成する必要があります。

JDBCでは,Blob.getBytes()メソッドで,設定する値をbyte[]の形式で取得します。次に示す方法で,設定する値を取得します。

 
Blob.getBytes(1, (int)(Blob.length()))
 

UAPでは,getBytes()メソッドとlength()メソッドでは,正常な値を返す必要があります。JDBCでは,これらのメソッドで返される値が正しいものとして動作します。

(b) ResultSet.getBlob()メソッド,又はCallableStatement.getBlob()メソッドで取得したBlobオブジェクトを使用する場合

JDBCからの実行結果として,ResultSet.getBlob()メソッドやCallableStatement.getBlob()メソッドで取得したBlobオブジェクトをそのまま使用する場合,位置付け子機能を使用したアクセスでの取得かどうかで動作が異なります。