com.aceql.jdbc.commons.main.abstracts.AbstractBlob Maven / Gradle / Ivy
Show all versions of aceql-http-client-jdbc-driver Show documentation
/*
* This file is part of AceQL JDBC Driver.
* AceQL JDBC Driver: Remote JDBC access over HTTP with AceQL HTTP.
* Copyright (c) 2023, KawanSoft SAS
* (http://www.kawansoft.com). All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.aceql.jdbc.commons.main.abstracts;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
/**
* Blob Wrapper.
* Implements all the Connection methods. Usage is exactly the same as a Blob.
*/
public abstract class AbstractBlob implements Blob {
/** SQL Blob container. */
private Blob blob;
/**
* Constructor
*
* @param blob
* actual SQL/JDBC Blob in use to wrap.
*/
public AbstractBlob(Blob blob) {
this.blob = blob;
}
/**
* Returns the number of bytes in the BLOB
value designated by
* this Blob
object.
*
* @return length of the BLOB
in bytes
* @exception SQLException
* if there is an error accessing the length of the
* BLOB
* @since 1.2
*/
@Override
public long length() throws SQLException {
return this.blob.length();
}
/**
* 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
.
*
* @param pos
* the ordinal position of the first byte in the
* BLOB
value to be extracted; the first byte is at
* position 1
* @param length
* the number of consecutive bytes to be copied
* @return 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
* @exception SQLException
* if there is an error accessing the BLOB
value
* @see #setBytes
* @since 1.2
*/
@Override
public byte[] getBytes(long pos, int length) throws SQLException {
return this.blob.getBytes(pos, length);
}
/**
* Retrieves the BLOB
value designated by this
* Blob
instance as a stream.
*
* @return a stream containing the BLOB
data
* @exception SQLException
* if there is an error accessing the BLOB
value
* @see #setBinaryStream
* @since 1.2
*/
@Override
public InputStream getBinaryStream() throws SQLException {
return this.blob.getBinaryStream();
}
/**
* 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
.
*
* @param pattern
* the byte array for which to search
* @param start
* the position at which to begin searching; the first position
* is 1
* @return the position at which the pattern appears, else -1
* @exception SQLException
* if there is an error accessing the BLOB
* @since 1.2
*/
@Override
public long position(byte[] pattern, long start) throws SQLException {
return this.blob.position(pattern, start);
}
/**
* Retrieves the byte position in the BLOB
value designated by
* this Blob
object at which pattern
begins. The
* search begins at position start
.
*
* @param pattern
* the Blob
object designating the BLOB
* value for which to search
* @param start
* the position in the BLOB
value at which to begin
* searching; the first position is 1
* @return the position at which the pattern begins, else -1
* @exception SQLException
* if there is an error accessing the BLOB
value
* @since 1.2
*/
@Override
public long position(Blob pattern, long start) throws SQLException {
return this.blob.position(pattern, start);
}
//
//
// -------------------------- JDBC 3.0 -----------------------------------
//
//
/**
* 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.
*
* @param pos
* the position in the BLOB
object at which to start
* writing
* @param bytes
* the array of bytes to be written to the BLOB
* value that this Blob
object represents
* @return the number of bytes written
* @exception SQLException
* if there is an error accessing the BLOB
value
* @see #getBytes
* @since 1.4
*/
@Override
public int setBytes(long pos, byte[] bytes) throws SQLException {
return this.blob.setBytes(pos, bytes);
}
/**
* 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.
*
* @param pos
* the position in the BLOB
object at which to start
* writing
* @param bytes
* the array of bytes to be written to this BLOB
* object
* @param offset
* the offset into the array bytes
at which to start
* reading the bytes to be set
* @param len
* the number of bytes to be written to the BLOB
* value from the array of bytes bytes
* @return the number of bytes written
* @exception SQLException
* if there is an error accessing the BLOB
value
* @see #getBytes
* @since 1.4
*/
@Override
public int setBytes(long pos, byte[] bytes, int offset, int len)
throws SQLException {
return this.blob.setBytes(pos, bytes, offset, len);
}
/**
* Retrieves a stream that can be used to write to the BLOB
* value that this Blob
object represents. The stream begins at
* position pos
.
*
* @param pos
* the position in the BLOB
value at which to start
* writing
* @return a java.io.OutputStream
object to which data can be
* written
* @exception SQLException
* if there is an error accessing the BLOB
value
* @see #getBinaryStream
* @since 1.4
*/
@Override
public OutputStream setBinaryStream(long pos) throws SQLException {
return this.blob.setBinaryStream(pos);
}
/**
* Truncates the BLOB
value that this Blob
object
* represents to be len
bytes in length.
*
* @param len
* the length, in bytes, to which the BLOB
value
* that this Blob
object represents should be
* truncated
* @exception SQLException
* if there is an error accessing the BLOB
value
* @since 1.4
*/
@Override
public void truncate(long len) throws SQLException {
this.blob.truncate(len);
}
/**
* 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 a SQLException
* being thrown. If free
is called multiple times, the
* subsequent calls to free
are treated as a no-op.
*
*
* @throws SQLException
* if an error occurs releasing the Blob's resources
* @exception SQLFeatureNotSupportedException
* if the JDBC driver does not support this method
* @since 1.6
*/
@Override
public void free() throws SQLException, SQLFeatureNotSupportedException {
this.blob.free();
}
/**
* Returns an InputStream
object that contains a partial
* Blob
value, starting with the byte specified by pos, which
* is length bytes in length.
*
* @param pos
* the offset to the first byte of the partial value to be
* retrieved. The first byte in the Blob
is at
* position 1
* @param length
* the length in bytes of the partial value to be retrieved
* @return InputStream
through which the partial
* Blob
value can be read.
* @throws 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
*
* @exception SQLFeatureNotSupportedException
* if the JDBC driver does not support this method
* @since 1.6
*/
@Override
public InputStream getBinaryStream(long pos, long length)
throws SQLException, SQLFeatureNotSupportedException {
return this.blob.getBinaryStream(pos, length);
}
}
// EOF