Top Description Inners Fields Constructors Methods
org.hibernate.engine.jdbc

public final Class BlobProxy

extends Object
implements Blob, BlobImplementer
Class Inheritance
All Implemented Interfaces
org.hibernate.engine.jdbc.BlobImplementer, java.sql.Blob
Imports
java.io.IOException, .InputStream, .OutputStream, java.sql.Blob, .SQLException, org.hibernate.engine.jdbc.internal.BinaryStreamImpl, org.hibernate.type.descriptor.java.DataHelper

Manages aspects of representing Blob objects. In previous versions this used to be implemented by using a java.lang.reflect.Proxy to deal with incompatibilities across various JDBC versions, hence the class name, but using a real Proxy is no longer necessary. The class name could be updated to reflect this but that would break APIs, so this operation is deferred.
Authors
Gavin King, Steve Ebersole, Gail Badner, Sanne Grinovero

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class

Field Summary

Modifier and TypeField and Description
private final BinaryStream
private boolean

Constructor Summary

AccessConstructor and Description
private
BlobProxy(byte[]
The byte array
bytes
)

Constructor used to build Blob from byte array.

private
BlobProxy(InputStream
The binary stream
stream
,
long
The length of the stream
length
)

Constructor used to build Blob from a stream.

Method Summary

Modifier and TypeMethod and Description
public void
free()

Implements java.sql.Blob.free.

This method frees the Blob object and releases the resources that it holds.
public static Blob

Returns:

The BlobProxy instance to represent this data.
generateProxy
(byte[]
The data to be created as a Blob.
bytes
)

Generates a BlobImpl using byte data.

public static Blob

Returns:

The BlobProxy instance to represent this data.
generateProxy
(InputStream
The input stream of bytes to be created as a Blob.
stream
,
long
The number of bytes from stream to be written to the Blob.
length
)

Generates a BlobImpl proxy using a given number of bytes from an InputStream.

public InputStream
getBinaryStream()

Implements java.sql.Blob.getBinaryStream.

Retrieves the BLOB value designated by this Blob instance as a stream.
public InputStream
getBinaryStream(final long
the offset to the first byte of the partial value to be retrieved. The first byte in the Blob is at position 1.
start
,
final long
the length in bytes of the partial value to be retrieved
length
)

Implements java.sql.Blob.getBinaryStream.

Returns an InputStream object that contains a partial Blob value, starting with the byte specified by pos, which is length bytes in length.
public byte[]
getBytes(final long
the ordinal position of the first byte in the BLOB value to be extracted; the first byte is at position 1
start
,
final int
the number of consecutive bytes to be copied; the value for length must be 0 or greater
length
)

Implements java.sql.Blob.getBytes.

Retrieves all or part of the BLOB value that this Blob object represents, as an array of bytes.
private InputStream
public BinaryStream
getUnderlyingStream()

Implements org.hibernate.engine.jdbc.BlobImplementer.getUnderlyingStream.

Gets access to the data underlying this BLOB.
public long
length()

Implements java.sql.Blob.length.

Returns the number of bytes in the BLOB value designated by this Blob object.
private static UnsupportedOperationException
public long
position(byte[]
the byte array for which to search
pattern
,
long
the position at which to begin searching; the first position is 1
start
)

Implements java.sql.Blob.position.

Retrieves the byte position at which the specified byte array pattern begins within the BLOB value that this Blob object represents.
public long
position(Blob
the Blob object designating the BLOB value for which to search
pattern
,
long
the position in the BLOB value at which to begin searching; the first position is 1
start
)

Implements java.sql.Blob.position.

Retrieves the byte position in the BLOB value designated by this Blob object at which pattern begins.
private void
public OutputStream
setBinaryStream(long
the position in the BLOB value at which to start writing; the first position is 1
pos
)

Implements java.sql.Blob.setBinaryStream.

Retrieves a stream that can be used to write to the BLOB value that this Blob object represents.
public int
setBytes(long
the position in the BLOB object at which to start writing; the first position is 1
pos
,
byte[]
the array of bytes to be written to the BLOB value that this Blob object represents
bytes
)

Implements java.sql.Blob.setBytes.

Writes the given array of bytes to the BLOB value that this Blob object represents, starting at position pos, and returns the number of bytes written.
public int
setBytes(long
the position in the BLOB object at which to start writing; the first position is 1
pos
,
byte[]
the array of bytes to be written to this BLOB object
bytes
,
int
the offset into the array bytes at which to start reading the bytes to be set
offset
,
int
the number of bytes to be written to the BLOB value from the array of bytes bytes
len
)

Implements java.sql.Blob.setBytes.

Writes all or part of the given byte array to the BLOB value that this Blob object represents and returns the number of bytes written.
public void
truncate(long
the length, in bytes, to which the BLOB value that this Blob object represents should be truncated
len
)

Implements java.sql.Blob.truncate.

Truncates the BLOB value that this Blob object represents to be len bytes in length.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

binaryStreamback to summary
private final BinaryStream binaryStream
needsResetback to summary
private boolean needsReset

Constructor Detail

BlobProxyback to summary
private BlobProxy(byte[] bytes)

