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