Home | History | Annotate | Download | only in sql
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
      4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      5  *
      6  * This code is free software; you can redistribute it and/or modify it
      7  * under the terms of the GNU General Public License version 2 only, as
      8  * published by the Free Software Foundation.  Oracle designates this
      9  * particular file as subject to the "Classpath" exception as provided
     10  * by Oracle in the LICENSE file that accompanied this code.
     11  *
     12  * This code is distributed in the hope that it will be useful, but WITHOUT
     13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     15  * version 2 for more details (a copy is included in the LICENSE file that
     16  * accompanied this code).
     17  *
     18  * You should have received a copy of the GNU General Public License version
     19  * 2 along with this work; if not, write to the Free Software Foundation,
     20  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     21  *
     22  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     23  * or visit www.oracle.com if you need additional information or have any
     24  * questions.
     25  */
     26 
     27 package java.sql;
     28 
     29 import java.math.BigDecimal;
     30 import java.util.Calendar;
     31 import java.io.Reader;
     32 import java.io.InputStream;
     33 
     34 /**
     35  * The interface used to execute SQL stored procedures.  The JDBC API
     36  * provides a stored procedure SQL escape syntax that allows stored procedures
     37  * to be called in a standard way for all RDBMSs. This escape syntax has one
     38  * form that includes a result parameter and one that does not. If used, the result
     39  * parameter must be registered as an OUT parameter. The other parameters
     40  * can be used for input, output or both. Parameters are referred to
     41  * sequentially, by number, with the first parameter being 1.
     42  * <PRE>
     43  *   {?= call &lt;procedure-name&gt;[(&lt;arg1&gt;,&lt;arg2&gt;, ...)]}
     44  *   {call &lt;procedure-name&gt;[(&lt;arg1&gt;,&lt;arg2&gt;, ...)]}
     45  * </PRE>
     46  * <P>
     47  * IN parameter values are set using the <code>set</code> methods inherited from
     48  * {@link PreparedStatement}.  The type of all OUT parameters must be
     49  * registered prior to executing the stored procedure; their values
     50  * are retrieved after execution via the <code>get</code> methods provided here.
     51  * <P>
     52  * A <code>CallableStatement</code> can return one {@link ResultSet} object or
     53  * multiple <code>ResultSet</code> objects.  Multiple
     54  * <code>ResultSet</code> objects are handled using operations
     55  * inherited from {@link Statement}.
     56  * <P>
     57  * For maximum portability, a call's <code>ResultSet</code> objects and
     58  * update counts should be processed prior to getting the values of output
     59  * parameters.
     60  * <P>
     61  *
     62  * @see Connection#prepareCall
     63  * @see ResultSet
     64  */
     65 
     66 public interface CallableStatement extends PreparedStatement {
     67 
     68     /**
     69      * Registers the OUT parameter in ordinal position
     70      * <code>parameterIndex</code> to the JDBC type
     71      * <code>sqlType</code>.  All OUT parameters must be registered
     72      * before a stored procedure is executed.
     73      * <p>
     74      * The JDBC type specified by <code>sqlType</code> for an OUT
     75      * parameter determines the Java type that must be used
     76      * in the <code>get</code> method to read the value of that parameter.
     77      * <p>
     78      * If the JDBC type expected to be returned to this output parameter
     79      * is specific to this particular database, <code>sqlType</code>
     80      * should be <code>java.sql.Types.OTHER</code>.  The method
     81      * {@link #getObject} retrieves the value.
     82      *
     83      * @param parameterIndex the first parameter is 1, the second is 2,
     84      *        and so on
     85      * @param sqlType the JDBC type code defined by <code>java.sql.Types</code>.
     86      *        If the parameter is of JDBC type <code>NUMERIC</code>
     87      *        or <code>DECIMAL</code>, the version of
     88      *        <code>registerOutParameter</code> that accepts a scale value
     89      *        should be used.
     90      *
     91      * @exception SQLException if the parameterIndex is not valid;
     92      * if a database access error occurs or
     93      * this method is called on a closed <code>CallableStatement</code>
     94      * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
     95      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
     96      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
     97      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
     98      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
     99      * or  <code>STRUCT</code> data type and the JDBC driver does not support
    100      * this data type
    101      * @see Types
    102      */
    103     void registerOutParameter(int parameterIndex, int sqlType)
    104         throws SQLException;
    105 
    106     /**
    107      * Registers the parameter in ordinal position
    108      * <code>parameterIndex</code> to be of JDBC type
    109      * <code>sqlType</code>. All OUT parameters must be registered
    110      * before a stored procedure is executed.
    111      * <p>
    112      * The JDBC type specified by <code>sqlType</code> for an OUT
    113      * parameter determines the Java type that must be used
    114      * in the <code>get</code> method to read the value of that parameter.
    115      * <p>
    116      * This version of <code>registerOutParameter</code> should be
    117      * used when the parameter is of JDBC type <code>NUMERIC</code>
    118      * or <code>DECIMAL</code>.
    119      *
    120      * @param parameterIndex the first parameter is 1, the second is 2,
    121      * and so on
    122      * @param sqlType the SQL type code defined by <code>java.sql.Types</code>.
    123      * @param scale the desired number of digits to the right of the
    124      * decimal point.  It must be greater than or equal to zero.
    125      * @exception SQLException if the parameterIndex is not valid;
    126      * if a database access error occurs or
    127      * this method is called on a closed <code>CallableStatement</code>
    128      * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
    129      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
    130      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
    131      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
    132      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
    133      * or  <code>STRUCT</code> data type and the JDBC driver does not support
    134      * this data type
    135      * @see Types
    136      */
    137     void registerOutParameter(int parameterIndex, int sqlType, int scale)
    138         throws SQLException;
    139 
    140     /**
    141      * Retrieves whether the last OUT parameter read had the value of
    142      * SQL <code>NULL</code>.  Note that this method should be called only after
    143      * calling a getter method; otherwise, there is no value to use in
    144      * determining whether it is <code>null</code> or not.
    145      *
    146      * @return <code>true</code> if the last parameter read was SQL
    147      * <code>NULL</code>; <code>false</code> otherwise
    148      * @exception SQLException if a database access error occurs or
    149      * this method is called on a closed <code>CallableStatement</code>
    150      */
    151     boolean wasNull() throws SQLException;
    152 
    153     /**
    154      * Retrieves the value of the designated JDBC <code>CHAR</code>,
    155      * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> parameter as a
    156      * <code>String</code> in the Java programming language.
    157      * <p>
    158      * For the fixed-length type JDBC <code>CHAR</code>,
    159      * the <code>String</code> object
    160      * returned has exactly the same value the SQL
    161      * <code>CHAR</code> value had in the
    162      * database, including any padding added by the database.
    163      *
    164      * @param parameterIndex the first parameter is 1, the second is 2,
    165      * and so on
    166      * @return the parameter value. If the value is SQL <code>NULL</code>,
    167      *         the result
    168      *         is <code>null</code>.
    169      * @exception SQLException if the parameterIndex is not valid;
    170      * if a database access error occurs or
    171      * this method is called on a closed <code>CallableStatement</code>
    172      * @see #setString
    173      */
    174     String getString(int parameterIndex) throws SQLException;
    175 
    176     /**
    177      * Retrieves the value of the designated JDBC <code>BIT</code>
    178      * or <code>BOOLEAN</code> parameter as a
    179      * <code>boolean</code> in the Java programming language.
    180      *
    181      * @param parameterIndex the first parameter is 1, the second is 2,
    182      *        and so on
    183      * @return the parameter value.  If the value is SQL <code>NULL</code>,
    184      *         the result is <code>false</code>.
    185      * @exception SQLException if the parameterIndex is not valid;
    186      * if a database access error occurs or
    187      * this method is called on a closed <code>CallableStatement</code>
    188      * @see #setBoolean
    189      */
    190     boolean getBoolean(int parameterIndex) throws SQLException;
    191 
    192     /**
    193      * Retrieves the value of the designated JDBC <code>TINYINT</code> parameter
    194      * as a <code>byte</code> in the Java programming language.
    195      *
    196      * @param parameterIndex the first parameter is 1, the second is 2,
    197      * and so on
    198      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    199      * is <code>0</code>.
    200      * @exception SQLException if the parameterIndex is not valid;
    201      * if a database access error occurs or
    202      * this method is called on a closed <code>CallableStatement</code>
    203      * @see #setByte
    204      */
    205     byte getByte(int parameterIndex) throws SQLException;
    206 
    207     /**
    208      * Retrieves the value of the designated JDBC <code>SMALLINT</code> parameter
    209      * as a <code>short</code> in the Java programming language.
    210      *
    211      * @param parameterIndex the first parameter is 1, the second is 2,
    212      * and so on
    213      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    214      * is <code>0</code>.
    215      * @exception SQLException if the parameterIndex is not valid;
    216      * if a database access error occurs or
    217      * this method is called on a closed <code>CallableStatement</code>
    218      * @see #setShort
    219      */
    220     short getShort(int parameterIndex) throws SQLException;
    221 
    222     /**
    223      * Retrieves the value of the designated JDBC <code>INTEGER</code> parameter
    224      * as an <code>int</code> in the Java programming language.
    225      *
    226      * @param parameterIndex the first parameter is 1, the second is 2,
    227      * and so on
    228      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    229      * is <code>0</code>.
    230      * @exception SQLException if the parameterIndex is not valid;
    231      * if a database access error occurs or
    232      * this method is called on a closed <code>CallableStatement</code>
    233      * @see #setInt
    234      */
    235     int getInt(int parameterIndex) throws SQLException;
    236 
    237     /**
    238      * Retrieves the value of the designated JDBC <code>BIGINT</code> parameter
    239      * as a <code>long</code> in the Java programming language.
    240      *
    241      * @param parameterIndex the first parameter is 1, the second is 2,
    242      * and so on
    243      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    244      * is <code>0</code>.
    245      * @exception SQLException if the parameterIndex is not valid;
    246      * if a database access error occurs or
    247      * this method is called on a closed <code>CallableStatement</code>
    248      * @see #setLong
    249      */
    250     long getLong(int parameterIndex) throws SQLException;
    251 
    252     /**
    253      * Retrieves the value of the designated JDBC <code>FLOAT</code> parameter
    254      * as a <code>float</code> in the Java programming language.
    255      *
    256      * @param parameterIndex the first parameter is 1, the second is 2,
    257      *        and so on
    258      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    259      *         is <code>0</code>.
    260      * @exception SQLException if the parameterIndex is not valid;
    261      * if a database access error occurs or
    262      * this method is called on a closed <code>CallableStatement</code>
    263      * @see #setFloat
    264      */
    265     float getFloat(int parameterIndex) throws SQLException;
    266 
    267     /**
    268      * Retrieves the value of the designated JDBC <code>DOUBLE</code> parameter as a <code>double</code>
    269      * in the Java programming language.
    270      * @param parameterIndex the first parameter is 1, the second is 2,
    271      *        and so on
    272      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    273      *         is <code>0</code>.
    274      * @exception SQLException if the parameterIndex is not valid;
    275      * if a database access error occurs or
    276      * this method is called on a closed <code>CallableStatement</code>
    277      * @see #setDouble
    278      */
    279     double getDouble(int parameterIndex) throws SQLException;
    280 
    281     /**
    282      * Retrieves the value of the designated JDBC <code>NUMERIC</code> parameter as a
    283      * <code>java.math.BigDecimal</code> object with <i>scale</i> digits to
    284      * the right of the decimal point.
    285      * @param parameterIndex the first parameter is 1, the second is 2,
    286      *        and so on
    287      * @param scale the number of digits to the right of the decimal point
    288      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    289      *         is <code>null</code>.
    290      * @exception SQLException if the parameterIndex is not valid;
    291      * if a database access error occurs or
    292      * this method is called on a closed <code>CallableStatement</code>
    293      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    294      * this method
    295      * @deprecated use <code>getBigDecimal(int parameterIndex)</code>
    296      *             or <code>getBigDecimal(String parameterName)</code>
    297      * @see #setBigDecimal
    298      */
    299     @Deprecated
    300     BigDecimal getBigDecimal(int parameterIndex, int scale)
    301         throws SQLException;
    302 
    303     /**
    304      * Retrieves the value of the designated JDBC <code>BINARY</code> or
    305      * <code>VARBINARY</code> parameter as an array of <code>byte</code>
    306      * values in the Java programming language.
    307      * @param parameterIndex the first parameter is 1, the second is 2,
    308      *        and so on
    309      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    310      *         is <code>null</code>.
    311      * @exception SQLException if the parameterIndex is not valid;
    312      * if a database access error occurs or
    313      * this method is called on a closed <code>CallableStatement</code>
    314      * @see #setBytes
    315      */
    316     byte[] getBytes(int parameterIndex) throws SQLException;
    317 
    318     /**
    319      * Retrieves the value of the designated JDBC <code>DATE</code> parameter as a
    320      * <code>java.sql.Date</code> object.
    321      * @param parameterIndex the first parameter is 1, the second is 2,
    322      *        and so on
    323      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    324      *         is <code>null</code>.
    325      * @exception SQLException if the parameterIndex is not valid;
    326      * if a database access error occurs or
    327      * this method is called on a closed <code>CallableStatement</code>
    328      * @see #setDate
    329      */
    330     java.sql.Date getDate(int parameterIndex) throws SQLException;
    331 
    332     /**
    333      * Retrieves the value of the designated JDBC <code>TIME</code> parameter as a
    334      * <code>java.sql.Time</code> object.
    335      *
    336      * @param parameterIndex the first parameter is 1, the second is 2,
    337      *        and so on
    338      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    339      *         is <code>null</code>.
    340      * @exception SQLException if the parameterIndex is not valid;
    341      * if a database access error occurs or
    342      * this method is called on a closed <code>CallableStatement</code>
    343      * @see #setTime
    344      */
    345     java.sql.Time getTime(int parameterIndex) throws SQLException;
    346 
    347     /**
    348      * Retrieves the value of the designated JDBC <code>TIMESTAMP</code> parameter as a
    349      * <code>java.sql.Timestamp</code> object.
    350      *
    351      * @param parameterIndex the first parameter is 1, the second is 2,
    352      *        and so on
    353      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    354      *         is <code>null</code>.
    355      * @exception SQLException if the parameterIndex is not valid;
    356      * if a database access error occurs or
    357      * this method is called on a closed <code>CallableStatement</code>
    358      * @see #setTimestamp
    359      */
    360     java.sql.Timestamp getTimestamp(int parameterIndex)
    361         throws SQLException;
    362 
    363     //----------------------------------------------------------------------
    364     // Advanced features:
    365 
    366 
    367     /**
    368      * Retrieves the value of the designated parameter as an <code>Object</code>
    369      * in the Java programming language. If the value is an SQL <code>NULL</code>,
    370      * the driver returns a Java <code>null</code>.
    371      * <p>
    372      * This method returns a Java object whose type corresponds to the JDBC
    373      * type that was registered for this parameter using the method
    374      * <code>registerOutParameter</code>.  By registering the target JDBC
    375      * type as <code>java.sql.Types.OTHER</code>, this method can be used
    376      * to read database-specific abstract data types.
    377      *
    378      * @param parameterIndex the first parameter is 1, the second is 2,
    379      *        and so on
    380      * @return A <code>java.lang.Object</code> holding the OUT parameter value
    381      * @exception SQLException if the parameterIndex is not valid;
    382      * if a database access error occurs or
    383      * this method is called on a closed <code>CallableStatement</code>
    384      * @see Types
    385      * @see #setObject
    386      */
    387     Object getObject(int parameterIndex) throws SQLException;
    388 
    389 
    390     //--------------------------JDBC 2.0-----------------------------
    391 
    392     /**
    393      * Retrieves the value of the designated JDBC <code>NUMERIC</code> parameter as a
    394      * <code>java.math.BigDecimal</code> object with as many digits to the
    395      * right of the decimal point as the value contains.
    396      * @param parameterIndex the first parameter is 1, the second is 2,
    397      * and so on
    398      * @return the parameter value in full precision.  If the value is
    399      * SQL <code>NULL</code>, the result is <code>null</code>.
    400      * @exception SQLException if the parameterIndex is not valid;
    401      * if a database access error occurs or
    402      * this method is called on a closed <code>CallableStatement</code>
    403      * @see #setBigDecimal
    404      * @since 1.2
    405      */
    406     BigDecimal getBigDecimal(int parameterIndex) throws SQLException;
    407 
    408     /**
    409      * Returns an object representing the value of OUT parameter
    410      * <code>parameterIndex</code> and uses <code>map</code> for the custom
    411      * mapping of the parameter value.
    412      * <p>
    413      * This method returns a Java object whose type corresponds to the
    414      * JDBC type that was registered for this parameter using the method
    415      * <code>registerOutParameter</code>.  By registering the target
    416      * JDBC type as <code>java.sql.Types.OTHER</code>, this method can
    417      * be used to read database-specific abstract data types.
    418      * @param parameterIndex the first parameter is 1, the second is 2, and so on
    419      * @param map the mapping from SQL type names to Java classes
    420      * @return a <code>java.lang.Object</code> holding the OUT parameter value
    421      * @exception SQLException if the parameterIndex is not valid;
    422      * if a database access error occurs or
    423      * this method is called on a closed <code>CallableStatement</code>
    424      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    425      * this method
    426      * @see #setObject
    427      * @since 1.2
    428      */
    429     Object getObject(int parameterIndex, java.util.Map<String,Class<?>> map)
    430         throws SQLException;
    431 
    432     /**
    433      * Retrieves the value of the designated JDBC <code>REF(&lt;structured-type&gt;)</code>
    434      * parameter as a {@link java.sql.Ref} object in the Java programming language.
    435      * @param parameterIndex the first parameter is 1, the second is 2,
    436      * and so on
    437      * @return the parameter value as a <code>Ref</code> object in the
    438      * Java programming language.  If the value was SQL <code>NULL</code>, the value
    439      * <code>null</code> is returned.
    440      * @exception SQLException if the parameterIndex is not valid;
    441      * if a database access error occurs or
    442      * this method is called on a closed <code>CallableStatement</code>
    443      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    444      * this method
    445      * @since 1.2
    446      */
    447     Ref getRef (int parameterIndex) throws SQLException;
    448 
    449     /**
    450      * Retrieves the value of the designated JDBC <code>BLOB</code> parameter as a
    451      * {@link java.sql.Blob} object in the Java programming language.
    452      * @param parameterIndex the first parameter is 1, the second is 2, and so on
    453      * @return the parameter value as a <code>Blob</code> object in the
    454      * Java programming language.  If the value was SQL <code>NULL</code>, the value
    455      * <code>null</code> is returned.
    456      * @exception SQLException if the parameterIndex is not valid;
    457      * if a database access error occurs or
    458      * this method is called on a closed <code>CallableStatement</code>
    459      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    460      * this method
    461      * @since 1.2
    462      */
    463     Blob getBlob (int parameterIndex) throws SQLException;
    464 
    465     /**
    466      * Retrieves the value of the designated JDBC <code>CLOB</code> parameter as a
    467      * <code>java.sql.Clob</code> object in the Java programming language.
    468      * @param parameterIndex the first parameter is 1, the second is 2, and
    469      * so on
    470      * @return the parameter value as a <code>Clob</code> object in the
    471      * Java programming language.  If the value was SQL <code>NULL</code>, the
    472      * value <code>null</code> is returned.
    473      * @exception SQLException if the parameterIndex is not valid;
    474      * if a database access error occurs or
    475      * this method is called on a closed <code>CallableStatement</code>
    476      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    477      * this method
    478      * @since 1.2
    479      */
    480     Clob getClob (int parameterIndex) throws SQLException;
    481 
    482     /**
    483      *
    484      * Retrieves the value of the designated JDBC <code>ARRAY</code> parameter as an
    485      * {@link java.sql.Array} object in the Java programming language.
    486      * @param parameterIndex the first parameter is 1, the second is 2, and
    487      * so on
    488      * @return the parameter value as an <code>Array</code> object in
    489      * the Java programming language.  If the value was SQL <code>NULL</code>, the
    490      * value <code>null</code> is returned.
    491      * @exception SQLException if the parameterIndex is not valid;
    492      * if a database access error occurs or
    493      * this method is called on a closed <code>CallableStatement</code>
    494      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    495      * this method
    496      * @since 1.2
    497      */
    498     Array getArray (int parameterIndex) throws SQLException;
    499 
    500     /**
    501      * Retrieves the value of the designated JDBC <code>DATE</code> parameter as a
    502      * <code>java.sql.Date</code> object, using
    503      * the given <code>Calendar</code> object
    504      * to construct the date.
    505      * With a <code>Calendar</code> object, the driver
    506      * can calculate the date taking into account a custom timezone and locale.
    507      * If no <code>Calendar</code> object is specified, the driver uses the
    508      * default timezone and locale.
    509      *
    510      * @param parameterIndex the first parameter is 1, the second is 2,
    511      * and so on
    512      * @param cal the <code>Calendar</code> object the driver will use
    513      *            to construct the date
    514      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    515      *         is <code>null</code>.
    516      * @exception SQLException if the parameterIndex is not valid;
    517      * if a database access error occurs or
    518      * this method is called on a closed <code>CallableStatement</code>
    519      * @see #setDate
    520      * @since 1.2
    521      */
    522     java.sql.Date getDate(int parameterIndex, Calendar cal)
    523         throws SQLException;
    524 
    525     /**
    526      * Retrieves the value of the designated JDBC <code>TIME</code> parameter as a
    527      * <code>java.sql.Time</code> object, using
    528      * the given <code>Calendar</code> object
    529      * to construct the time.
    530      * With a <code>Calendar</code> object, the driver
    531      * can calculate the time taking into account a custom timezone and locale.
    532      * If no <code>Calendar</code> object is specified, the driver uses the
    533      * default timezone and locale.
    534      *
    535      * @param parameterIndex the first parameter is 1, the second is 2,
    536      * and so on
    537      * @param cal the <code>Calendar</code> object the driver will use
    538      *            to construct the time
    539      * @return the parameter value; if the value is SQL <code>NULL</code>, the result
    540      *         is <code>null</code>.
    541      * @exception SQLException if the parameterIndex is not valid;
    542      * if a database access error occurs or
    543      * this method is called on a closed <code>CallableStatement</code>
    544      * @see #setTime
    545      * @since 1.2
    546      */
    547     java.sql.Time getTime(int parameterIndex, Calendar cal)
    548         throws SQLException;
    549 
    550     /**
    551      * Retrieves the value of the designated JDBC <code>TIMESTAMP</code> parameter as a
    552      * <code>java.sql.Timestamp</code> object, using
    553      * the given <code>Calendar</code> object to construct
    554      * the <code>Timestamp</code> object.
    555      * With a <code>Calendar</code> object, the driver
    556      * can calculate the timestamp taking into account a custom timezone and locale.
    557      * If no <code>Calendar</code> object is specified, the driver uses the
    558      * default timezone and locale.
    559      *
    560      *
    561      * @param parameterIndex the first parameter is 1, the second is 2,
    562      * and so on
    563      * @param cal the <code>Calendar</code> object the driver will use
    564      *            to construct the timestamp
    565      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
    566      *         is <code>null</code>.
    567      * @exception SQLException if the parameterIndex is not valid;
    568      * if a database access error occurs or
    569      * this method is called on a closed <code>CallableStatement</code>
    570      * @see #setTimestamp
    571      * @since 1.2
    572      */
    573     java.sql.Timestamp getTimestamp(int parameterIndex, Calendar cal)
    574         throws SQLException;
    575 
    576 
    577     /**
    578      * Registers the designated output parameter.
    579      * This version of
    580      * the method <code>registerOutParameter</code>
    581      * should be used for a user-defined or <code>REF</code> output parameter.  Examples
    582      * of user-defined types include: <code>STRUCT</code>, <code>DISTINCT</code>,
    583      * <code>JAVA_OBJECT</code>, and named array types.
    584      *<p>
    585      * All OUT parameters must be registered
    586      * before a stored procedure is executed.
    587      * <p>  For a user-defined parameter, the fully-qualified SQL
    588      * type name of the parameter should also be given, while a <code>REF</code>
    589      * parameter requires that the fully-qualified type name of the
    590      * referenced type be given.  A JDBC driver that does not need the
    591      * type code and type name information may ignore it.   To be portable,
    592      * however, applications should always provide these values for
    593      * user-defined and <code>REF</code> parameters.
    594      *
    595      * Although it is intended for user-defined and <code>REF</code> parameters,
    596      * this method may be used to register a parameter of any JDBC type.
    597      * If the parameter does not have a user-defined or <code>REF</code> type, the
    598      * <i>typeName</i> parameter is ignored.
    599      *
    600      * <P><B>Note:</B> When reading the value of an out parameter, you
    601      * must use the getter method whose Java type corresponds to the
    602      * parameter's registered SQL type.
    603      *
    604      * @param parameterIndex the first parameter is 1, the second is 2,...
    605      * @param sqlType a value from {@link java.sql.Types}
    606      * @param typeName the fully-qualified name of an SQL structured type
    607      * @exception SQLException if the parameterIndex is not valid;
    608      * if a database access error occurs or
    609      * this method is called on a closed <code>CallableStatement</code>
    610      * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
    611      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
    612      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
    613      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
    614      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
    615      * or  <code>STRUCT</code> data type and the JDBC driver does not support
    616      * this data type
    617      * @see Types
    618      * @since 1.2
    619      */
    620     void registerOutParameter (int parameterIndex, int sqlType, String typeName)
    621         throws SQLException;
    622 
    623   //--------------------------JDBC 3.0-----------------------------
    624 
    625     /**
    626      * Registers the OUT parameter named
    627      * <code>parameterName</code> to the JDBC type
    628      * <code>sqlType</code>.  All OUT parameters must be registered
    629      * before a stored procedure is executed.
    630      * <p>
    631      * The JDBC type specified by <code>sqlType</code> for an OUT
    632      * parameter determines the Java type that must be used
    633      * in the <code>get</code> method to read the value of that parameter.
    634      * <p>
    635      * If the JDBC type expected to be returned to this output parameter
    636      * is specific to this particular database, <code>sqlType</code>
    637      * should be <code>java.sql.Types.OTHER</code>.  The method
    638      * {@link #getObject} retrieves the value.
    639      * @param parameterName the name of the parameter
    640      * @param sqlType the JDBC type code defined by <code>java.sql.Types</code>.
    641      * If the parameter is of JDBC type <code>NUMERIC</code>
    642      * or <code>DECIMAL</code>, the version of
    643      * <code>registerOutParameter</code> that accepts a scale value
    644      * should be used.
    645      * @exception SQLException if parameterName does not correspond to a named
    646      * parameter; if a database access error occurs or
    647      * this method is called on a closed <code>CallableStatement</code>
    648      * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
    649      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
    650      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
    651      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
    652      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
    653      * or  <code>STRUCT</code> data type and the JDBC driver does not support
    654      * this data type or if the JDBC driver does not support
    655      * this method
    656      * @since 1.4
    657      * @see Types
    658      */
    659     void registerOutParameter(String parameterName, int sqlType)
    660         throws SQLException;
    661 
    662     /**
    663      * Registers the parameter named
    664      * <code>parameterName</code> to be of JDBC type
    665      * <code>sqlType</code>.  All OUT parameters must be registered
    666      * before a stored procedure is executed.
    667      * <p>
    668      * The JDBC type specified by <code>sqlType</code> for an OUT
    669      * parameter determines the Java type that must be used
    670      * in the <code>get</code> method to read the value of that parameter.
    671      * <p>
    672      * This version of <code>registerOutParameter</code> should be
    673      * used when the parameter is of JDBC type <code>NUMERIC</code>
    674      * or <code>DECIMAL</code>.
    675      *
    676      * @param parameterName the name of the parameter
    677      * @param sqlType SQL type code defined by <code>java.sql.Types</code>.
    678      * @param scale the desired number of digits to the right of the
    679      * decimal point.  It must be greater than or equal to zero.
    680      * @exception SQLException if parameterName does not correspond to a named
    681      * parameter; if a database access error occurs or
    682      * this method is called on a closed <code>CallableStatement</code>
    683      * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
    684      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
    685      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
    686      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
    687      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
    688      * or  <code>STRUCT</code> data type and the JDBC driver does not support
    689      * this data type or if the JDBC driver does not support
    690      * this method
    691      * @since 1.4
    692      * @see Types
    693      */
    694     void registerOutParameter(String parameterName, int sqlType, int scale)
    695         throws SQLException;
    696 
    697     /**
    698      * Registers the designated output parameter.  This version of
    699      * the method <code>registerOutParameter</code>
    700      * should be used for a user-named or REF output parameter.  Examples
    701      * of user-named types include: STRUCT, DISTINCT, JAVA_OBJECT, and
    702      * named array types.
    703      *<p>
    704      * All OUT parameters must be registered
    705      * before a stored procedure is executed.
    706      * <p>
    707      * For a user-named parameter the fully-qualified SQL
    708      * type name of the parameter should also be given, while a REF
    709      * parameter requires that the fully-qualified type name of the
    710      * referenced type be given.  A JDBC driver that does not need the
    711      * type code and type name information may ignore it.   To be portable,
    712      * however, applications should always provide these values for
    713      * user-named and REF parameters.
    714      *
    715      * Although it is intended for user-named and REF parameters,
    716      * this method may be used to register a parameter of any JDBC type.
    717      * If the parameter does not have a user-named or REF type, the
    718      * typeName parameter is ignored.
    719      *
    720      * <P><B>Note:</B> When reading the value of an out parameter, you
    721      * must use the <code>getXXX</code> method whose Java type XXX corresponds to the
    722      * parameter's registered SQL type.
    723      *
    724      * @param parameterName the name of the parameter
    725      * @param sqlType a value from {@link java.sql.Types}
    726      * @param typeName the fully-qualified name of an SQL structured type
    727      * @exception SQLException if parameterName does not correspond to a named
    728      * parameter; if a database access error occurs or
    729      * this method is called on a closed <code>CallableStatement</code>
    730      * @exception SQLFeatureNotSupportedException if <code>sqlType</code> is
    731      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
    732      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
    733      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
    734      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
    735      * or  <code>STRUCT</code> data type and the JDBC driver does not support
    736      * this data type or if the JDBC driver does not support
    737      * this method
    738      * @see Types
    739      * @since 1.4
    740      */
    741     void registerOutParameter (String parameterName, int sqlType, String typeName)
    742         throws SQLException;
    743 
    744     /**
    745      * Retrieves the value of the designated JDBC <code>DATALINK</code> parameter as a
    746      * <code>java.net.URL</code> object.
    747      *
    748      * @param parameterIndex the first parameter is 1, the second is 2,...
    749      * @return a <code>java.net.URL</code> object that represents the
    750      *         JDBC <code>DATALINK</code> value used as the designated
    751      *         parameter
    752      * @exception SQLException if the parameterIndex is not valid;
    753      * if a database access error occurs,
    754      * this method is called on a closed <code>CallableStatement</code>,
    755      *            or if the URL being returned is
    756      *            not a valid URL on the Java platform
    757      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    758      * this method
    759      * @see #setURL
    760      * @since 1.4
    761      */
    762     java.net.URL getURL(int parameterIndex) throws SQLException;
    763 
    764     /**
    765      * Sets the designated parameter to the given <code>java.net.URL</code> object.
    766      * The driver converts this to an SQL <code>DATALINK</code> value when
    767      * it sends it to the database.
    768      *
    769      * @param parameterName the name of the parameter
    770      * @param val the parameter value
    771      * @exception SQLException if parameterName does not correspond to a named
    772      * parameter; if a database access error occurs;
    773      * this method is called on a closed <code>CallableStatement</code>
    774      *            or if a URL is malformed
    775      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    776      * this method
    777      * @see #getURL
    778      * @since 1.4
    779      */
    780     void setURL(String parameterName, java.net.URL val) throws SQLException;
    781 
    782     /**
    783      * Sets the designated parameter to SQL <code>NULL</code>.
    784      *
    785      * <P><B>Note:</B> You must specify the parameter's SQL type.
    786      *
    787      * @param parameterName the name of the parameter
    788      * @param sqlType the SQL type code defined in <code>java.sql.Types</code>
    789      * @exception SQLException if parameterName does not correspond to a named
    790      * parameter; if a database access error occurs or
    791      * this method is called on a closed <code>CallableStatement</code>
    792      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    793      * this method
    794      * @since 1.4
    795      */
    796     void setNull(String parameterName, int sqlType) throws SQLException;
    797 
    798     /**
    799      * Sets the designated parameter to the given Java <code>boolean</code> value.
    800      * The driver converts this
    801      * to an SQL <code>BIT</code> or <code>BOOLEAN</code> value when it sends it to the database.
    802      *
    803      * @param parameterName the name of the parameter
    804      * @param x the parameter value
    805      * @exception SQLException if parameterName does not correspond to a named
    806      * parameter; if a database access error occurs or
    807      * this method is called on a closed <code>CallableStatement</code>
    808      * @see #getBoolean
    809      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    810      * this method
    811      * @since 1.4
    812      */
    813     void setBoolean(String parameterName, boolean x) throws SQLException;
    814 
    815     /**
    816      * Sets the designated parameter to the given Java <code>byte</code> value.
    817      * The driver converts this
    818      * to an SQL <code>TINYINT</code> value when it sends it to the database.
    819      *
    820      * @param parameterName the name of the parameter
    821      * @param x the parameter value
    822      * @exception SQLException if parameterName does not correspond to a named
    823      * parameter; if a database access error occurs or
    824      * this method is called on a closed <code>CallableStatement</code>
    825      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    826      * this method
    827      * @see #getByte
    828      * @since 1.4
    829      */
    830     void setByte(String parameterName, byte x) throws SQLException;
    831 
    832     /**
    833      * Sets the designated parameter to the given Java <code>short</code> value.
    834      * The driver converts this
    835      * to an SQL <code>SMALLINT</code> value when it sends it to the database.
    836      *
    837      * @param parameterName the name of the parameter
    838      * @param x the parameter value
    839      * @exception SQLException if parameterName does not correspond to a named
    840      * parameter; if a database access error occurs or
    841      * this method is called on a closed <code>CallableStatement</code>
    842      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    843      * this method
    844      * @see #getShort
    845      * @since 1.4
    846      */
    847     void setShort(String parameterName, short x) throws SQLException;
    848 
    849     /**
    850      * Sets the designated parameter to the given Java <code>int</code> value.
    851      * The driver converts this
    852      * to an SQL <code>INTEGER</code> value when it sends it to the database.
    853      *
    854      * @param parameterName the name of the parameter
    855      * @param x the parameter value
    856      * @exception SQLException if parameterName does not correspond to a named
    857      * parameter; if a database access error occurs or
    858      * this method is called on a closed <code>CallableStatement</code>
    859      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    860      * this method
    861      * @see #getInt
    862      * @since 1.4
    863      */
    864     void setInt(String parameterName, int x) throws SQLException;
    865 
    866     /**
    867      * Sets the designated parameter to the given Java <code>long</code> value.
    868      * The driver converts this
    869      * to an SQL <code>BIGINT</code> value when it sends it to the database.
    870      *
    871      * @param parameterName the name of the parameter
    872      * @param x the parameter value
    873      * @exception SQLException if parameterName does not correspond to a named
    874      * parameter; if a database access error occurs or
    875      * this method is called on a closed <code>CallableStatement</code>
    876      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    877      * this method
    878      * @see #getLong
    879      * @since 1.4
    880      */
    881     void setLong(String parameterName, long x) throws SQLException;
    882 
    883     /**
    884      * Sets the designated parameter to the given Java <code>float</code> value.
    885      * The driver converts this
    886      * to an SQL <code>FLOAT</code> value when it sends it to the database.
    887      *
    888      * @param parameterName the name of the parameter
    889      * @param x the parameter value
    890      * @exception SQLException if parameterName does not correspond to a named
    891      * parameter; if a database access error occurs or
    892      * this method is called on a closed <code>CallableStatement</code>
    893      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    894      * this method
    895      * @see #getFloat
    896      * @since 1.4
    897      */
    898     void setFloat(String parameterName, float x) throws SQLException;
    899 
    900     /**
    901      * Sets the designated parameter to the given Java <code>double</code> value.
    902      * The driver converts this
    903      * to an SQL <code>DOUBLE</code> value when it sends it to the database.
    904      *
    905      * @param parameterName the name of the parameter
    906      * @param x the parameter value
    907      * @exception SQLException if parameterName does not correspond to a named
    908      * parameter; if a database access error occurs or
    909      * this method is called on a closed <code>CallableStatement</code>
    910      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    911      * this method
    912      * @see #getDouble
    913      * @since 1.4
    914      */
    915     void setDouble(String parameterName, double x) throws SQLException;
    916 
    917     /**
    918      * Sets the designated parameter to the given
    919      * <code>java.math.BigDecimal</code> value.
    920      * The driver converts this to an SQL <code>NUMERIC</code> value when
    921      * it sends it to the database.
    922      *
    923      * @param parameterName the name of the parameter
    924      * @param x the parameter value
    925      * @exception SQLException if parameterName does not correspond to a named
    926      * parameter; if a database access error occurs or
    927      * this method is called on a closed <code>CallableStatement</code>
    928      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    929      * this method
    930      * @see #getBigDecimal
    931      * @since 1.4
    932      */
    933     void setBigDecimal(String parameterName, BigDecimal x) throws SQLException;
    934 
    935     /**
    936      * Sets the designated parameter to the given Java <code>String</code> value.
    937      * The driver converts this
    938      * to an SQL <code>VARCHAR</code> or <code>LONGVARCHAR</code> value
    939      * (depending on the argument's
    940      * size relative to the driver's limits on <code>VARCHAR</code> values)
    941      * when it sends it to the database.
    942      *
    943      * @param parameterName the name of the parameter
    944      * @param x the parameter value
    945      * @exception SQLException if parameterName does not correspond to a named
    946      * parameter; if a database access error occurs or
    947      * this method is called on a closed <code>CallableStatement</code>
    948      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    949      * this method
    950      * @see #getString
    951      * @since 1.4
    952      */
    953     void setString(String parameterName, String x) throws SQLException;
    954 
    955     /**
    956      * Sets the designated parameter to the given Java array of bytes.
    957      * The driver converts this to an SQL <code>VARBINARY</code> or
    958      * <code>LONGVARBINARY</code> (depending on the argument's size relative
    959      * to the driver's limits on <code>VARBINARY</code> values) when it sends
    960      * it to the database.
    961      *
    962      * @param parameterName the name of the parameter
    963      * @param x the parameter value
    964      * @exception SQLException if parameterName does not correspond to a named
    965      * parameter; if a database access error occurs or
    966      * this method is called on a closed <code>CallableStatement</code>
    967      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    968      * this method
    969      * @see #getBytes
    970      * @since 1.4
    971      */
    972     void setBytes(String parameterName, byte x[]) throws SQLException;
    973 
    974     /**
    975      * Sets the designated parameter to the given <code>java.sql.Date</code> value
    976      * using the default time zone of the virtual machine that is running
    977      * the application.
    978      * The driver converts this
    979      * to an SQL <code>DATE</code> value when it sends it to the database.
    980      *
    981      * @param parameterName the name of the parameter
    982      * @param x the parameter value
    983      * @exception SQLException if parameterName does not correspond to a named
    984      * parameter; if a database access error occurs or
    985      * this method is called on a closed <code>CallableStatement</code>
    986      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
    987      * this method
    988      * @see #getDate
    989      * @since 1.4
    990      */
    991     void setDate(String parameterName, java.sql.Date x)
    992         throws SQLException;
    993 
    994     /**
    995      * Sets the designated parameter to the given <code>java.sql.Time</code> value.
    996      * The driver converts this
    997      * to an SQL <code>TIME</code> value when it sends it to the database.
    998      *
    999      * @param parameterName the name of the parameter
   1000      * @param x the parameter value
   1001      * @exception SQLException if parameterName does not correspond to a named
   1002      * parameter; if a database access error occurs or
   1003      * this method is called on a closed <code>CallableStatement</code>
   1004      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1005      * this method
   1006      * @see #getTime
   1007      * @since 1.4
   1008      */
   1009     void setTime(String parameterName, java.sql.Time x)
   1010         throws SQLException;
   1011 
   1012     /**
   1013      * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value.
   1014      * The driver
   1015      * converts this to an SQL <code>TIMESTAMP</code> value when it sends it to the
   1016      * database.
   1017      *
   1018      * @param parameterName the name of the parameter
   1019      * @param x the parameter value
   1020      * @exception SQLException if parameterName does not correspond to a named
   1021      * parameter; if a database access error occurs or
   1022      * this method is called on a closed <code>CallableStatement</code>
   1023      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1024      * this method
   1025      * @see #getTimestamp
   1026      * @since 1.4
   1027      */
   1028     void setTimestamp(String parameterName, java.sql.Timestamp x)
   1029         throws SQLException;
   1030 
   1031     /**
   1032      * Sets the designated parameter to the given input stream, which will have
   1033      * the specified number of bytes.
   1034      * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
   1035      * parameter, it may be more practical to send it via a
   1036      * <code>java.io.InputStream</code>. Data will be read from the stream
   1037      * as needed until end-of-file is reached.  The JDBC driver will
   1038      * do any necessary conversion from ASCII to the database char format.
   1039      *
   1040      * <P><B>Note:</B> This stream object can either be a standard
   1041      * Java stream object or your own subclass that implements the
   1042      * standard interface.
   1043      *
   1044      * @param parameterName the name of the parameter
   1045      * @param x the Java input stream that contains the ASCII parameter value
   1046      * @param length the number of bytes in the stream
   1047      * @exception SQLException if parameterName does not correspond to a named
   1048      * parameter; if a database access error occurs or
   1049      * this method is called on a closed <code>CallableStatement</code>
   1050      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1051      * this method
   1052      * @since 1.4
   1053      */
   1054     void setAsciiStream(String parameterName, java.io.InputStream x, int length)
   1055         throws SQLException;
   1056 
   1057     /**
   1058      * Sets the designated parameter to the given input stream, which will have
   1059      * the specified number of bytes.
   1060      * When a very large binary value is input to a <code>LONGVARBINARY</code>
   1061      * parameter, it may be more practical to send it via a
   1062      * <code>java.io.InputStream</code> object. The data will be read from the stream
   1063      * as needed until end-of-file is reached.
   1064      *
   1065      * <P><B>Note:</B> This stream object can either be a standard
   1066      * Java stream object or your own subclass that implements the
   1067      * standard interface.
   1068      *
   1069      * @param parameterName the name of the parameter
   1070      * @param x the java input stream which contains the binary parameter value
   1071      * @param length the number of bytes in the stream
   1072      * @exception SQLException if parameterName does not correspond to a named
   1073      * parameter; if a database access error occurs or
   1074      * this method is called on a closed <code>CallableStatement</code>
   1075      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1076      * this method
   1077      * @since 1.4
   1078      */
   1079     void setBinaryStream(String parameterName, java.io.InputStream x,
   1080                          int length) throws SQLException;
   1081 
   1082     /**
   1083      * Sets the value of the designated parameter with the given object. The second
   1084      * argument must be an object type; for integral values, the
   1085      * <code>java.lang</code> equivalent objects should be used.
   1086      *
   1087      * <p>The given Java object will be converted to the given targetSqlType
   1088      * before being sent to the database.
   1089      *
   1090      * If the object has a custom mapping (is of a class implementing the
   1091      * interface <code>SQLData</code>),
   1092      * the JDBC driver should call the method <code>SQLData.writeSQL</code> to write it
   1093      * to the SQL data stream.
   1094      * If, on the other hand, the object is of a class implementing
   1095      * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
   1096      *  <code>Struct</code>, <code>java.net.URL</code>,
   1097      * or <code>Array</code>, the driver should pass it to the database as a
   1098      * value of the corresponding SQL type.
   1099      * <P>
   1100      * Note that this method may be used to pass datatabase-
   1101      * specific abstract data types.
   1102      *
   1103      * @param parameterName the name of the parameter
   1104      * @param x the object containing the input parameter value
   1105      * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
   1106      * sent to the database. The scale argument may further qualify this type.
   1107      * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types,
   1108      *          this is the number of digits after the decimal point.  For all other
   1109      *          types, this value will be ignored.
   1110      * @exception SQLException if parameterName does not correspond to a named
   1111      * parameter; if a database access error occurs or
   1112      * this method is called on a closed <code>CallableStatement</code>
   1113      * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
   1114      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
   1115      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
   1116      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
   1117      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
   1118      * or  <code>STRUCT</code> data type and the JDBC driver does not support
   1119      * this data type
   1120      * @see Types
   1121      * @see #getObject
   1122      * @since 1.4
   1123      */
   1124     void setObject(String parameterName, Object x, int targetSqlType, int scale)
   1125         throws SQLException;
   1126 
   1127     /**
   1128      * Sets the value of the designated parameter with the given object.
   1129      * This method is like the method <code>setObject</code>
   1130      * above, except that it assumes a scale of zero.
   1131      *
   1132      * @param parameterName the name of the parameter
   1133      * @param x the object containing the input parameter value
   1134      * @param targetSqlType the SQL type (as defined in java.sql.Types) to be
   1135      *                      sent to the database
   1136      * @exception SQLException if parameterName does not correspond to a named
   1137      * parameter; if a database access error occurs or
   1138      * this method is called on a closed <code>CallableStatement</code>
   1139      * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is
   1140      * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,
   1141      * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>,
   1142      * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>,
   1143      *  <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>
   1144      * or  <code>STRUCT</code> data type and the JDBC driver does not support
   1145      * this data type
   1146      * @see #getObject
   1147      * @since 1.4
   1148      */
   1149     void setObject(String parameterName, Object x, int targetSqlType)
   1150         throws SQLException;
   1151 
   1152     /**
   1153      * Sets the value of the designated parameter with the given object.
   1154      * The second parameter must be of type <code>Object</code>; therefore, the
   1155      * <code>java.lang</code> equivalent objects should be used for built-in types.
   1156      *
   1157      * <p>The JDBC specification specifies a standard mapping from
   1158      * Java <code>Object</code> types to SQL types.  The given argument
   1159      * will be converted to the corresponding SQL type before being
   1160      * sent to the database.
   1161      * <p>Note that this method may be used to pass datatabase-
   1162      * specific abstract data types, by using a driver-specific Java
   1163      * type.
   1164      *
   1165      * If the object is of a class implementing the interface <code>SQLData</code>,
   1166      * the JDBC driver should call the method <code>SQLData.writeSQL</code>
   1167      * to write it to the SQL data stream.
   1168      * If, on the other hand, the object is of a class implementing
   1169      * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>,  <code>NClob</code>,
   1170      *  <code>Struct</code>, <code>java.net.URL</code>,
   1171      * or <code>Array</code>, the driver should pass it to the database as a
   1172      * value of the corresponding SQL type.
   1173      * <P>
   1174      * This method throws an exception if there is an ambiguity, for example, if the
   1175      * object is of a class implementing more than one of the interfaces named above.
   1176      *<p>
   1177      *<b>Note:</b> Not all databases allow for a non-typed Null to be sent to
   1178      * the backend. For maximum portability, the <code>setNull</code> or the
   1179      * <code>setObject(String parameterName, Object x, int sqlType)</code>
   1180      * method should be used
   1181      * instead of <code>setObject(String parameterName, Object x)</code>.
   1182      *<p>
   1183      * @param parameterName the name of the parameter
   1184      * @param x the object containing the input parameter value
   1185      * @exception SQLException if parameterName does not correspond to a named
   1186      * parameter; if a database access error occurs,
   1187      * this method is called on a closed <code>CallableStatement</code> or if the given
   1188      *            <code>Object</code> parameter is ambiguous
   1189      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1190      * this method
   1191      * @see #getObject
   1192      * @since 1.4
   1193      */
   1194     void setObject(String parameterName, Object x) throws SQLException;
   1195 
   1196 
   1197     /**
   1198      * Sets the designated parameter to the given <code>Reader</code>
   1199      * object, which is the given number of characters long.
   1200      * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
   1201      * parameter, it may be more practical to send it via a
   1202      * <code>java.io.Reader</code> object. The data will be read from the stream
   1203      * as needed until end-of-file is reached.  The JDBC driver will
   1204      * do any necessary conversion from UNICODE to the database char format.
   1205      *
   1206      * <P><B>Note:</B> This stream object can either be a standard
   1207      * Java stream object or your own subclass that implements the
   1208      * standard interface.
   1209      *
   1210      * @param parameterName the name of the parameter
   1211      * @param reader the <code>java.io.Reader</code> object that
   1212      *        contains the UNICODE data used as the designated parameter
   1213      * @param length the number of characters in the stream
   1214      * @exception SQLException if parameterName does not correspond to a named
   1215      * parameter; if a database access error occurs or
   1216      * this method is called on a closed <code>CallableStatement</code>
   1217      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1218      * this method
   1219      * @since 1.4
   1220      */
   1221     void setCharacterStream(String parameterName,
   1222                             java.io.Reader reader,
   1223                             int length) throws SQLException;
   1224 
   1225     /**
   1226      * Sets the designated parameter to the given <code>java.sql.Date</code> value,
   1227      * using the given <code>Calendar</code> object.  The driver uses
   1228      * the <code>Calendar</code> object to construct an SQL <code>DATE</code> value,
   1229      * which the driver then sends to the database.  With a
   1230      * a <code>Calendar</code> object, the driver can calculate the date
   1231      * taking into account a custom timezone.  If no
   1232      * <code>Calendar</code> object is specified, the driver uses the default
   1233      * timezone, which is that of the virtual machine running the application.
   1234      *
   1235      * @param parameterName the name of the parameter
   1236      * @param x the parameter value
   1237      * @param cal the <code>Calendar</code> object the driver will use
   1238      *            to construct the date
   1239      * @exception SQLException if parameterName does not correspond to a named
   1240      * parameter; if a database access error occurs or
   1241      * this method is called on a closed <code>CallableStatement</code>
   1242      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1243      * this method
   1244      * @see #getDate
   1245      * @since 1.4
   1246      */
   1247     void setDate(String parameterName, java.sql.Date x, Calendar cal)
   1248         throws SQLException;
   1249 
   1250     /**
   1251      * Sets the designated parameter to the given <code>java.sql.Time</code> value,
   1252      * using the given <code>Calendar</code> object.  The driver uses
   1253      * the <code>Calendar</code> object to construct an SQL <code>TIME</code> value,
   1254      * which the driver then sends to the database.  With a
   1255      * a <code>Calendar</code> object, the driver can calculate the time
   1256      * taking into account a custom timezone.  If no
   1257      * <code>Calendar</code> object is specified, the driver uses the default
   1258      * timezone, which is that of the virtual machine running the application.
   1259      *
   1260      * @param parameterName the name of the parameter
   1261      * @param x the parameter value
   1262      * @param cal the <code>Calendar</code> object the driver will use
   1263      *            to construct the time
   1264      * @exception SQLException if parameterName does not correspond to a named
   1265      * parameter; if a database access error occurs or
   1266      * this method is called on a closed <code>CallableStatement</code>
   1267      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1268      * this method
   1269      * @see #getTime
   1270      * @since 1.4
   1271      */
   1272     void setTime(String parameterName, java.sql.Time x, Calendar cal)
   1273         throws SQLException;
   1274 
   1275     /**
   1276      * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value,
   1277      * using the given <code>Calendar</code> object.  The driver uses
   1278      * the <code>Calendar</code> object to construct an SQL <code>TIMESTAMP</code> value,
   1279      * which the driver then sends to the database.  With a
   1280      * a <code>Calendar</code> object, the driver can calculate the timestamp
   1281      * taking into account a custom timezone.  If no
   1282      * <code>Calendar</code> object is specified, the driver uses the default
   1283      * timezone, which is that of the virtual machine running the application.
   1284      *
   1285      * @param parameterName the name of the parameter
   1286      * @param x the parameter value
   1287      * @param cal the <code>Calendar</code> object the driver will use
   1288      *            to construct the timestamp
   1289      * @exception SQLException if parameterName does not correspond to a named
   1290      * parameter; if a database access error occurs or
   1291      * this method is called on a closed <code>CallableStatement</code>
   1292      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1293      * this method
   1294      * @see #getTimestamp
   1295      * @since 1.4
   1296      */
   1297     void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal)
   1298         throws SQLException;
   1299 
   1300     /**
   1301      * Sets the designated parameter to SQL <code>NULL</code>.
   1302      * This version of the method <code>setNull</code> should
   1303      * be used for user-defined types and REF type parameters.  Examples
   1304      * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and
   1305      * named array types.
   1306      *
   1307      * <P><B>Note:</B> To be portable, applications must give the
   1308      * SQL type code and the fully-qualified SQL type name when specifying
   1309      * a NULL user-defined or REF parameter.  In the case of a user-defined type
   1310      * the name is the type name of the parameter itself.  For a REF
   1311      * parameter, the name is the type name of the referenced type.
   1312      * <p>
   1313      * Although it is intended for user-defined and Ref parameters,
   1314      * this method may be used to set a null parameter of any JDBC type.
   1315      * If the parameter does not have a user-defined or REF type, the given
   1316      * typeName is ignored.
   1317      *
   1318      *
   1319      * @param parameterName the name of the parameter
   1320      * @param sqlType a value from <code>java.sql.Types</code>
   1321      * @param typeName the fully-qualified name of an SQL user-defined type;
   1322      *        ignored if the parameter is not a user-defined type or
   1323      *        SQL <code>REF</code> value
   1324      * @exception SQLException if parameterName does not correspond to a named
   1325      * parameter; if a database access error occurs or
   1326      * this method is called on a closed <code>CallableStatement</code>
   1327      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1328      * this method
   1329      * @since 1.4
   1330      */
   1331     void setNull (String parameterName, int sqlType, String typeName)
   1332         throws SQLException;
   1333 
   1334     /**
   1335      * Retrieves the value of a JDBC <code>CHAR</code>, <code>VARCHAR</code>,
   1336      * or <code>LONGVARCHAR</code> parameter as a <code>String</code> in
   1337      * the Java programming language.
   1338      * <p>
   1339      * For the fixed-length type JDBC <code>CHAR</code>,
   1340      * the <code>String</code> object
   1341      * returned has exactly the same value the SQL
   1342      * <code>CHAR</code> value had in the
   1343      * database, including any padding added by the database.
   1344      * @param parameterName the name of the parameter
   1345      * @return the parameter value. If the value is SQL <code>NULL</code>, the result
   1346      * is <code>null</code>.
   1347      * @exception SQLException if parameterName does not correspond to a named
   1348      * parameter; if a database access error occurs or
   1349      * this method is called on a closed <code>CallableStatement</code>
   1350      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1351      * this method
   1352      * @see #setString
   1353      * @since 1.4
   1354      */
   1355     String getString(String parameterName) throws SQLException;
   1356 
   1357     /**
   1358      * Retrieves the value of a JDBC <code>BIT</code> or <code>BOOLEAN</code>
   1359      * parameter as a
   1360      * <code>boolean</code> in the Java programming language.
   1361      * @param parameterName the name of the parameter
   1362      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
   1363      * is <code>false</code>.
   1364      * @exception SQLException if parameterName does not correspond to a named
   1365      * parameter; if a database access error occurs or
   1366      * this method is called on a closed <code>CallableStatement</code>
   1367      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1368      * this method
   1369      * @see #setBoolean
   1370      * @since 1.4
   1371      */
   1372     boolean getBoolean(String parameterName) throws SQLException;
   1373 
   1374     /**
   1375      * Retrieves the value of a JDBC <code>TINYINT</code> parameter as a <code>byte</code>
   1376      * in the Java programming language.
   1377      * @param parameterName the name of the parameter
   1378      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
   1379      * is <code>0</code>.
   1380      * @exception SQLException if parameterName does not correspond to a named
   1381      * parameter; if a database access error occurs or
   1382      * this method is called on a closed <code>CallableStatement</code>
   1383      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1384      * this method
   1385      * @see #setByte
   1386      * @since 1.4
   1387      */
   1388     byte getByte(String parameterName) throws SQLException;
   1389 
   1390     /**
   1391      * Retrieves the value of a JDBC <code>SMALLINT</code> parameter as a <code>short</code>
   1392      * in the Java programming language.
   1393      * @param parameterName the name of the parameter
   1394      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
   1395      * is <code>0</code>.
   1396      * @exception SQLException if parameterName does not correspond to a named
   1397      * parameter; if a database access error occurs or
   1398      * this method is called on a closed <code>CallableStatement</code>
   1399      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1400      * this method
   1401      * @see #setShort
   1402      * @since 1.4
   1403      */
   1404     short getShort(String parameterName) throws SQLException;
   1405 
   1406     /**
   1407      * Retrieves the value of a JDBC <code>INTEGER</code> parameter as an <code>int</code>
   1408      * in the Java programming language.
   1409      *
   1410      * @param parameterName the name of the parameter
   1411      * @return the parameter value.  If the value is SQL <code>NULL</code>,
   1412      *         the result is <code>0</code>.
   1413      * @exception SQLException if parameterName does not correspond to a named
   1414      * parameter; if a database access error occurs or
   1415      * this method is called on a closed <code>CallableStatement</code>
   1416      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1417      * this method
   1418      * @see #setInt
   1419      * @since 1.4
   1420      */
   1421     int getInt(String parameterName) throws SQLException;
   1422 
   1423     /**
   1424      * Retrieves the value of a JDBC <code>BIGINT</code> parameter as a <code>long</code>
   1425      * in the Java programming language.
   1426      *
   1427      * @param parameterName the name of the parameter
   1428      * @return the parameter value.  If the value is SQL <code>NULL</code>,
   1429      *         the result is <code>0</code>.
   1430      * @exception SQLException if parameterName does not correspond to a named
   1431      * parameter; if a database access error occurs or
   1432      * this method is called on a closed <code>CallableStatement</code>
   1433      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1434      * this method
   1435      * @see #setLong
   1436      * @since 1.4
   1437      */
   1438     long getLong(String parameterName) throws SQLException;
   1439 
   1440     /**
   1441      * Retrieves the value of a JDBC <code>FLOAT</code> parameter as a <code>float</code>
   1442      * in the Java programming language.
   1443      * @param parameterName the name of the parameter
   1444      * @return the parameter value.  If the value is SQL <code>NULL</code>,
   1445      *         the result is <code>0</code>.
   1446      * @exception SQLException if parameterName does not correspond to a named
   1447      * parameter; if a database access error occurs or
   1448      * this method is called on a closed <code>CallableStatement</code>
   1449      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1450      * this method
   1451      * @see #setFloat
   1452      * @since 1.4
   1453      */
   1454     float getFloat(String parameterName) throws SQLException;
   1455 
   1456     /**
   1457      * Retrieves the value of a JDBC <code>DOUBLE</code> parameter as a <code>double</code>
   1458      * in the Java programming language.
   1459      * @param parameterName the name of the parameter
   1460      * @return the parameter value.  If the value is SQL <code>NULL</code>,
   1461      *         the result is <code>0</code>.
   1462      * @exception SQLException if parameterName does not correspond to a named
   1463      * parameter; if a database access error occurs or
   1464      * this method is called on a closed <code>CallableStatement</code>
   1465      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1466      * this method
   1467      * @see #setDouble
   1468      * @since 1.4
   1469      */
   1470     double getDouble(String parameterName) throws SQLException;
   1471 
   1472     /**
   1473      * Retrieves the value of a JDBC <code>BINARY</code> or <code>VARBINARY</code>
   1474      * parameter as an array of <code>byte</code> values in the Java
   1475      * programming language.
   1476      * @param parameterName the name of the parameter
   1477      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result is
   1478      *  <code>null</code>.
   1479      * @exception SQLException if parameterName does not correspond to a named
   1480      * parameter; if a database access error occurs or
   1481      * this method is called on a closed <code>CallableStatement</code>
   1482      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1483      * this method
   1484      * @see #setBytes
   1485      * @since 1.4
   1486      */
   1487     byte[] getBytes(String parameterName) throws SQLException;
   1488 
   1489     /**
   1490      * Retrieves the value of a JDBC <code>DATE</code> parameter as a
   1491      * <code>java.sql.Date</code> object.
   1492      * @param parameterName the name of the parameter
   1493      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
   1494      * is <code>null</code>.
   1495      * @exception SQLException if parameterName does not correspond to a named
   1496      * parameter; if a database access error occurs or
   1497      * this method is called on a closed <code>CallableStatement</code>
   1498      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1499      * this method
   1500      * @see #setDate
   1501      * @since 1.4
   1502      */
   1503     java.sql.Date getDate(String parameterName) throws SQLException;
   1504 
   1505     /**
   1506      * Retrieves the value of a JDBC <code>TIME</code> parameter as a
   1507      * <code>java.sql.Time</code> object.
   1508      * @param parameterName the name of the parameter
   1509      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
   1510      * is <code>null</code>.
   1511      * @exception SQLException if parameterName does not correspond to a named
   1512      * parameter; if a database access error occurs or
   1513      * this method is called on a closed <code>CallableStatement</code>
   1514      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1515      * this method
   1516      * @see #setTime
   1517      * @since 1.4
   1518      */
   1519     java.sql.Time getTime(String parameterName) throws SQLException;
   1520 
   1521     /**
   1522      * Retrieves the value of a JDBC <code>TIMESTAMP</code> parameter as a
   1523      * <code>java.sql.Timestamp</code> object.
   1524      * @param parameterName the name of the parameter
   1525      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result
   1526      * is <code>null</code>.
   1527      * @exception SQLException if parameterName does not correspond to a named
   1528      * parameter; if a database access error occurs or
   1529      * this method is called on a closed <code>CallableStatement</code>
   1530      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1531      * this method
   1532      * @see #setTimestamp
   1533      * @since 1.4
   1534      */
   1535     java.sql.Timestamp getTimestamp(String parameterName) throws SQLException;
   1536 
   1537     /**
   1538      * Retrieves the value of a parameter as an <code>Object</code> in the Java
   1539      * programming language. If the value is an SQL <code>NULL</code>, the
   1540      * driver returns a Java <code>null</code>.
   1541      * <p>
   1542      * This method returns a Java object whose type corresponds to the JDBC
   1543      * type that was registered for this parameter using the method
   1544      * <code>registerOutParameter</code>.  By registering the target JDBC
   1545      * type as <code>java.sql.Types.OTHER</code>, this method can be used
   1546      * to read database-specific abstract data types.
   1547      * @param parameterName the name of the parameter
   1548      * @return A <code>java.lang.Object</code> holding the OUT parameter value.
   1549      * @exception SQLException if parameterName does not correspond to a named
   1550      * parameter; if a database access error occurs or
   1551      * this method is called on a closed <code>CallableStatement</code>
   1552      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1553      * this method
   1554      * @see Types
   1555      * @see #setObject
   1556      * @since 1.4
   1557      */
   1558     Object getObject(String parameterName) throws SQLException;
   1559 
   1560     /**
   1561      * Retrieves the value of a JDBC <code>NUMERIC</code> parameter as a
   1562      * <code>java.math.BigDecimal</code> object with as many digits to the
   1563      * right of the decimal point as the value contains.
   1564      * @param parameterName the name of the parameter
   1565      * @return the parameter value in full precision.  If the value is
   1566      * SQL <code>NULL</code>, the result is <code>null</code>.
   1567      * @exception SQLExceptionif parameterName does not correspond to a named
   1568      * parameter;  if a database access error occurs or
   1569      * this method is called on a closed <code>CallableStatement</code>
   1570      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1571      * this method
   1572      * @see #setBigDecimal
   1573      * @since 1.4
   1574      */
   1575     BigDecimal getBigDecimal(String parameterName) throws SQLException;
   1576 
   1577     /**
   1578      * Returns an object representing the value of OUT parameter
   1579      * <code>parameterName</code> and uses <code>map</code> for the custom
   1580      * mapping of the parameter value.
   1581      * <p>
   1582      * This method returns a Java object whose type corresponds to the
   1583      * JDBC type that was registered for this parameter using the method
   1584      * <code>registerOutParameter</code>.  By registering the target
   1585      * JDBC type as <code>java.sql.Types.OTHER</code>, this method can
   1586      * be used to read database-specific abstract data types.
   1587      * @param parameterName the name of the parameter
   1588      * @param map the mapping from SQL type names to Java classes
   1589      * @return a <code>java.lang.Object</code> holding the OUT parameter value
   1590      * @exception SQLException if parameterName does not correspond to a named
   1591      * parameter; if a database access error occurs or
   1592      * this method is called on a closed <code>CallableStatement</code>
   1593      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1594      * this method
   1595      * @see #setObject
   1596      * @since 1.4
   1597      */
   1598     Object getObject(String parameterName, java.util.Map<String,Class<?>> map)
   1599       throws SQLException;
   1600 
   1601     /**
   1602      * Retrieves the value of a JDBC <code>REF(&lt;structured-type&gt;)</code>
   1603      * parameter as a {@link java.sql.Ref} object in the Java programming language.
   1604      *
   1605      * @param parameterName the name of the parameter
   1606      * @return the parameter value as a <code>Ref</code> object in the
   1607      *         Java programming language.  If the value was SQL <code>NULL</code>,
   1608      *         the value <code>null</code> is returned.
   1609      * @exception SQLException if parameterName does not correspond to a named
   1610      * parameter; if a database access error occurs or
   1611      * this method is called on a closed <code>CallableStatement</code>
   1612      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1613      * this method
   1614      * @since 1.4
   1615      */
   1616     Ref getRef (String parameterName) throws SQLException;
   1617 
   1618     /**
   1619      * Retrieves the value of a JDBC <code>BLOB</code> parameter as a
   1620      * {@link java.sql.Blob} object in the Java programming language.
   1621      *
   1622      * @param parameterName the name of the parameter
   1623      * @return the parameter value as a <code>Blob</code> object in the
   1624      *         Java programming language.  If the value was SQL <code>NULL</code>,
   1625      *         the value <code>null</code> is returned.
   1626      * @exception SQLException if parameterName does not correspond to a named
   1627      * parameter; if a database access error occurs or
   1628      * this method is called on a closed <code>CallableStatement</code>
   1629      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1630      * this method
   1631      * @since 1.4
   1632      */
   1633     Blob getBlob (String parameterName) throws SQLException;
   1634 
   1635     /**
   1636      * Retrieves the value of a JDBC <code>CLOB</code> parameter as a
   1637      * <code>java.sql.Clob</code> object in the Java programming language.
   1638      * @param parameterName the name of the parameter
   1639      * @return the parameter value as a <code>Clob</code> object in the
   1640      *         Java programming language.  If the value was SQL <code>NULL</code>,
   1641      *         the value <code>null</code> is returned.
   1642      * @exception SQLException if parameterName does not correspond to a named
   1643      * parameter; if a database access error occurs or
   1644      * this method is called on a closed <code>CallableStatement</code>
   1645      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1646      * this method
   1647      * @since 1.4
   1648      */
   1649     Clob getClob (String parameterName) throws SQLException;
   1650 
   1651     /**
   1652      * Retrieves the value of a JDBC <code>ARRAY</code> parameter as an
   1653      * {@link java.sql.Array} object in the Java programming language.
   1654      *
   1655      * @param parameterName the name of the parameter
   1656      * @return the parameter value as an <code>Array</code> object in
   1657      *         Java programming language.  If the value was SQL <code>NULL</code>,
   1658      *         the value <code>null</code> is returned.
   1659      * @exception SQLException if parameterName does not correspond to a named
   1660      * parameter; if a database access error occurs or
   1661      * this method is called on a closed <code>CallableStatement</code>
   1662      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1663      * this method
   1664      * @since 1.4
   1665      */
   1666     Array getArray (String parameterName) throws SQLException;
   1667 
   1668     /**
   1669      * Retrieves the value of a JDBC <code>DATE</code> parameter as a
   1670      * <code>java.sql.Date</code> object, using
   1671      * the given <code>Calendar</code> object
   1672      * to construct the date.
   1673      * With a <code>Calendar</code> object, the driver
   1674      * can calculate the date taking into account a custom timezone and locale.
   1675      * If no <code>Calendar</code> object is specified, the driver uses the
   1676      * default timezone and locale.
   1677      *
   1678      * @param parameterName the name of the parameter
   1679      * @param cal the <code>Calendar</code> object the driver will use
   1680      *            to construct the date
   1681      * @return the parameter value.  If the value is SQL <code>NULL</code>,
   1682      * the result is <code>null</code>.
   1683      * @exception SQLException if parameterName does not correspond to a named
   1684      * parameter; if a database access error occurs or
   1685      * this method is called on a closed <code>CallableStatement</code>
   1686      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1687      * this method
   1688      * @see #setDate
   1689      * @since 1.4
   1690      */
   1691     java.sql.Date getDate(String parameterName, Calendar cal)
   1692         throws SQLException;
   1693 
   1694     /**
   1695      * Retrieves the value of a JDBC <code>TIME</code> parameter as a
   1696      * <code>java.sql.Time</code> object, using
   1697      * the given <code>Calendar</code> object
   1698      * to construct the time.
   1699      * With a <code>Calendar</code> object, the driver
   1700      * can calculate the time taking into account a custom timezone and locale.
   1701      * If no <code>Calendar</code> object is specified, the driver uses the
   1702      * default timezone and locale.
   1703      *
   1704      * @param parameterName the name of the parameter
   1705      * @param cal the <code>Calendar</code> object the driver will use
   1706      *            to construct the time
   1707      * @return the parameter value; if the value is SQL <code>NULL</code>, the result is
   1708      * <code>null</code>.
   1709      * @exception SQLException if parameterName does not correspond to a named
   1710      * parameter; if a database access error occurs or
   1711      * this method is called on a closed <code>CallableStatement</code>
   1712      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1713      * this method
   1714      * @see #setTime
   1715      * @since 1.4
   1716      */
   1717     java.sql.Time getTime(String parameterName, Calendar cal)
   1718         throws SQLException;
   1719 
   1720     /**
   1721      * Retrieves the value of a JDBC <code>TIMESTAMP</code> parameter as a
   1722      * <code>java.sql.Timestamp</code> object, using
   1723      * the given <code>Calendar</code> object to construct
   1724      * the <code>Timestamp</code> object.
   1725      * With a <code>Calendar</code> object, the driver
   1726      * can calculate the timestamp taking into account a custom timezone and locale.
   1727      * If no <code>Calendar</code> object is specified, the driver uses the
   1728      * default timezone and locale.
   1729      *
   1730      *
   1731      * @param parameterName the name of the parameter
   1732      * @param cal the <code>Calendar</code> object the driver will use
   1733      *            to construct the timestamp
   1734      * @return the parameter value.  If the value is SQL <code>NULL</code>, the result is
   1735      * <code>null</code>.
   1736      * @exception SQLException if parameterName does not correspond to a named
   1737      * parameter; if a database access error occurs or
   1738      * this method is called on a closed <code>CallableStatement</code>
   1739      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1740      * this method
   1741      * @see #setTimestamp
   1742      * @since 1.4
   1743      */
   1744     java.sql.Timestamp getTimestamp(String parameterName, Calendar cal)
   1745         throws SQLException;
   1746 
   1747     /**
   1748      * Retrieves the value of a JDBC <code>DATALINK</code> parameter as a
   1749      * <code>java.net.URL</code> object.
   1750      *
   1751      * @param parameterName the name of the parameter
   1752      * @return the parameter value as a <code>java.net.URL</code> object in the
   1753      * Java programming language.  If the value was SQL <code>NULL</code>, the
   1754      * value <code>null</code> is returned.
   1755      * @exception SQLException if parameterName does not correspond to a named
   1756      * parameter; if a database access error occurs,
   1757      * this method is called on a closed <code>CallableStatement</code>,
   1758      *            or if there is a problem with the URL
   1759      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1760      * this method
   1761      * @see #setURL
   1762      * @since 1.4
   1763      */
   1764     java.net.URL getURL(String parameterName) throws SQLException;
   1765 
   1766     //------------------------- JDBC 4.0 -----------------------------------
   1767 
   1768     /**
   1769      * Retrieves the value of the designated JDBC <code>ROWID</code> parameter as a
   1770      * <code>java.sql.RowId</code> object.
   1771      *
   1772      * @param parameterIndex the first parameter is 1, the second is 2,...
   1773      * @return a <code>RowId</code> object that represents the JDBC <code>ROWID</code>
   1774      *     value is used as the designated parameter. If the parameter contains
   1775      * a SQL <code>NULL</code>, then a <code>null</code> value is returned.
   1776      * @throws SQLException if the parameterIndex is not valid;
   1777      * if a database access error occurs or
   1778      * this method is called on a closed <code>CallableStatement</code>
   1779      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1780      * this method
   1781      * @since 1.6
   1782      */
   1783     RowId getRowId(int parameterIndex) throws SQLException;
   1784 
   1785     /**
   1786      * Retrieves the value of the designated JDBC <code>ROWID</code> parameter as a
   1787      * <code>java.sql.RowId</code> object.
   1788      *
   1789      * @param parameterName the name of the parameter
   1790      * @return a <code>RowId</code> object that represents the JDBC <code>ROWID</code>
   1791      *     value is used as the designated parameter. If the parameter contains
   1792      * a SQL <code>NULL</code>, then a <code>null</code> value is returned.
   1793      * @throws SQLException if parameterName does not correspond to a named
   1794      * parameter; if a database access error occurs or
   1795      * this method is called on a closed <code>CallableStatement</code>
   1796      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1797      * this method
   1798      * @since 1.6
   1799      */
   1800     RowId getRowId(String parameterName) throws SQLException;
   1801 
   1802      /**
   1803      * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The
   1804      * driver converts this to a SQL <code>ROWID</code> when it sends it to the
   1805      * database.
   1806      *
   1807      * @param parameterName the name of the parameter
   1808      * @param x the parameter value
   1809      * @throws SQLException if parameterName does not correspond to a named
   1810      * parameter; if a database access error occurs or
   1811      * this method is called on a closed <code>CallableStatement</code>
   1812      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1813      * this method
   1814      * @since 1.6
   1815      */
   1816     void setRowId(String parameterName, RowId x) throws SQLException;
   1817 
   1818     /**
   1819      * Sets the designated parameter to the given <code>String</code> object.
   1820      * The driver converts this to a SQL <code>NCHAR</code> or
   1821      * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code>
   1822      * @param parameterName the name of the parameter to be set
   1823      * @param value the parameter value
   1824      * @throws SQLException if parameterName does not correspond to a named
   1825      * parameter; if the driver does not support national
   1826      *         character sets;  if the driver can detect that a data conversion
   1827      *  error could occur; if a database access error occurs or
   1828      * this method is called on a closed <code>CallableStatement</code>
   1829      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1830      * this method
   1831      * @since 1.6
   1832      */
   1833     void setNString(String parameterName, String value)
   1834             throws SQLException;
   1835 
   1836     /**
   1837      * Sets the designated parameter to a <code>Reader</code> object. The
   1838      * <code>Reader</code> reads the data till end-of-file is reached. The
   1839      * driver does the necessary conversion from Java character format to
   1840      * the national character set in the database.
   1841      * @param parameterName the name of the parameter to be set
   1842      * @param value the parameter value
   1843      * @param length the number of characters in the parameter data.
   1844      * @throws SQLException if parameterName does not correspond to a named
   1845      * parameter; if the driver does not support national
   1846      *         character sets;  if the driver can detect that a data conversion
   1847      *  error could occur; if a database access error occurs or
   1848      * this method is called on a closed <code>CallableStatement</code>
   1849      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1850      * this method
   1851      * @since 1.6
   1852      */
   1853     void setNCharacterStream(String parameterName, Reader value, long length)
   1854             throws SQLException;
   1855 
   1856      /**
   1857      * Sets the designated parameter to a <code>java.sql.NClob</code> object. The object
   1858      * implements the <code>java.sql.NClob</code> interface. This <code>NClob</code>
   1859      * object maps to a SQL <code>NCLOB</code>.
   1860      * @param parameterName the name of the parameter to be set
   1861      * @param value the parameter value
   1862      * @throws SQLException if parameterName does not correspond to a named
   1863      * parameter; if the driver does not support national
   1864      *         character sets;  if the driver can detect that a data conversion
   1865      *  error could occur; if a database access error occurs or
   1866      * this method is called on a closed <code>CallableStatement</code>
   1867      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1868      * this method
   1869      * @since 1.6
   1870      */
   1871      void setNClob(String parameterName, NClob value) throws SQLException;
   1872 
   1873     /**
   1874      * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
   1875      * of characters specified by length otherwise a <code>SQLException</code> will be
   1876      * generated when the <code>CallableStatement</code> is executed.
   1877      * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
   1878      * because it informs the driver that the parameter value should be sent to
   1879      * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
   1880      * driver may have to do extra work to determine whether the parameter
   1881      * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
   1882      * @param parameterName the name of the parameter to be set
   1883      * @param reader An object that contains the data to set the parameter value to.
   1884      * @param length the number of characters in the parameter data.
   1885      * @throws SQLException if parameterName does not correspond to a named
   1886      * parameter; if the length specified is less than zero;
   1887      * a database access error occurs or
   1888      * this method is called on a closed <code>CallableStatement</code>
   1889      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1890      * this method
   1891      *
   1892      * @since 1.6
   1893      */
   1894      void setClob(String parameterName, Reader reader, long length)
   1895        throws SQLException;
   1896 
   1897     /**
   1898      * Sets the designated parameter to a <code>InputStream</code> object.  The <code>inputstream</code> must contain  the number
   1899      * of characters specified by length, otherwise a <code>SQLException</code> will be
   1900      * generated when the <code>CallableStatement</code> is executed.
   1901      * This method differs from the <code>setBinaryStream (int, InputStream, int)</code>
   1902      * method because it informs the driver that the parameter value should be
   1903      * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
   1904      * the driver may have to do extra work to determine whether the parameter
   1905      * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
   1906      *
   1907      * @param parameterName the name of the parameter to be set
   1908      * the second is 2, ...
   1909      *
   1910      * @param inputStream An object that contains the data to set the parameter
   1911      * value to.
   1912      * @param length the number of bytes in the parameter data.
   1913      * @throws SQLException  if parameterName does not correspond to a named
   1914      * parameter; if the length specified
   1915      * is less than zero; if the number of bytes in the inputstream does not match
   1916      * the specfied length; if a database access error occurs or
   1917      * this method is called on a closed <code>CallableStatement</code>
   1918      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1919      * this method
   1920      *
   1921      * @since 1.6
   1922      */
   1923      void setBlob(String parameterName, InputStream inputStream, long length)
   1924         throws SQLException;
   1925     /**
   1926      * Sets the designated parameter to a <code>Reader</code> object.  The <code>reader</code> must contain  the number
   1927      * of characters specified by length otherwise a <code>SQLException</code> will be
   1928      * generated when the <code>CallableStatement</code> is executed.
   1929      * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method
   1930      * because it informs the driver that the parameter value should be sent to
   1931      * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
   1932      * driver may have to do extra work to determine whether the parameter
   1933      * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
   1934      *
   1935      * @param parameterName the name of the parameter to be set
   1936      * @param reader An object that contains the data to set the parameter value to.
   1937      * @param length the number of characters in the parameter data.
   1938      * @throws SQLException if parameterName does not correspond to a named
   1939      * parameter; if the length specified is less than zero;
   1940      * if the driver does not support national
   1941      *         character sets;  if the driver can detect that a data conversion
   1942      *  error could occur; if a database access error occurs or
   1943      * this method is called on a closed <code>CallableStatement</code>
   1944      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1945      * this method
   1946      * @since 1.6
   1947      */
   1948      void setNClob(String parameterName, Reader reader, long length)
   1949        throws SQLException;
   1950 
   1951     /**
   1952      * Retrieves the value of the designated JDBC <code>NCLOB</code> parameter as a
   1953      * <code>java.sql.NClob</code> object in the Java programming language.
   1954      *
   1955      * @param parameterIndex the first parameter is 1, the second is 2, and
   1956      * so on
   1957      * @return the parameter value as a <code>NClob</code> object in the
   1958      * Java programming language.  If the value was SQL <code>NULL</code>, the
   1959      * value <code>null</code> is returned.
   1960      * @exception SQLException if the parameterIndex is not valid;
   1961      * if the driver does not support national
   1962      *         character sets;  if the driver can detect that a data conversion
   1963      *  error could occur; if a database access error occurs or
   1964      * this method is called on a closed <code>CallableStatement</code>
   1965      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1966      * this method
   1967      * @since 1.6
   1968      */
   1969     NClob getNClob (int parameterIndex) throws SQLException;
   1970 
   1971 
   1972     /**
   1973      * Retrieves the value of a JDBC <code>NCLOB</code> parameter as a
   1974      * <code>java.sql.NClob</code> object in the Java programming language.
   1975      * @param parameterName the name of the parameter
   1976      * @return the parameter value as a <code>NClob</code> object in the
   1977      *         Java programming language.  If the value was SQL <code>NULL</code>,
   1978      *         the value <code>null</code> is returned.
   1979      * @exception SQLException if parameterName does not correspond to a named
   1980      * parameter; if the driver does not support national
   1981      *         character sets;  if the driver can detect that a data conversion
   1982      *  error could occur; if a database access error occurs or
   1983      * this method is called on a closed <code>CallableStatement</code>
   1984      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   1985      * this method
   1986      * @since 1.6
   1987      */
   1988     NClob getNClob (String parameterName) throws SQLException;
   1989 
   1990     /**
   1991      * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an
   1992      * <code>SQL XML</code> value when it sends it to the database.
   1993      *
   1994      * @param parameterName the name of the parameter
   1995      * @param xmlObject a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
   1996      * @throws SQLException if parameterName does not correspond to a named
   1997      * parameter; if a database access error occurs;
   1998      * this method is called on a closed <code>CallableStatement</code> or
   1999      * the <code>java.xml.transform.Result</code>,
   2000    *  <code>Writer</code> or <code>OutputStream</code> has not been closed for the <code>SQLXML</code> object
   2001      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2002      * this method
   2003      *
   2004      * @since 1.6
   2005      */
   2006     void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException;
   2007 
   2008     /**
   2009      * Retrieves the value of the designated <code>SQL XML</code> parameter as a
   2010      * <code>java.sql.SQLXML</code> object in the Java programming language.
   2011      * @param parameterIndex index of the first parameter is 1, the second is 2, ...
   2012      * @return a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
   2013      * @throws SQLException if the parameterIndex is not valid;
   2014      * if a database access error occurs or
   2015      * this method is called on a closed <code>CallableStatement</code>
   2016      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2017      * this method
   2018      * @since 1.6
   2019      */
   2020     SQLXML getSQLXML(int parameterIndex) throws SQLException;
   2021 
   2022     /**
   2023      * Retrieves the value of the designated <code>SQL XML</code> parameter as a
   2024      * <code>java.sql.SQLXML</code> object in the Java programming language.
   2025      * @param parameterName the name of the parameter
   2026      * @return a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
   2027      * @throws SQLException if parameterName does not correspond to a named
   2028      * parameter; if a database access error occurs or
   2029      * this method is called on a closed <code>CallableStatement</code>
   2030      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2031      * this method
   2032      * @since 1.6
   2033      */
   2034     SQLXML getSQLXML(String parameterName) throws SQLException;
   2035 
   2036     /**
   2037      * Retrieves the value of the designated <code>NCHAR</code>,
   2038      * <code>NVARCHAR</code>
   2039      * or <code>LONGNVARCHAR</code> parameter as
   2040      * a <code>String</code> in the Java programming language.
   2041      *  <p>
   2042      * For the fixed-length type JDBC <code>NCHAR</code>,
   2043      * the <code>String</code> object
   2044      * returned has exactly the same value the SQL
   2045      * <code>NCHAR</code> value had in the
   2046      * database, including any padding added by the database.
   2047      *
   2048      * @param parameterIndex index of the first parameter is 1, the second is 2, ...
   2049      * @return a <code>String</code> object that maps an
   2050      * <code>NCHAR</code>, <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
   2051      * @exception SQLException if the parameterIndex is not valid;
   2052      * if a database access error occurs or
   2053      * this method is called on a closed <code>CallableStatement</code>
   2054      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2055      * this method
   2056      * @since 1.6
   2057      * @see #setNString
   2058      */
   2059     String getNString(int parameterIndex) throws SQLException;
   2060 
   2061 
   2062     /**
   2063      *  Retrieves the value of the designated <code>NCHAR</code>,
   2064      * <code>NVARCHAR</code>
   2065      * or <code>LONGNVARCHAR</code> parameter as
   2066      * a <code>String</code> in the Java programming language.
   2067      * <p>
   2068      * For the fixed-length type JDBC <code>NCHAR</code>,
   2069      * the <code>String</code> object
   2070      * returned has exactly the same value the SQL
   2071      * <code>NCHAR</code> value had in the
   2072      * database, including any padding added by the database.
   2073      *
   2074      * @param parameterName the name of the parameter
   2075      * @return a <code>String</code> object that maps an
   2076      * <code>NCHAR</code>, <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value
   2077      * @exception SQLException if parameterName does not correspond to a named
   2078      * parameter;
   2079      * if a database access error occurs or
   2080      * this method is called on a closed <code>CallableStatement</code>
   2081      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2082      * this method
   2083      * @since 1.6
   2084      * @see #setNString
   2085      */
   2086     String getNString(String parameterName) throws SQLException;
   2087 
   2088     /**
   2089      * Retrieves the value of the designated parameter as a
   2090      * <code>java.io.Reader</code> object in the Java programming language.
   2091      * It is intended for use when
   2092      * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
   2093      * and <code>LONGNVARCHAR</code> parameters.
   2094      *
   2095      * @return a <code>java.io.Reader</code> object that contains the parameter
   2096      * value; if the value is SQL <code>NULL</code>, the value returned is
   2097      * <code>null</code> in the Java programming language.
   2098      * @param parameterIndex the first parameter is 1, the second is 2, ...
   2099      * @exception SQLException if the parameterIndex is not valid;
   2100      * if a database access error occurs or
   2101      * this method is called on a closed <code>CallableStatement</code>
   2102      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2103      * this method
   2104      * @since 1.6
   2105      */
   2106     java.io.Reader getNCharacterStream(int parameterIndex) throws SQLException;
   2107 
   2108     /**
   2109      * Retrieves the value of the designated parameter as a
   2110      * <code>java.io.Reader</code> object in the Java programming language.
   2111      * It is intended for use when
   2112      * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
   2113      * and <code>LONGNVARCHAR</code> parameters.
   2114      *
   2115      * @param parameterName the name of the parameter
   2116      * @return a <code>java.io.Reader</code> object that contains the parameter
   2117      * value; if the value is SQL <code>NULL</code>, the value returned is
   2118      * <code>null</code> in the Java programming language
   2119      * @exception SQLException if parameterName does not correspond to a named
   2120      * parameter; if a database access error occurs or
   2121      * this method is called on a closed <code>CallableStatement</code>
   2122      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2123      * this method
   2124      * @since 1.6
   2125      */
   2126     java.io.Reader getNCharacterStream(String parameterName) throws SQLException;
   2127 
   2128     /**
   2129      * Retrieves the value of the designated parameter as a
   2130      * <code>java.io.Reader</code> object in the Java programming language.
   2131      *
   2132      * @return a <code>java.io.Reader</code> object that contains the parameter
   2133      * value; if the value is SQL <code>NULL</code>, the value returned is
   2134      * <code>null</code> in the Java programming language.
   2135      * @param parameterIndex the first parameter is 1, the second is 2, ...
   2136      * @exception SQLException if the parameterIndex is not valid; if a database access error occurs or
   2137      * this method is called on a closed <code>CallableStatement</code>
   2138      * @since 1.6
   2139      */
   2140     java.io.Reader getCharacterStream(int parameterIndex) throws SQLException;
   2141 
   2142     /**
   2143      * Retrieves the value of the designated parameter as a
   2144      * <code>java.io.Reader</code> object in the Java programming language.
   2145      *
   2146      * @param parameterName the name of the parameter
   2147      * @return a <code>java.io.Reader</code> object that contains the parameter
   2148      * value; if the value is SQL <code>NULL</code>, the value returned is
   2149      * <code>null</code> in the Java programming language
   2150      * @exception SQLException if parameterName does not correspond to a named
   2151      * parameter; if a database access error occurs or
   2152      * this method is called on a closed <code>CallableStatement</code>
   2153      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2154      * this method
   2155      * @since 1.6
   2156      */
   2157     java.io.Reader getCharacterStream(String parameterName) throws SQLException;
   2158 
   2159     /**
   2160      * Sets the designated parameter to the given <code>java.sql.Blob</code> object.
   2161      * The driver converts this to an SQL <code>BLOB</code> value when it
   2162      * sends it to the database.
   2163      *
   2164      * @param parameterName the name of the parameter
   2165      * @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code> value
   2166      * @exception SQLException if parameterName does not correspond to a named
   2167      * parameter; if a database access error occurs or
   2168      * this method is called on a closed <code>CallableStatement</code>
   2169      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2170      * this method
   2171      * @since 1.6
   2172      */
   2173     void setBlob (String parameterName, Blob x) throws SQLException;
   2174 
   2175     /**
   2176      * Sets the designated parameter to the given <code>java.sql.Clob</code> object.
   2177      * The driver converts this to an SQL <code>CLOB</code> value when it
   2178      * sends it to the database.
   2179      *
   2180      * @param parameterName the name of the parameter
   2181      * @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code> value
   2182      * @exception SQLException if parameterName does not correspond to a named
   2183      * parameter; if a database access error occurs or
   2184      * this method is called on a closed <code>CallableStatement</code>
   2185      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2186      * this method
   2187      * @since 1.6
   2188      */
   2189     void setClob (String parameterName, Clob x) throws SQLException;
   2190     /**
   2191      * Sets the designated parameter to the given input stream, which will have
   2192      * the specified number of bytes.
   2193      * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
   2194      * parameter, it may be more practical to send it via a
   2195      * <code>java.io.InputStream</code>. Data will be read from the stream
   2196      * as needed until end-of-file is reached.  The JDBC driver will
   2197      * do any necessary conversion from ASCII to the database char format.
   2198      *
   2199      * <P><B>Note:</B> This stream object can either be a standard
   2200      * Java stream object or your own subclass that implements the
   2201      * standard interface.
   2202      *
   2203      * @param parameterName the name of the parameter
   2204      * @param x the Java input stream that contains the ASCII parameter value
   2205      * @param length the number of bytes in the stream
   2206      * @exception SQLException if parameterName does not correspond to a named
   2207      * parameter; if a database access error occurs or
   2208      * this method is called on a closed <code>CallableStatement</code>
   2209      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2210      * this method
   2211      * @since 1.6
   2212      */
   2213     void setAsciiStream(String parameterName, java.io.InputStream x, long length)
   2214         throws SQLException;
   2215 
   2216     /**
   2217      * Sets the designated parameter to the given input stream, which will have
   2218      * the specified number of bytes.
   2219      * When a very large binary value is input to a <code>LONGVARBINARY</code>
   2220      * parameter, it may be more practical to send it via a
   2221      * <code>java.io.InputStream</code> object. The data will be read from the stream
   2222      * as needed until end-of-file is reached.
   2223      *
   2224      * <P><B>Note:</B> This stream object can either be a standard
   2225      * Java stream object or your own subclass that implements the
   2226      * standard interface.
   2227      *
   2228      * @param parameterName the name of the parameter
   2229      * @param x the java input stream which contains the binary parameter value
   2230      * @param length the number of bytes in the stream
   2231      * @exception SQLException if parameterName does not correspond to a named
   2232      * parameter; if a database access error occurs or
   2233      * this method is called on a closed <code>CallableStatement</code>
   2234      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2235      * this method
   2236      * @since 1.6
   2237      */
   2238     void setBinaryStream(String parameterName, java.io.InputStream x,
   2239                          long length) throws SQLException;
   2240         /**
   2241      * Sets the designated parameter to the given <code>Reader</code>
   2242      * object, which is the given number of characters long.
   2243      * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
   2244      * parameter, it may be more practical to send it via a
   2245      * <code>java.io.Reader</code> object. The data will be read from the stream
   2246      * as needed until end-of-file is reached.  The JDBC driver will
   2247      * do any necessary conversion from UNICODE to the database char format.
   2248      *
   2249      * <P><B>Note:</B> This stream object can either be a standard
   2250      * Java stream object or your own subclass that implements the
   2251      * standard interface.
   2252      *
   2253      * @param parameterName the name of the parameter
   2254      * @param reader the <code>java.io.Reader</code> object that
   2255      *        contains the UNICODE data used as the designated parameter
   2256      * @param length the number of characters in the stream
   2257      * @exception SQLException if parameterName does not correspond to a named
   2258      * parameter; if a database access error occurs or
   2259      * this method is called on a closed <code>CallableStatement</code>
   2260      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
   2261      * this method
   2262      * @since 1.6
   2263      */
   2264     void setCharacterStream(String parameterName,
   2265                             java.io.Reader reader,
   2266                             long length) throws SQLException;
   2267      //--
   2268     /**
   2269      * Sets the designated parameter to the given input stream.
   2270      * When a very large ASCII value is input to a <code>LONGVARCHAR</code>
   2271      * parameter, it may be more practical to send it via a
   2272      * <code>java.io.InputStream</code>. Data will be read from the stream
   2273      * as needed until end-of-file is reached.  The JDBC driver will
   2274      * do any necessary conversion from ASCII to the database char format.
   2275      *
   2276      * <P><B>Note:</B> This stream object can either be a standard
   2277      * Java stream object or your own subclass that implements the
   2278      * standard interface.
   2279      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2280      * it might be more efficient to use a version of
   2281      * <code>setAsciiStream</code> which takes a length parameter.
   2282      *
   2283      * @param parameterName the name of the parameter
   2284      * @param x the Java input stream that contains the ASCII parameter value
   2285      * @exception SQLException if parameterName does not correspond to a named
   2286      * parameter; if a database access error occurs or
   2287      * this method is called on a closed <code>CallableStatement</code>
   2288      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2289        * @since 1.6
   2290     */
   2291     void setAsciiStream(String parameterName, java.io.InputStream x)
   2292             throws SQLException;
   2293     /**
   2294      * Sets the designated parameter to the given input stream.
   2295      * When a very large binary value is input to a <code>LONGVARBINARY</code>
   2296      * parameter, it may be more practical to send it via a
   2297      * <code>java.io.InputStream</code> object. The data will be read from the
   2298      * stream as needed until end-of-file is reached.
   2299      *
   2300      * <P><B>Note:</B> This stream object can either be a standard
   2301      * Java stream object or your own subclass that implements the
   2302      * standard interface.
   2303      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2304      * it might be more efficient to use a version of
   2305      * <code>setBinaryStream</code> which takes a length parameter.
   2306      *
   2307      * @param parameterName the name of the parameter
   2308      * @param x the java input stream which contains the binary parameter value
   2309      * @exception SQLException if parameterName does not correspond to a named
   2310      * parameter; if a database access error occurs or
   2311      * this method is called on a closed <code>CallableStatement</code>
   2312      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2313      * @since 1.6
   2314      */
   2315     void setBinaryStream(String parameterName, java.io.InputStream x)
   2316     throws SQLException;
   2317     /**
   2318      * Sets the designated parameter to the given <code>Reader</code>
   2319      * object.
   2320      * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
   2321      * parameter, it may be more practical to send it via a
   2322      * <code>java.io.Reader</code> object. The data will be read from the stream
   2323      * as needed until end-of-file is reached.  The JDBC driver will
   2324      * do any necessary conversion from UNICODE to the database char format.
   2325      *
   2326      * <P><B>Note:</B> This stream object can either be a standard
   2327      * Java stream object or your own subclass that implements the
   2328      * standard interface.
   2329      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2330      * it might be more efficient to use a version of
   2331      * <code>setCharacterStream</code> which takes a length parameter.
   2332      *
   2333      * @param parameterName the name of the parameter
   2334      * @param reader the <code>java.io.Reader</code> object that contains the
   2335      *        Unicode data
   2336      * @exception SQLException if parameterName does not correspond to a named
   2337      * parameter; if a database access error occurs or
   2338      * this method is called on a closed <code>CallableStatement</code>
   2339      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2340      * @since 1.6
   2341      */
   2342     void setCharacterStream(String parameterName,
   2343                           java.io.Reader reader) throws SQLException;
   2344   /**
   2345      * Sets the designated parameter to a <code>Reader</code> object. The
   2346      * <code>Reader</code> reads the data till end-of-file is reached. The
   2347      * driver does the necessary conversion from Java character format to
   2348      * the national character set in the database.
   2349 
   2350      * <P><B>Note:</B> This stream object can either be a standard
   2351      * Java stream object or your own subclass that implements the
   2352      * standard interface.
   2353      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2354      * it might be more efficient to use a version of
   2355      * <code>setNCharacterStream</code> which takes a length parameter.
   2356      *
   2357      * @param parameterName the name of the parameter
   2358      * @param value the parameter value
   2359      * @throws SQLException if parameterName does not correspond to a named
   2360      * parameter; if the driver does not support national
   2361      *         character sets;  if the driver can detect that a data conversion
   2362      *  error could occur; if a database access error occurs; or
   2363      * this method is called on a closed <code>CallableStatement</code>
   2364      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2365      * @since 1.6
   2366      */
   2367      void setNCharacterStream(String parameterName, Reader value) throws SQLException;
   2368 
   2369     /**
   2370      * Sets the designated parameter to a <code>Reader</code> object.
   2371      * This method differs from the <code>setCharacterStream (int, Reader)</code> method
   2372      * because it informs the driver that the parameter value should be sent to
   2373      * the server as a <code>CLOB</code>.  When the <code>setCharacterStream</code> method is used, the
   2374      * driver may have to do extra work to determine whether the parameter
   2375      * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code>
   2376      *
   2377      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2378      * it might be more efficient to use a version of
   2379      * <code>setClob</code> which takes a length parameter.
   2380      *
   2381      * @param parameterName the name of the parameter
   2382      * @param reader An object that contains the data to set the parameter value to.
   2383      * @throws SQLException if parameterName does not correspond to a named
   2384      * parameter; if a database access error occurs or this method is called on
   2385      * a closed <code>CallableStatement</code>
   2386      *
   2387      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2388      * @since 1.6
   2389      */
   2390      void setClob(String parameterName, Reader reader)
   2391        throws SQLException;
   2392 
   2393     /**
   2394      * Sets the designated parameter to a <code>InputStream</code> object.
   2395      * This method differs from the <code>setBinaryStream (int, InputStream)</code>
   2396      * method because it informs the driver that the parameter value should be
   2397      * sent to the server as a <code>BLOB</code>.  When the <code>setBinaryStream</code> method is used,
   2398      * the driver may have to do extra work to determine whether the parameter
   2399      * data should be send to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code>
   2400      *
   2401      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2402      * it might be more efficient to use a version of
   2403      * <code>setBlob</code> which takes a length parameter.
   2404      *
   2405      * @param parameterName the name of the parameter
   2406      * @param inputStream An object that contains the data to set the parameter
   2407      * value to.
   2408      * @throws SQLException if parameterName does not correspond to a named
   2409      * parameter; if a database access error occurs or
   2410      * this method is called on a closed <code>CallableStatement</code>
   2411      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2412      *
   2413      * @since 1.6
   2414      */
   2415      void setBlob(String parameterName, InputStream inputStream)
   2416         throws SQLException;
   2417     /**
   2418      * Sets the designated parameter to a <code>Reader</code> object.
   2419      * This method differs from the <code>setCharacterStream (int, Reader)</code> method
   2420      * because it informs the driver that the parameter value should be sent to
   2421      * the server as a <code>NCLOB</code>.  When the <code>setCharacterStream</code> method is used, the
   2422      * driver may have to do extra work to determine whether the parameter
   2423      * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code>
   2424      * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
   2425      * it might be more efficient to use a version of
   2426      * <code>setNClob</code> which takes a length parameter.
   2427      *
   2428      * @param parameterName the name of the parameter
   2429      * @param reader An object that contains the data to set the parameter value to.
   2430      * @throws SQLException if parameterName does not correspond to a named
   2431      * parameter; if the driver does not support national character sets;
   2432      * if the driver can detect that a data conversion
   2433      *  error could occur;  if a database access error occurs or
   2434      * this method is called on a closed <code>CallableStatement</code>
   2435      * @throws SQLFeatureNotSupportedException  if the JDBC driver does not support this method
   2436      *
   2437      * @since 1.6
   2438      */
   2439      void setNClob(String parameterName, Reader reader)
   2440        throws SQLException;
   2441 }
   2442