Constructor used to build Blob from byte array.

Parameters
bytes:byte[]

The byte array

See Also
generateProxy(byte[])
BlobProxyback to summary
private BlobProxy(InputStream stream, long length)

Constructor used to build Blob from a stream.

Parameters
stream:InputStream

The binary stream

length:long

The length of the stream

See Also
generateProxy(InputStream, long)

Method Detail

freeback to summary
public void free()

Implements java.sql.Blob.free.

Doc from java.sql.Blob.free.

This method frees the Blob object and releases the resources that it holds. The object is invalid once the free method is called.

After free has been called, any attempt to invoke a method other than free will result in an SQLException being thrown. If free is called multiple times, the subsequent calls to free are treated as a no-op.

Annotations
@Override
generateProxyback to summary
public static Blob generateProxy(byte[] bytes)

Generates a BlobImpl using byte data.

Parameters
bytes:byte[]

The data to be created as a Blob.

Returns:Blob

The BlobProxy instance to represent this data.

generateProxyback to summary
public static Blob generateProxy(InputStream stream, long length)

Generates a BlobImpl proxy using a given number of bytes from an InputStream.

Parameters
stream:InputStream

The input stream of bytes to be created as a Blob.

length:long

The number of bytes from stream to be written to the Blob.

Returns:Blob

The BlobProxy instance to represent this data.

getBinaryStreamback to summary
public InputStream getBinaryStream() throws SQLException

Implements java.sql.Blob.getBinaryStream.

Doc from java.sql.Blob.getBinaryStream.

Retrieves the BLOB value designated by this Blob instance as a stream.

Returns:InputStream

a stream containing the BLOB data

Annotations
@Override
Exceptions
SQLException:
if there is an error accessing the BLOB value
getBinaryStreamback to summary
public InputStream getBinaryStream(final long start, final long length) throws SQLException

Implements java.sql.Blob.getBinaryStream.

Doc from java.sql.Blob.getBinaryStream.

Returns an InputStream object that contains a partial Blob value, starting with the byte specified by pos, which is length bytes in length.

Parameters
start:long

the offset to the first byte of the partial value to be retrieved. The first byte in the Blob is at position 1.

length:long

the length in bytes of the partial value to be retrieved

Returns:InputStream

InputStream through which the partial Blob value can be read.

Annotations
@Override
Exceptions
SQLException:
if pos is less than 1 or if pos is greater than the number of bytes in the Blob or if pos + length is greater than the number of bytes in the Blob
getBytesback to summary
public byte[] getBytes(final long start, final int length) throws SQLException

Implements java.sql.Blob.getBytes.

Doc from java.sql.Blob.getBytes.

Retrieves all or part of the BLOB value that this Blob object represents, as an array of bytes. This byte array contains up to length consecutive bytes starting at position pos.

Parameters
start:long

the ordinal position of the first byte in the BLOB value to be extracted; the first byte is at position 1

length:int

the number of consecutive bytes to be copied; the value for length must be 0 or greater

Returns:byte[]

a byte array containing up to length consecutive bytes from the BLOB value designated by this Blob object, starting with the byte at position pos

Annotations
@Override
Exceptions
SQLException:
if there is an error accessing the BLOB value; if pos is less than 1 or length is less than 0
getStreamback to summary
private InputStream getStream() throws SQLException
getUnderlyingStreamback to summary
public BinaryStream getUnderlyingStream() throws SQLException

Implements org.hibernate.engine.jdbc.BlobImplementer.getUnderlyingStream.

Doc from org.hibernate.engine.jdbc.BlobImplementer.getUnderlyingStream.

Gets access to the data underlying this BLOB.

Returns:BinaryStream

Access to the underlying data.

lengthback to summary
public long length() throws SQLException

Implements java.sql.Blob.length.

Doc from java.sql.Blob.length.

Returns the number of bytes in the BLOB value designated by this Blob object.

Returns:long

length of the BLOB in bytes

Annotations
@Override
Exceptions
SQLException:
if there is an error accessing the length of the BLOB
notSupportedback to summary
private static UnsupportedOperationException notSupported()
positionback to summary
public long position(byte[] pattern, long start)

Implements java.sql.Blob.position.

Doc from java.sql.Blob.position.

Retrieves the byte position at which the specified byte array pattern begins within the BLOB value that this Blob object represents. The search for pattern begins at position start.

Parameters
pattern:byte[]

the byte array for which to search

start:long

the position at which to begin searching; the first position is 1

Returns:long

the position at which the pattern appears, else -1

Annotations
@Override
positionback to summary
public long position(Blob pattern, long start)

Implements java.sql.Blob.position.

Doc from java.sql.Blob.position.

Retrieves the byte position in the BLOB value designated by this Blob object at which pattern begins. The search begins at position start.

Parameters
pattern:Blob

the Blob object designating the BLOB value for which to search

start:long

the position in the BLOB value at which to begin searching; the first position is 1

Returns:long

the position at which the pattern begins, else -1

Annotations
@Override
resetIfNeededback to summary
private void resetIfNeeded() throws SQLException
setBinaryStreamback to summary
public OutputStream setBinaryStream(long pos)

