org.firebirdsql.jdbc

## Class FBBlob

- java.lang.Object
- - org.firebirdsql.jdbc.FBBlob

All Implemented Interfaces:
  java.sql.Blob, TransactionListener, FirebirdBlob, Synchronizable

    public class FBBlob
    extends java.lang.Object
    implements FirebirdBlob, TransactionListener, Synchronizable

Firebird implementation of `Blob`.

### Nested Class Summary

### Nested classes/interfaces inherited from interface org.firebirdsql.jdbc.FirebirdBlob

`FirebirdBlob.BlobInputStream, FirebirdBlob.BlobOutputStream`

### Field Summary

Fields
`static boolean` `SEGMENTED`

### Constructor Summary

Constructors
Constructor and Description
`FBBlob(GDSHelper c)` Create new Blob instance.
`FBBlob(GDSHelper c, FBObjectListener.BlobListener blobListener)` Create new Blob instance.
`FBBlob(GDSHelper c, long blob_id)` Create instance of this class to access existing Blob.
`FBBlob(GDSHelper c, long blob_id, FBObjectListener.BlobListener blobListener)` Create instance of this class to access existing Blob.

### Method Summary

Methods
`void` `copyBytes(byte[] bytes, int pos, int len)`
`void` `copyCharacterStream(java.io.Reader reader, Encoding encoding)` Copy data from a character stream into this Blob.
`void` `copyCharacterStream(java.io.Reader reader, long length, Encoding encoding)` Copy data from a character stream into this Blob.
`void` `copyStream(java.io.InputStream inputStream)` Copy the contents of an `InputStream` into this Blob.
`void` `copyStream(java.io.InputStream inputStream, long length)` Copy the contents of an `InputStream` into this Blob.
`FirebirdBlob` `detach()` Detach this blob.
`void` `free()`
`java.io.InputStream` `getBinaryStream()`
`java.io.InputStream` `getBinaryStream(long pos, long length)`
`long` `getBlobId()` Get the identifier for this `Blob`
`byte[]` `getBytes(long pos, int length)`
`GDSHelper` `getGdsHelper()`
`byte[]` `getInfo(byte[] items, int buffer_length)` Get information about this Blob.
`java.lang.Object` `getSynchronizationObject()` Get synchronization object.
`boolean` `isSegmented()` Check if blob is segmented.
`long` `length()`
`long` `position(java.sql.Blob pattern, long start)`
`long` `position(byte[] pattern, long start)`
`java.io.OutputStream` `setBinaryStream(long pos)`
`int` `setBytes(long pos, byte[] bytes)`
`int` `setBytes(long pos, byte[] bytes, int offset, int len)`
`void` `transactionStateChanged(FbTransaction transaction, TransactionState newState, TransactionState previousState)` Signals that the transaction state changed.
`void` `truncate(long len)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### SEGMENTED

    public static final boolean SEGMENTED

See Also:
  Constant Field Values

### Constructor Detail

#### FBBlob

    public FBBlob(GDSHelper c,
          FBObjectListener.BlobListener blobListener)

Create new Blob instance. This constructor creates new fresh Blob, only writing to the Blob is allowed.

Parameters:
  `c` - connection that will be used to write data to blob
  `blobListener` - Blob listener instance

#### FBBlob

    public FBBlob(GDSHelper c)

Create new Blob instance. This constructor creates new fresh Blob, only writing to the Blob is allowed.

Parameters:
  `c` - connection that will be used to write data to blob.

#### FBBlob

    public FBBlob(GDSHelper c,
          long blob_id,
          FBObjectListener.BlobListener blobListener)

Create instance of this class to access existing Blob.

Parameters:
  `c` - connection that will be used to access Blob.
  `blob_id` - ID of the Blob.
  `blobListener` - Blob listener instance

#### FBBlob

    public FBBlob(GDSHelper c,
          long blob_id)

Create instance of this class to access existing Blob.

Parameters:
  `c` - connection that will be used to access Blob.
  `blob_id` - ID of the Blob.

### Method Detail

#### getSynchronizationObject

    public final java.lang.Object getSynchronizationObject()

Description copied from interface: `Synchronizable`
Get synchronization object.

Specified by:
  `getSynchronizationObject` in interface `Synchronizable`
Returns:
  object, cannot be `null`.

#### free

    public void free()
              throws java.sql.SQLException

Specified by:
  `free` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### getBinaryStream

    public java.io.InputStream getBinaryStream(long pos,
                                      long length)
                                        throws java.sql.SQLException

Specified by:
  `getBinaryStream` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### getInfo

    public byte[] getInfo(byte[] items,
                 int buffer_length)
                   throws java.sql.SQLException

Get information about this Blob. This method should be considered as temporary because it provides access to low-level API. More information on how to use the API can be found in "API Guide".

Parameters:
  `items` - items in which we are interested.
  `buffer_length` - buffer where information will be stored.
Returns:
  array of bytes containing information about this Blob.
Throws:
  `java.sql.SQLException` - if something went wrong.

#### length

    public long length()
                throws java.sql.SQLException

Specified by:
  `length` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### isSegmented

    public boolean isSegmented()
                        throws java.sql.SQLException

Description copied from interface: `FirebirdBlob`
Check if blob is segmented. If Blob is segmented, you cannot use `FirebirdBlob.BlobInputStream.seek(int)` method.

Specified by:
  `isSegmented` in interface `FirebirdBlob`
Returns:
  `true` if this blob is segmented, otherwise `false`
Throws:
  `java.sql.SQLException`

#### detach

    public FirebirdBlob detach()
                        throws java.sql.SQLException

Description copied from interface: `FirebirdBlob`
Detach this blob. This method creates new instance of the same blob database object that is not under result set control. When result set is closed, all associated resources are also released, including open blob streams. This method creates an new instance of blob object with the same blob ID that can be used even when result set is closed.

Note, detached blob will not remember the stream position of this object. This means that you cannot start reading data from the blob, then detach it, and then continue reading. Reading from detached blob will begin at the blob start.

Specified by:
  `detach` in interface `FirebirdBlob`
Returns:
  instance of `FirebirdBlob` that is not under result set control.
Throws:
  `java.sql.SQLException` - if Blob cannot be detached.

#### getBytes

    public byte[] getBytes(long pos,
                  int length)
                    throws java.sql.SQLException

Specified by:
  `getBytes` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### getBinaryStream

    public java.io.InputStream getBinaryStream()
                                        throws java.sql.SQLException

Specified by:
  `getBinaryStream` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### position

    public long position(byte[] pattern,
                long start)
                  throws java.sql.SQLException

Specified by:
  `position` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### position

    public long position(java.sql.Blob pattern,
                long start)
                  throws java.sql.SQLException

Specified by:
  `position` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### truncate

    public void truncate(long len)
                  throws java.sql.SQLException

Specified by:
  `truncate` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### setBytes

    public int setBytes(long pos,
               byte[] bytes)
                 throws java.sql.SQLException

Specified by:
  `setBytes` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### setBytes

    public int setBytes(long pos,
               byte[] bytes,
               int offset,
               int len)
                 throws java.sql.SQLException

Specified by:
  `setBytes` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### setBinaryStream

    public java.io.OutputStream setBinaryStream(long pos)
                                         throws java.sql.SQLException

Specified by:
  `setBinaryStream` in interface `java.sql.Blob`
Throws:
  `java.sql.SQLException`

#### getBlobId

    public long getBlobId()
                   throws java.sql.SQLException

Get the identifier for this `Blob`

Returns:
  This `Blob`'s identifier
Throws:
  `java.sql.SQLException` - if a database access error occurs

#### copyBytes

    public void copyBytes(byte[] bytes,
                 int pos,
                 int len)
                   throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### getGdsHelper

    public GDSHelper getGdsHelper()

#### copyStream

    public void copyStream(java.io.InputStream inputStream,
                  long length)
                    throws java.sql.SQLException

Copy the contents of an `InputStream` into this Blob.

Calling with length `-1` is equivalent to calling `copyStream(InputStream)`, and will copy the whole stream.

Parameters:
  `inputStream` - the stream from which data will be copied
  `length` - The maximum number of bytes to read from the InputStream, `-1` to read whole stream
Throws:
  `java.sql.SQLException` - if a database access error occurs

#### copyStream

    public void copyStream(java.io.InputStream inputStream)
                    throws java.sql.SQLException

Copy the contents of an `InputStream` into this Blob. Unlike the `copyStream(InputStream, long)` method, this one copies bytes until the EOF is reached.

Parameters:
  `inputStream` - the stream from which data will be copied
Throws:
  `java.sql.SQLException` - if a database access error occurs

#### copyCharacterStream

    public void copyCharacterStream(java.io.Reader reader,
                           long length,
                           Encoding encoding)
                             throws java.sql.SQLException

Copy data from a character stream into this Blob.

Calling with length `-1` is equivalent to calling `copyCharacterStream(Reader, Encoding)`.

Parameters:
  `reader` - the source of data to copy
  `length` - The maximum number of bytes to copy, or `-1` to read the whole stream
  `encoding` - The encoding used in the character stream
Throws:
  `java.sql.SQLException`

#### copyCharacterStream

    public void copyCharacterStream(java.io.Reader reader,
                           Encoding encoding)
                             throws java.sql.SQLException

Copy data from a character stream into this Blob. Unlike the `copyCharacterStream(Reader, long, Encoding)` )} method, this one copies bytes until the EOF is reached.

Parameters:
  `reader` - the source of data to copy
  `encoding` - The encoding used in the character stream
Throws:
  `java.sql.SQLException`

#### transactionStateChanged

    public void transactionStateChanged(FbTransaction transaction,
                               TransactionState newState,
                               TransactionState previousState)

Description copied from interface: `TransactionListener`
Signals that the transaction state changed.

Specified by:
  `transactionStateChanged` in interface `TransactionListener`
Parameters:
  `transaction` - `FbTransaction` that changed state