ページの先頭行へ戻る
Symfoware Server V12.1.x アプリケーション開発ガイド(JDBCドライバ編)
FUJITSU Software

3.7 BLOBデータの参照

操作手順

データベースのBLOBデータを参照する場合、以下の手順で行います。

記述例

データベースのBLOBデータを参照する場合の記述例を以下に説明します。

Statement stmt = con.createStatement();                                (1)

ResultSet rs = stmt.executeQuery(
               "SELECT COL_BLOB FROM BLOBTBL WHERE COL_INT = 1");      (2)

while (rs.next())                                                      (3)
{

    InputStream oIS = rs.getBinaryStream(1);                           (4)
    FileOutputStream fs = new FileOutputStream("ファイル名などを指定"); (4)

    byte[] bTmp = new byte[oIS.available()];                           (5)
    oIS.read(bTmp);                                                    (5)
    fs.write(bTmp);                                                    (5)

    int iBData=0;                                                      (6)
    while ((iBData=oIS.read()) != -1)                                  (6)
    {
        fs.write(iBData);                                              (6)
    }


    oIS.close();                                                       (7)
    fs.close();                                                        (7)
}

rs.close();                                                            (8)
stmt.close();                                                          (8)

con.commit();                                                          (9)

(1) SQL文を実行するためのオブジェクトの生成

(2) ResultSetオブジェクトの生成

(3) カーソルの位置づけ

(4) ResultSetオブジェクトからのデータ取得

(5) ストリームからのデータ読込み(byte配列)

(6) ストリームからのデータ読込み(1バイト)

(7) ストリームオブジェクトのクローズ

(8) オブジェクトのクローズ

(9) トランザクションのコミット

注意

(5)と(6)の処理は、データのサイズ、件数または実行環境に合わせて、以下の要領で、どちらかを実行してください。

  • ストリームからデータを一括で取り出す場合、(5)の処理を実行する

  • ストリームからデータを1バイトずつ取り出す場合、(6)の処理を実行する

  • 参照先のBLOBデータのサイズが32キロバイト以上の場合、同じBLOB列に対して複数回getXXX()を実行することはできません。複数回実行した場合、2回目以降の実行では、長さは0のByte配列を返却します。同じBLOB列のデータを再取得したい場合、absolute()などを使用して、ResultSetの現在行を移動してください。


以下に各項目の設定方法を示します。

SQL文を実行するためのオブジェクトの生成

ConnectionインタフェースのcreateStatementメソッドを使用し、Statementインタフェースのオブジェクトを生成します。

ResultSetオブジェクトの生成

StatementインタフェースのexecuteQueryメソッドを使用し、ResultSetオブジェクトを生成します。

カーソルの位置づけ

ResultSetインタフェースのnextメソッドを使用し、カーソルの位置づけを現在の位置から1行下に移動します。

ResultSetオブジェクトからのデータ取得

ResultSetインタフェースのgetBinaryStreamメソッドを使用し、ResultSetオブジェクトからBLOB型のデータをストリームとして取得します。

ストリームからのデータ読込み(byte配列)

InputStreamクラスのreadメソッドを使用して、ストリームからデータをbyte配列で一括に読み込みます。

ストリームからのデータ読込み(1バイト)

InputStreamクラスのreadメソッドを使用して、ストリームからデータを1バイトずつ-1(データなし)が返却されるまで読み込みます。

ストリームオブジェクトのクローズ

InputStreamクラスのcloseメソッドとFileOutputStreamクラスのcloseメソッドを使用して、オブジェクトをクローズします。

オブジェクトのクローズ

生成した各クラスのオブジェクトをクローズします。

ResultSetインタフェースのcloseメソッドと、Statementインタフェースのcloseメソッドを使用します。

トランザクションのコミット

トランザクションをコミットします。

Connectionインタフェースのcommitメソッドを使用します。