Implements java.sql.Blob.setBinaryStream.

Doc from java.sql.Blob.setBinaryStream.

Retrieves a stream that can be used to write to the BLOB value that this Blob object represents. The stream begins at position pos. The bytes written to the stream will overwrite the existing bytes in the Blob object starting at the position pos. If the end of the Blob value is reached while writing to the stream, then the length of the Blob value will be increased to accommodate the extra bytes.

Note

If the value specified for pos is greater than the length+1 of the BLOB value then the behavior is undefined. Some JDBC drivers may throw an SQLException while other drivers may support this operation.

Parameters
pos:long

the position in the BLOB value at which to start writing; the first position is 1

Returns:OutputStream

a java.io.OutputStream object to which data can be written

Annotations
@Override
setBytesback to summary
public int setBytes(long pos, byte[] bytes)

Implements java.sql.Blob.setBytes.

Doc from java.sql.Blob.setBytes.

Writes the given array of bytes to the BLOB value that this Blob object represents, starting at position pos, and returns the number of bytes written. The array of bytes will overwrite the existing bytes in the Blob object starting at the position pos. If the end of the Blob value is reached while writing the array of bytes, then the length of the Blob value will be increased to accommodate the extra bytes.

Note

If the value specified for pos is greater than the length+1 of the BLOB value then the behavior is undefined. Some JDBC drivers may throw an SQLException while other drivers may support this operation.

Parameters
pos:long

the position in the BLOB object at which to start writing; the first position is 1

bytes:byte[]

the array of bytes to be written to the BLOB value that this Blob object represents

Returns:int

the number of bytes written

Annotations
@Override
setBytesback to summary
public int setBytes(long pos, byte[] bytes, int offset, int len)

Implements java.sql.Blob.setBytes.

Doc from java.sql.Blob.setBytes.

Writes all or part of the given byte array to the BLOB value that this Blob object represents and returns the number of bytes written. Writing starts at position pos in the BLOB value; len bytes from the given byte array are written. The array of bytes will overwrite the existing bytes in the Blob object starting at the position pos. If the end of the Blob value is reached while writing the array of bytes, then the length of the Blob value will be increased to accommodate the extra bytes.

Note

If the value specified for pos is greater than the length+1 of the BLOB value then the behavior is undefined. Some JDBC drivers may throw an SQLException while other drivers may support this operation.

Parameters
pos:long

the position in the BLOB object at which to start writing; the first position is 1

bytes:byte[]

the array of bytes to be written to this BLOB object

offset:int

the offset into the array bytes at which to start reading the bytes to be set

len:int

the number of bytes to be written to the BLOB value from the array of bytes bytes

Returns:int

the number of bytes written

Annotations
@Override
truncateback to summary
public void truncate(long len)

Implements java.sql.Blob.truncate.

Doc from java.sql.Blob.truncate.

Truncates the BLOB value that this Blob object represents to be len bytes in length.

Note

If the value specified for pos is greater than the length+1 of the BLOB value then the behavior is undefined. Some JDBC drivers may throw an SQLException while other drivers may support this operation.

Parameters
len:long

the length, in bytes, to which the BLOB value that this Blob object represents should be truncated

Annotations
@Override
org.hibernate.engine.jdbc back to summary

private Class BlobProxy.StreamBackedBinaryStream

extends Object
implements BinaryStream
Class Inheritance
All Implemented Interfaces
org.hibernate.engine.jdbc.BinaryStream

Field Summary

Modifier and TypeField and Description
private byte[]
private final long
private final InputStream

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public byte[]
public InputStream
public long
getLength()

Implements org.hibernate.engine.jdbc.BinaryStream.getLength.

Retrieve the length of the input stream
public void
release()

Implements org.hibernate.engine.jdbc.BinaryStream.release.

Release any underlying resources.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

bytesback to summary
private byte[] bytes
lengthback to summary
private final long length
streamback to summary
private final InputStream stream

Constructor Detail

StreamBackedBinaryStreamback to summary
private StreamBackedBinaryStream(InputStream stream, long length)

Method Detail

getBytesback to summary
public byte[] getBytes()

Implements org.hibernate.engine.jdbc.BinaryStream.getBytes.

Doc from org.hibernate.engine.jdbc.BinaryStream.getBytes.

Access to the bytes.

Returns:byte[]

The bytes.

Annotations
@Override
getInputStreamback to summary
public InputStream getInputStream()

Implements org.hibernate.engine.jdbc.BinaryStream.getInputStream.

Doc from org.hibernate.engine.jdbc.BinaryStream.getInputStream.

Retrieve the input stream.

Returns:InputStream

The input stream

Annotations
@Override
getLengthback to summary
public long getLength()

Implements org.hibernate.engine.jdbc.BinaryStream.getLength.

Doc from org.hibernate.engine.jdbc.BinaryStream.getLength.

Retrieve the length of the input stream

Returns:long

The input stream length

Annotations
@Override
releaseback to summary
public void release()

Implements org.hibernate.engine.jdbc.BinaryStream.release.

Doc from org.hibernate.engine.jdbc.BinaryStream.release.

Release any underlying resources.

Annotations
@Override