Package org.firebirdsql.jdbc

## Class FBCachedBlob

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

- All Implemented Interfaces:
    `java.sql.Blob`, `FirebirdBlob`, `Synchronizable`

      public final class FBCachedBlob
      extends java.lang.Object
      implements FirebirdBlob, Synchronizable

  This class represents a cached blob field.

- - ### Nested Class Summary

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

      `FirebirdBlob.BlobInputStream, FirebirdBlob.BlobOutputStream`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `FBCachedBlob​(byte[] data)` | Create an instance using the cached data.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `FirebirdBlob` | `detach()` | Detach this blob.
    `void` | `free()` |
    `java.io.InputStream` | `getBinaryStream()` |
    `java.io.InputStream` | `getBinaryStream​(long pos, long length)` |
    `byte[]` | `getBytes​(long pos, int length)` |
    `java.lang.Object` | `getSynchronizationObject()` | Get synchronization object.
    `boolean` | `isSegmented()` | Check if blob is segmented.
    `long` | `length()` | Get the length of the cached blob field.
    `long` | `position​(byte[] pattern, long start)` | Find the first entry of the specified pattern.
    `long` | `position​(java.sql.Blob pattern, long start)` | Find the first entry of the specified pattern.
    `java.io.OutputStream` | `setBinaryStream​(long pos)` | Set the contents of blob as binary stream.
    `int` | `setBytes​(long pos, byte[] bytes)` | Set contents of the blob.
    `int` | `setBytes​(long pos, byte[] bytes, int offset, int len)` | Set the contents of blob.
    `void` | `truncate​(long length)` | Truncate the blob to specified length.

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

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

- - ### Constructor Detail

    - #### FBCachedBlob

          public FBCachedBlob​(byte[] data)

      Create an instance using the cached data.
      Parameters:
        `data` - array of bytes containing the cached data.

  - ### Method Detail

    - #### 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.

    - #### isSegmented

          public boolean isSegmented()
                              throws java.sql.SQLException

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

      An instance of `FBCachedBlob` returns `false` always.

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

    - #### length

          public long length()
                      throws java.sql.SQLException

      Get the length of the cached blob field.
      Specified by:
        `length` in interface `java.sql.Blob`
      Returns:
        length of the cached blob field or -1 if the field is null.
      Throws:
        `java.sql.SQLException`

    - #### getBytes

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

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

    - #### position

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

      Find the first entry of the specified pattern.
      Specified by:
        `position` in interface `java.sql.Blob`
      Throws:
        `java.sql.SQLException` - always, not yet implemented.

    - #### position

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

      Find the first entry of the specified pattern.
      Specified by:
        `position` in interface `java.sql.Blob`
      Throws:
        `java.sql.SQLException` - always, not yet implemented.

    - #### getBinaryStream

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

      Specified by:
        `getBinaryStream` 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`

    - #### setBytes

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

      Set contents of the blob.
      Specified by:
        `setBytes` in interface `java.sql.Blob`
      Throws:
        `java.sql.SQLException` - always, set methods are not relevant in cached state.

    - #### setBytes

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

      Set the contents of blob.
      Specified by:
        `setBytes` in interface `java.sql.Blob`
      Throws:
        `java.sql.SQLException` - always, set methods are not relevant in cached state.

    - #### setBinaryStream

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

      Set the contents of blob as binary stream.
      Specified by:
        `setBinaryStream` in interface `java.sql.Blob`
      Throws:
        `java.sql.SQLException` - always, set methods are not relevant in cached state.

    - #### truncate

          public void truncate​(long length)
                        throws java.sql.SQLException

      Truncate the blob to specified length.
      Specified by:
        `truncate` in interface `java.sql.Blob`
      Throws:
        `java.sql.SQLException` - always, truncate is not relevant in cached state.

    - #### 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`