# Class SQLInputImpl

java.lang.Object
javax.sql.rowset.serial.SQLInputImpl

All Implemented Interfaces:
  `SQLInput`

public class SQLInputImpl extends Object implements SQLInput
An input stream used for custom mapping user-defined types (UDTs). An `SQLInputImpl` object is an input stream that contains a stream of values that are the attributes of a UDT.

This class is used by the driver behind the scenes when the method `getObject` is called on an SQL structured or distinct type that has a custom mapping; a programmer never invokes `SQLInputImpl` methods directly. They are provided here as a convenience for those who write `RowSet` implementations.

The `SQLInputImpl` class provides a set of reader methods analogous to the `ResultSet` getter methods. These methods make it possible to read the values in an `SQLInputImpl` object.

The method `wasNull` is used to determine whether the the last value read was SQL `NULL`.

When the method `getObject` is called with an object of a class implementing the interface `SQLData`, the JDBC driver calls the method `SQLData.getSQLType` to determine the SQL type of the UDT being custom mapped. The driver creates an instance of `SQLInputImpl`, populating it with the attributes of the UDT. The driver then passes the input stream to the method `SQLData.readSQL`, which in turn calls the `SQLInputImpl` reader methods to read the attributes from the input stream.

Since:
  1.5
See Also:
  - `SQLData`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SQLInputImpl(Object[] attributes, Map<String,Class<?>> map)`
  Creates an `SQLInputImpl` object initialized with the given array of attributes and the given type map.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Array`
  `readArray()`
  Reads an SQL `ARRAY` value from the stream and returns it as an `Array` object in the Java programming language.
  `InputStream`
  `readAsciiStream()`
  Returns the next attribute in this `SQLInputImpl` object as a stream of ASCII characters.
  `BigDecimal`
  `readBigDecimal()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `java.math.BigDecimal`.
  `InputStream`
  `readBinaryStream()`
  Returns the next attribute in this `SQLInputImpl` object as a stream of uninterpreted bytes.
  `Blob`
  `readBlob()`
  Retrieves the `BLOB` value at the head of this `SQLInputImpl` object as a `Blob` object in the Java programming language.
  `boolean`
  `readBoolean()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `boolean` in the Java programming language.
  `byte`
  `readByte()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `byte` in the Java programming language.
  `byte[]`
  `readBytes()`
  Retrieves the next attribute in this `SQLInputImpl` object as an array of bytes.
  `Reader`
  `readCharacterStream()`
  Retrieves the next attribute in this `SQLInputImpl` object as a stream of Unicode characters.
  `Clob`
  `readClob()`
  Retrieves the `CLOB` value at the head of this `SQLInputImpl` object as a `Clob` object in the Java programming language.
  `Date`
  `readDate()`
  Retrieves the next attribute in this `SQLInputImpl` as a `java.sql.Date` object.
  `double`
  `readDouble()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `double` in the Java programming language.
  `float`
  `readFloat()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `float` in the Java programming language.
  `int`
  `readInt()`
  Retrieves the next attribute in this `SQLInputImpl` object as an `int` in the Java programming language.
  `long`
  `readLong()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `long` in the Java programming language.
  `NClob`
  `readNClob()`
  Reads an SQL `NCLOB` value from the stream and returns it as a `Clob` object in the Java programming language.
  `String`
  `readNString()`
  Reads the next attribute in the stream and returns it as a `String` in the Java programming language.
  `Object`
  `readObject()`
  Retrieves the value at the head of this `SQLInputImpl` object as an `Object` in the Java programming language.
  `Ref`
  `readRef()`
  Retrieves the value at the head of this `SQLInputImpl` object as a `Ref` object in the Java programming language.
  `RowId`
  `readRowId()`
  Reads an SQL `ROWID` value from the stream and returns it as a `RowId` object in the Java programming language.
  `short`
  `readShort()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `short` in the Java programming language.
  `SQLXML`
  `readSQLXML()`
  Reads an SQL `XML` value from the stream and returns it as a `SQLXML` object in the Java programming language.
  `String`
  `readString()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `String` in the Java programming language.
  `Time`
  `readTime()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `java.sql.Time` object.
  `Timestamp`
  `readTimestamp()`
  Retrieves the next attribute in this `SQLInputImpl` object as a `java.sql.Timestamp` object.
  `URL`
  `readURL()`
  Reads an SQL `DATALINK` value from the stream and returns it as an `URL` object in the Java programming language.
  `boolean`
  `wasNull()`
  Ascertains whether the last value read from this `SQLInputImpl` object was `null`.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

  ### Methods declared in interface SQLInput

  `readObject`
  Modifier and Type
  Method
  Description
  `default <T> T`
  `readObject(Class<T> type)`
  Reads the next attribute in the stream and returns it as an `Object` in the Java programming language.

- ## Constructor Details

  - ### SQLInputImpl

    public SQLInputImpl(Object[] attributes, Map<String,Class<?>> map) throws SQLException
    Creates an `SQLInputImpl` object initialized with the given array of attributes and the given type map. If any of the attributes is a UDT whose name is in an entry in the type map, the attribute will be mapped according to the corresponding `SQLData` implementation.
    Parameters:
      `attributes` - an array of `Object` instances in which each element is an attribute of a UDT. The order of the attributes in the array is the same order in which the attributes were defined in the UDT definition.
      `map` - a `java.util.Map` object containing zero or more entries, with each entry consisting of 1) a `String` giving the fully qualified name of the UDT and 2) the `Class` object for the `SQLData` implementation that defines how the UDT is to be mapped
    Throws:
      `SQLException` - if the `attributes` or the `map` is a `null` value

- ## Method Details

  - ### readString

    public String readString() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `String` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readString` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no further values in the stream.

  - ### readBoolean

    public boolean readBoolean() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `boolean` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readBoolean` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no further values in the stream.

  - ### readByte

    public byte readByte() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `byte` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readByte` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no further values in the stream

  - ### readShort

    public short readShort() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `short` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readShort` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readInt

    public int readInt() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as an `int` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readInt` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readLong

    public long readLong() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `long` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readLong` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readFloat

    public float readFloat() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `float` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readFloat` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readDouble

    public double readDouble() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `double` in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readDouble` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readBigDecimal

    public BigDecimal readBigDecimal() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `java.math.BigDecimal`.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readBigDecimal` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readBytes

    public byte[] readBytes() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as an array of bytes.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readBytes` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readDate

    public Date readDate() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` as a `java.sql.Date` object.

    This method does not perform type-safe checking to determine if the returned type is the expected type; this responsibility is delegated to the UDT mapping as defined by a `SQLData` implementation.

    Specified by:
      `readDate` in interface `SQLInput`
    Returns:
      the next attribute in this `SQLInputImpl` object; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position or if there are no more values in the stream

  - ### readTime

    public Time readTime() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `java.sql.Time` object.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readTime` in interface `SQLInput`
    Returns:
      the attribute; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readTimestamp

    public Timestamp readTimestamp() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a `java.sql.Timestamp` object.
    Specified by:
      `readTimestamp` in interface `SQLInput`
    Returns:
      the attribute; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readCharacterStream

    public Reader readCharacterStream() throws SQLException
    Retrieves the next attribute in this `SQLInputImpl` object as a stream of Unicode characters.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readCharacterStream` in interface `SQLInput`
    Returns:
      the attribute; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readAsciiStream

    public InputStream readAsciiStream() throws SQLException
    Returns the next attribute in this `SQLInputImpl` object as a stream of ASCII characters.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readAsciiStream` in interface `SQLInput`
    Returns:
      the attribute; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readBinaryStream

    public InputStream readBinaryStream() throws SQLException
    Returns the next attribute in this `SQLInputImpl` object as a stream of uninterpreted bytes.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readBinaryStream` in interface `SQLInput`
    Returns:
      the attribute; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readObject

    public Object readObject() throws SQLException
    Retrieves the value at the head of this `SQLInputImpl` object as an `Object` in the Java programming language. The actual type of the object returned is determined by the default mapping of SQL types to types in the Java programming language unless there is a custom mapping, in which case the type of the object returned is determined by this stream's type map.

    The JDBC technology-enabled driver registers a type map with the stream before passing the stream to the application.

    When the datum at the head of the stream is an SQL `NULL`, this method returns `null`. If the datum is an SQL structured or distinct type with a custom mapping, this method determines the SQL type of the datum at the head of the stream, constructs an object of the appropriate class, and calls the method `SQLData.readSQL` on that object. The `readSQL` method then calls the appropriate `SQLInputImpl.readXXX` methods to retrieve the attribute values from the stream.

    Specified by:
      `readObject` in interface `SQLInput`
    Returns:
      the value at the head of the stream as an `Object` in the Java programming language; `null` if the value is SQL `NULL`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readRef

    public Ref readRef() throws SQLException
    Retrieves the value at the head of this `SQLInputImpl` object as a `Ref` object in the Java programming language.
    Specified by:
      `readRef` in interface `SQLInput`
    Returns:
      a `Ref` object representing the SQL `REF` value at the head of the stream; if the value is `SQL NULL` return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readBlob

    public Blob readBlob() throws SQLException
    Retrieves the `BLOB` value at the head of this `SQLInputImpl` object as a `Blob` object in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readBlob` in interface `SQLInput`
    Returns:
      a `Blob` object representing the SQL `BLOB` value at the head of this stream; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readClob

    public Clob readClob() throws SQLException
    Retrieves the `CLOB` value at the head of this `SQLInputImpl` object as a `Clob` object in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readClob` in interface `SQLInput`
    Returns:
      a `Clob` object representing the SQL `CLOB` value at the head of the stream; if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readArray

    public Array readArray() throws SQLException
    Reads an SQL `ARRAY` value from the stream and returns it as an `Array` object in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readArray` in interface `SQLInput`
    Returns:
      an `Array` object representing the SQL `ARRAY` value at the head of the stream; * if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### wasNull

    public boolean wasNull() throws SQLException
    Ascertains whether the last value read from this `SQLInputImpl` object was `null`.
    Specified by:
      `wasNull` in interface `SQLInput`
    Returns:
      `true` if the SQL value read most recently was `null`; otherwise, `false`; by default it will return false
    Throws:
      `SQLException` - if an error occurs determining the last value read was a `null` value or not;

  - ### readURL

    public URL readURL() throws SQLException
    Reads an SQL `DATALINK` value from the stream and returns it as an `URL` object in the Java programming language.

    This method does not perform type-safe checking to determine if the returned type is the expected type as this responsibility is delegated to the UDT mapping as implemented by a `SQLData` implementation.

    Specified by:
      `readURL` in interface `SQLInput`
    Returns:
      an `URL` object representing the SQL `DATALINK` value at the head of the stream; * if the value is `SQL NULL`, return `null`
    Throws:
      `SQLException` - if the read position is located at an invalid position; or if there are no further values in the stream.

  - ### readNClob

    public NClob readNClob() throws SQLException
    Reads an SQL `NCLOB` value from the stream and returns it as a `Clob` object in the Java programming language.
    Specified by:
      `readNClob` in interface `SQLInput`
    Returns:
      a `NClob` object representing data of the SQL `NCLOB` value at the head of the stream; `null` if the value read is SQL `NULL`
    Throws:
      `SQLException` - if a database access error occurs
    Since:
      1.6

  - ### readNString

    public String readNString() throws SQLException
    Reads the next attribute in the stream and returns it as a `String` in the Java programming language. It is intended for use when accessing `NCHAR`,`NVARCHAR` and `LONGNVARCHAR` columns.
    Specified by:
      `readNString` in interface `SQLInput`
    Returns:
      the attribute; if the value is SQL `NULL`, returns `null`
    Throws:
      `SQLException` - if a database access error occurs
    Since:
      1.6

  - ### readSQLXML

    public SQLXML readSQLXML() throws SQLException
    Reads an SQL `XML` value from the stream and returns it as a `SQLXML` object in the Java programming language.
    Specified by:
      `readSQLXML` in interface `SQLInput`
    Returns:
      a `SQLXML` object representing data of the SQL `XML` value at the head of the stream; `null` if the value read is SQL `NULL`
    Throws:
      `SQLException` - if a database access error occurs
    Since:
      1.6

  - ### readRowId

    public RowId readRowId() throws SQLException
    Reads an SQL `ROWID` value from the stream and returns it as a `RowId` object in the Java programming language.
    Specified by:
      `readRowId` in interface `SQLInput`
    Returns:
      a `RowId` object representing data of the SQL `ROWID` value at the head of the stream; `null` if the value read is SQL `NULL`
    Throws:
      `SQLException` - if a database access error occurs
    Since:
      1.6