JSR 310, Types and SQLInput, SQlOutput

Lance Andersen - Oracle lance.andersen at oracle.com
Wed Jan 16 09:16:16 PST 2013



Once JSR 310 is integrated into Java SE 8, part of M6, one of the last items for now is updating Types, JDBCType and SQLInput, SQLOutput

For Types/JDBCType, we will:

Add TIME_WITH_TIMEZONE
Add TIMESTAMP_WITH_TIMEZONE

We should be able to use  DATE, TIME and TIMESTAMP with LocalDate, LocalTime, LocalDateTime

Add the following methods to SQLInput & SQLOutput:


SQLInput:


    /**
     * Reads the next attribute in the stream and returns it as an
     * {@code Object} in the Java programming language.  The
     * actual type of the object returned is determined by the specified
     * Java data type, and any customizations present in this
     * stream's type map.
     *
     * <P>A type map is registered with the stream by the JDBC driver before the
     * stream is passed to the application.
     *
     * <P>When the attribute at the head of the stream is an SQL {@code NULL} 
     * the method returns {@code null}.  If the attribute is an SQL
     * structured or distinct
     * type, it determines the SQL type of the attribute at the head of the stream. 
     * If the stream's type map has an entry for that SQL type, the driver
     * constructs an object of the appropriate class and calls the method 
     * {@code SQLData.readSQL} on that object, which reads additional data from the 
     * stream, using the protocol described for that method.
     *<p>
     * The default implementation will throw {@code SQLFeatureNotSupportedException}
     * 
     * @param type Class representing the Java data type to convert the attribute to.
     * @return the attribute at the head of the stream as an {@code Object} in the
     * Java programming language;{@code null} if the attribute is SQL {@code NULL}
     * @exception SQLException if a database access error occurs
     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
     * this method
     * @since 1.8
     */
    default void readObject(Class<T> type) throws SQLException {
        throw new SQLFeatureNotSupportedException("readObject not implemented");
    }






SQLOutput


  /**
   * Writes to the stream the data contained in the given object. The
   * object will be converted to the specified targetSqlType
   * before being sent to the stream.
   *<p>
   * When the {@code object} is {@code null}, this
   * method writes an SQL {@code NULL} to the stream.
   * <p>
   * If the object has a custom mapping (is of a class implementing the
   * interface {@code SQLData}),
   * the JDBC driver should call the method {@code SQLData.writeSQL} to
   * write it to the SQL data stream.
   * If, on the other hand, the object is of a class implementing
   * {@code Ref}, {@code Blob}, {@code Clob},  {@code NClob},
   *  {@code Struct}, {@code java.net.URL},
   * or {@code Array}, the driver should pass it to the database as a
   * value of the corresponding SQL type.
   *<P>
   * The default implementation will throw {@code SQLFeatureNotSupportedException}
   *
   * @param x the object  representing value to be sent to the database
   * @param targetSqlType the SQL type to convert the object to 
   * @exception SQLException if a database access error occurs
   * @exception SQLFeatureNotSupportedException if
   * the JDBC driver does not support this data type
   * @see JDBCType 
   * @see SQLType
   * @since 1.8
   */
  default void writeObject(Object x, SQLType targetSqlType) throws SQLException {
        throw new SQLFeatureNotSupportedException("writeObject not implemented");
  }


I have had a brief discussion some of you get your input prior to sending this out to the wider audience to make sure we are in sync

Best
Lance

Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering 
1 Network Drive 
Burlington, MA 01803
Lance.Andersen at oracle.com



More information about the jdbc-spec-discuss mailing list