1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.  Oracle designates this
9 * particular file as subject to the "Classpath" exception as provided
10 * by Oracle in the LICENSE file that accompanied this code.
11 *
12 * This code is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 * version 2 for more details (a copy is included in the LICENSE file that
16 * accompanied this code).
17 *
18 * You should have received a copy of the GNU General Public License version
19 * 2 along with this work; if not, write to the Free Software Foundation,
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
21 *
22 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
23 * or visit www.oracle.com if you need additional information or have any
24 * questions.
25 */
26
27package java.sql;
28
29import java.math.BigDecimal;
30import java.util.Calendar;
31import java.io.Reader;
32import java.io.InputStream;
33
34/**
35 * A table of data representing a database result set, which
36 * is usually generated by executing a statement that queries the database.
37 *
38 * <P>A <code>ResultSet</code> object  maintains a cursor pointing
39 * to its current row of data.  Initially the cursor is positioned
40 * before the first row. The <code>next</code> method moves the
41 * cursor to the next row, and because it returns <code>false</code>
42 * when there are no more rows in the <code>ResultSet</code> object,
43 * it can be used in a <code>while</code> loop to iterate through
44 * the result set.
45 * <P>
46 * A default <code>ResultSet</code> object is not updatable and
47 * has a cursor that moves forward only.  Thus, you can
48 * iterate through it only once and only from the first row to the
49 * last row. It is possible to
50 * produce <code>ResultSet</code> objects that are scrollable and/or
51 * updatable.  The following code fragment, in which <code>con</code>
52 * is a valid <code>Connection</code> object, illustrates how to make
53 * a result set that is scrollable and insensitive to updates by others, and
54 * that is updatable. See <code>ResultSet</code> fields for other
55 * options.
56 * <PRE>
57 *
58 *       Statement stmt = con.createStatement(
59 *                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
60 *                                      ResultSet.CONCUR_UPDATABLE);
61 *       ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
62 *       // rs will be scrollable, will not show changes made by others,
63 *       // and will be updatable
64 *
65 * </PRE>
66 * The <code>ResultSet</code> interface provides
67 * <i>getter</i> methods (<code>getBoolean</code>, <code>getLong</code>, and so on)
68 * for retrieving column values from the current row.
69 * Values can be retrieved using either the index number of the
70 * column or the name of the column.  In general, using the
71 * column index will be more efficient.  Columns are numbered from 1.
72 * For maximum portability, result set columns within each row should be
73 * read in left-to-right order, and each column should be read only once.
74 *
75 * <P>For the getter methods, a JDBC driver attempts
76 * to convert the underlying data to the Java type specified in the
77 * getter method and returns a suitable Java value.  The JDBC specification
78 * has a table showing the allowable mappings from SQL types to Java types
79 * that can be used by the <code>ResultSet</code> getter methods.
80 * <P>
81 * <P>Column names used as input to getter methods are case
82 * insensitive.  When a getter method is called  with
83 * a column name and several columns have the same name,
84 * the value of the first matching column will be returned.
85 * The column name option is
86 * designed to be used when column names are used in the SQL
87 * query that generated the result set.
88 * For columns that are NOT explicitly named in the query, it
89 * is best to use column numbers. If column names are used, the
90 * programmer should take care to guarantee that they uniquely refer to
91 * the intended columns, which can be assured with the SQL <i>AS</i> clause.
92 * <P>
93 * A set of updater methods were added to this interface
94 * in the JDBC 2.0 API (Java<sup><font size=-2>TM</font></sup> 2 SDK,
95 * Standard Edition, version 1.2). The comments regarding parameters
96 * to the getter methods also apply to parameters to the
97 * updater methods.
98 *<P>
99 * The updater methods may be used in two ways:
100 * <ol>
101 * <LI>to update a column value in the current row.  In a scrollable
102 *     <code>ResultSet</code> object, the cursor can be moved backwards
103 *     and forwards, to an absolute position, or to a position
104 *     relative to the current row.
105 *     The following code fragment updates the <code>NAME</code> column
106 *     in the fifth row of the <code>ResultSet</code> object
107 *     <code>rs</code> and then uses the method <code>updateRow</code>
108 *     to update the data source table from which <code>rs</code> was derived.
109 * <PRE>
110 *
111 *       rs.absolute(5); // moves the cursor to the fifth row of rs
112 *       rs.updateString("NAME", "AINSWORTH"); // updates the
113 *          // <code>NAME</code> column of row 5 to be <code>AINSWORTH</code>
114 *       rs.updateRow(); // updates the row in the data source
115 *
116 * </PRE>
117 * <LI>to insert column values into the insert row.  An updatable
118 *     <code>ResultSet</code> object has a special row associated with
119 *     it that serves as a staging area for building a row to be inserted.
120 *     The following code fragment moves the cursor to the insert row, builds
121 *     a three-column row, and inserts it into <code>rs</code> and into
122 *     the data source table using the method <code>insertRow</code>.
123 * <PRE>
124 *
125 *       rs.moveToInsertRow(); // moves cursor to the insert row
126 *       rs.updateString(1, "AINSWORTH"); // updates the
127 *          // first column of the insert row to be <code>AINSWORTH</code>
128 *       rs.updateInt(2,35); // updates the second column to be <code>35</code>
129 *       rs.updateBoolean(3, true); // updates the third column to <code>true</code>
130 *       rs.insertRow();
131 *       rs.moveToCurrentRow();
132 *
133 * </PRE>
134 * </ol>
135 * <P>A <code>ResultSet</code> object is automatically closed when the
136 * <code>Statement</code> object that
137 * generated it is closed, re-executed, or used
138 * to retrieve the next result from a sequence of multiple results.
139 *
140 * <P>The number, types and properties of a <code>ResultSet</code>
141 * object's columns are provided by the <code>ResultSetMetaData</code>
142 * object returned by the <code>ResultSet.getMetaData</code> method.
143 *
144 * @see Statement#executeQuery
145 * @see Statement#getResultSet
146 * @see ResultSetMetaData
147 */
148
149public interface ResultSet extends Wrapper, AutoCloseable {
150
151    /**
152     * Moves the cursor froward one row from its current position.
153     * A <code>ResultSet</code> cursor is initially positioned
154     * before the first row; the first call to the method
155     * <code>next</code> makes the first row the current row; the
156     * second call makes the second row the current row, and so on.
157     * <p>
158     * When a call to the <code>next</code> method returns <code>false</code>,
159     * the cursor is positioned after the last row. Any
160     * invocation of a <code>ResultSet</code> method which requires a
161     * current row will result in a <code>SQLException</code> being thrown.
162     *  If the result set type is <code>TYPE_FORWARD_ONLY</code>, it is vendor specified
163     * whether their JDBC driver implementation will return <code>false</code> or
164     *  throw an <code>SQLException</code> on a
165     * subsequent call to <code>next</code>.
166     *
167     * <P>If an input stream is open for the current row, a call
168     * to the method <code>next</code> will
169     * implicitly close it. A <code>ResultSet</code> object's
170     * warning chain is cleared when a new row is read.
171     *
172     * @return <code>true</code> if the new current row is valid;
173     * <code>false</code> if there are no more rows
174     * @exception SQLException if a database access error occurs or this method is
175     *            called on a closed result set
176     */
177    boolean next() throws SQLException;
178
179
180    /**
181     * Releases this <code>ResultSet</code> object's database and
182     * JDBC resources immediately instead of waiting for
183     * this to happen when it is automatically closed.
184     *
185     * <P>The closing of a <code>ResultSet</code> object does <strong>not</strong> close the <code>Blob</code>,
186     * <code>Clob</code> or <code>NClob</code> objects created by the <code>ResultSet</code>. <code>Blob</code>,
187     * <code>Clob</code> or <code>NClob</code> objects remain valid for at least the duration of the
188     * transaction in which they are creataed, unless their <code>free</code> method is invoked.
189     *<p>
190     * When a <code>ResultSet</code> is closed, any <code>ResultSetMetaData</code>
191     * instances that were created by calling the  <code>getMetaData</code>
192     * method remain accessible.
193     *
194     * <P><B>Note:</B> A <code>ResultSet</code> object
195     * is automatically closed by the
196     * <code>Statement</code> object that generated it when
197     * that <code>Statement</code> object is closed,
198     * re-executed, or is used to retrieve the next result from a
199     * sequence of multiple results.
200     *<p>
201     * Calling the method <code>close</code> on a <code>ResultSet</code>
202     * object that is already closed is a no-op.
203     * <P>
204     * <p>
205     *
206     * @exception SQLException if a database access error occurs
207     */
208    void close() throws SQLException;
209
210    /**
211     * Reports whether
212     * the last column read had a value of SQL <code>NULL</code>.
213     * Note that you must first call one of the getter methods
214     * on a column to try to read its value and then call
215     * the method <code>wasNull</code> to see if the value read was
216     * SQL <code>NULL</code>.
217     *
218     * @return <code>true</code> if the last column value read was SQL
219     *         <code>NULL</code> and <code>false</code> otherwise
220     * @exception SQLException if a database access error occurs or this method is
221     *            called on a closed result set
222     */
223    boolean wasNull() throws SQLException;
224
225    // Methods for accessing results by column index
226
227    /**
228     * Retrieves the value of the designated column in the current row
229     * of this <code>ResultSet</code> object as
230     * a <code>String</code> in the Java programming language.
231     *
232     * @param columnIndex the first column is 1, the second is 2, ...
233     * @return the column value; if the value is SQL <code>NULL</code>, the
234     * value returned is <code>null</code>
235     * @exception SQLException if the columnIndex is not valid;
236     * if a database access error occurs or this method is
237     *            called on a closed result set
238     */
239    String getString(int columnIndex) throws SQLException;
240
241    /**
242     * Retrieves the value of the designated column in the current row
243     * of this <code>ResultSet</code> object as
244     * a <code>boolean</code> in the Java programming language.
245     *
246     * <P>If the designated column has a datatype of CHAR or VARCHAR
247     * and contains a "0" or has a datatype of BIT, TINYINT, SMALLINT, INTEGER or BIGINT
248     * and contains  a 0, a value of <code>false</code> is returned.  If the designated column has a datatype
249     * of CHAR or VARCHAR
250     * and contains a "1" or has a datatype of BIT, TINYINT, SMALLINT, INTEGER or BIGINT
251     * and contains  a 1, a value of <code>true</code> is returned.
252     *
253     * @param columnIndex the first column is 1, the second is 2, ...
254     * @return the column value; if the value is SQL <code>NULL</code>, the
255     * value returned is <code>false</code>
256     * @exception SQLException if the columnIndex is not valid;
257     * if a database access error occurs or this method is
258     *            called on a closed result set
259     */
260    boolean getBoolean(int columnIndex) throws SQLException;
261
262    /**
263     * Retrieves the value of the designated column in the current row
264     * of this <code>ResultSet</code> object as
265     * a <code>byte</code> in the Java programming language.
266     *
267     * @param columnIndex the first column is 1, the second is 2, ...
268     * @return the column value; if the value is SQL <code>NULL</code>, the
269     * value returned is <code>0</code>
270     * @exception SQLException if the columnIndex is not valid;
271     * if a database access error occurs or this method is
272     *            called on a closed result set
273     */
274    byte getByte(int columnIndex) throws SQLException;
275
276    /**
277     * Retrieves the value of the designated column in the current row
278     * of this <code>ResultSet</code> object as
279     * a <code>short</code> in the Java programming language.
280     *
281     * @param columnIndex the first column is 1, the second is 2, ...
282     * @return the column value; if the value is SQL <code>NULL</code>, the
283     * value returned is <code>0</code>
284     * @exception SQLException if the columnIndex is not valid;
285     * if a database access error occurs or this method is
286     *            called on a closed result set
287     */
288    short getShort(int columnIndex) throws SQLException;
289
290    /**
291     * Retrieves the value of the designated column in the current row
292     * of this <code>ResultSet</code> object as
293     * an <code>int</code> in the Java programming language.
294     *
295     * @param columnIndex the first column is 1, the second is 2, ...
296     * @return the column value; if the value is SQL <code>NULL</code>, the
297     * value returned is <code>0</code>
298     * @exception SQLException if the columnIndex is not valid;
299     * if a database access error occurs or this method is
300     *            called on a closed result set
301     */
302    int getInt(int columnIndex) throws SQLException;
303
304    /**
305     * Retrieves the value of the designated column in the current row
306     * of this <code>ResultSet</code> object as
307     * a <code>long</code> in the Java programming language.
308     *
309     * @param columnIndex the first column is 1, the second is 2, ...
310     * @return the column value; if the value is SQL <code>NULL</code>, the
311     * value returned is <code>0</code>
312     * @exception SQLException if the columnIndex is not valid;
313     * if a database access error occurs or this method is
314     *            called on a closed result set
315     */
316    long getLong(int columnIndex) throws SQLException;
317
318    /**
319     * Retrieves the value of the designated column in the current row
320     * of this <code>ResultSet</code> object as
321     * a <code>float</code> in the Java programming language.
322     *
323     * @param columnIndex the first column is 1, the second is 2, ...
324     * @return the column value; if the value is SQL <code>NULL</code>, the
325     * value returned is <code>0</code>
326     * @exception SQLException if the columnIndex is not valid;
327     * if a database access error occurs or this method is
328     *            called on a closed result set
329     */
330    float getFloat(int columnIndex) throws SQLException;
331
332    /**
333     * Retrieves the value of the designated column in the current row
334     * of this <code>ResultSet</code> object as
335     * a <code>double</code> in the Java programming language.
336     *
337     * @param columnIndex the first column is 1, the second is 2, ...
338     * @return the column value; if the value is SQL <code>NULL</code>, the
339     * value returned is <code>0</code>
340     * @exception SQLException if the columnIndex is not valid;
341     * if a database access error occurs or this method is
342     *            called on a closed result set
343     */
344    double getDouble(int columnIndex) throws SQLException;
345
346    /**
347     * Retrieves the value of the designated column in the current row
348     * of this <code>ResultSet</code> object as
349     * a <code>java.sql.BigDecimal</code> in the Java programming language.
350     *
351     * @param columnIndex the first column is 1, the second is 2, ...
352     * @param scale the number of digits to the right of the decimal point
353     * @return the column value; if the value is SQL <code>NULL</code>, the
354     * value returned is <code>null</code>
355     * @exception SQLException if the columnIndex is not valid;
356     * if a database access error occurs or this method is
357     *            called on a closed result set
358     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
359     * this method
360     * @deprecated Use {@code getBigDecimal(int columnIndex)}
361     *             or {@code getBigDecimal(String columnLabel)}
362     */
363    @Deprecated
364    BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException;
365
366    /**
367     * Retrieves the value of the designated column in the current row
368     * of this <code>ResultSet</code> object as
369     * a <code>byte</code> array in the Java programming language.
370     * The bytes represent the raw values returned by the driver.
371     *
372     * @param columnIndex the first column is 1, the second is 2, ...
373     * @return the column value; if the value is SQL <code>NULL</code>, the
374     * value returned is <code>null</code>
375     * @exception SQLException if the columnIndex is not valid;
376     * if a database access error occurs or this method is
377     *            called on a closed result set
378     */
379    byte[] getBytes(int columnIndex) throws SQLException;
380
381    /**
382     * Retrieves the value of the designated column in the current row
383     * of this <code>ResultSet</code> object as
384     * a <code>java.sql.Date</code> object in the Java programming language.
385     *
386     * @param columnIndex the first column is 1, the second is 2, ...
387     * @return the column value; if the value is SQL <code>NULL</code>, the
388     * value returned is <code>null</code>
389     * @exception SQLException if the columnIndex is not valid;
390     * if a database access error occurs or this method is
391     *            called on a closed result set
392     */
393    java.sql.Date getDate(int columnIndex) throws SQLException;
394
395    /**
396     * Retrieves the value of the designated column in the current row
397     * of this <code>ResultSet</code> object as
398     * a <code>java.sql.Time</code> object in the Java programming language.
399     *
400     * @param columnIndex the first column is 1, the second is 2, ...
401     * @return the column value; if the value is SQL <code>NULL</code>, the
402     * value returned is <code>null</code>
403     * @exception SQLException if the columnIndex is not valid;
404     * if a database access error occurs or this method is
405     *            called on a closed result set
406     */
407    java.sql.Time getTime(int columnIndex) throws SQLException;
408
409    /**
410     * Retrieves the value of the designated column in the current row
411     * of this <code>ResultSet</code> object as
412     * a <code>java.sql.Timestamp</code> object in the Java programming language.
413     *
414     * @param columnIndex the first column is 1, the second is 2, ...
415     * @return the column value; if the value is SQL <code>NULL</code>, the
416     * value returned is <code>null</code>
417     * @exception SQLException if the columnIndex is not valid;
418     * if a database access error occurs or this method is
419     *            called on a closed result set
420     */
421    java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException;
422
423    /**
424     * Retrieves the value of the designated column in the current row
425     * of this <code>ResultSet</code> object as
426     * a stream of ASCII characters. The value can then be read in chunks from the
427     * stream. This method is particularly
428     * suitable for retrieving large <code>LONGVARCHAR</code> values.
429     * The JDBC driver will
430     * do any necessary conversion from the database format into ASCII.
431     *
432     * <P><B>Note:</B> All the data in the returned stream must be
433     * read prior to getting the value of any other column. The next
434     * call to a getter method implicitly closes the stream.  Also, a
435     * stream may return <code>0</code> when the method
436     * <code>InputStream.available</code>
437     * is called whether there is data available or not.
438     *
439     * @param columnIndex the first column is 1, the second is 2, ...
440     * @return a Java input stream that delivers the database column value
441     * as a stream of one-byte ASCII characters;
442     * if the value is SQL <code>NULL</code>, the
443     * value returned is <code>null</code>
444     * @exception SQLException if the columnIndex is not valid;
445     * if a database access error occurs or this method is
446     *            called on a closed result set
447     */
448    java.io.InputStream getAsciiStream(int columnIndex) throws SQLException;
449
450    /**
451     * Retrieves the value of the designated column in the current row
452     * of this <code>ResultSet</code> object as
453     * as a stream of two-byte 3 characters. The first byte is
454     * the high byte; the second byte is the low byte.
455     *
456     * The value can then be read in chunks from the
457     * stream. This method is particularly
458     * suitable for retrieving large <code>LONGVARCHAR</code>values.  The
459     * JDBC driver will do any necessary conversion from the database
460     * format into Unicode.
461     *
462     * <P><B>Note:</B> All the data in the returned stream must be
463     * read prior to getting the value of any other column. The next
464     * call to a getter method implicitly closes the stream.
465     * Also, a stream may return <code>0</code> when the method
466     * <code>InputStream.available</code>
467     * is called, whether there is data available or not.
468     *
469     * @param columnIndex the first column is 1, the second is 2, ...
470     * @return a Java input stream that delivers the database column value
471     *         as a stream of two-byte Unicode characters;
472     *         if the value is SQL <code>NULL</code>, the value returned is
473     *         <code>null</code>
474     *
475     * @exception SQLException if the columnIndex is not valid;
476     * if a database access error occurs or this method is
477     *            called on a closed result set
478     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
479     * this method
480     * @deprecated use <code>getCharacterStream</code> in place of
481     *              <code>getUnicodeStream</code>
482     */
483    @Deprecated
484    java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException;
485
486    /**
487     * Retrieves the value of the designated column in the current row
488     * of this <code>ResultSet</code> object as a  stream of
489     * uninterpreted bytes. The value can then be read in chunks from the
490     * stream. This method is particularly
491     * suitable for retrieving large <code>LONGVARBINARY</code> values.
492     *
493     * <P><B>Note:</B> All the data in the returned stream must be
494     * read prior to getting the value of any other column. The next
495     * call to a getter method implicitly closes the stream.  Also, a
496     * stream may return <code>0</code> when the method
497     * <code>InputStream.available</code>
498     * is called whether there is data available or not.
499     *
500     * @param columnIndex the first column is 1, the second is 2, ...
501     * @return a Java input stream that delivers the database column value
502     *         as a stream of uninterpreted bytes;
503     *         if the value is SQL <code>NULL</code>, the value returned is
504     *         <code>null</code>
505     * @exception SQLException if the columnIndex is not valid;
506     * if a database access error occurs or this method is
507     *            called on a closed result set
508     */
509    java.io.InputStream getBinaryStream(int columnIndex)
510        throws SQLException;
511
512
513    // Methods for accessing results by column label
514
515    /**
516     * Retrieves the value of the designated column in the current row
517     * of this <code>ResultSet</code> object as
518     * a <code>String</code> in the Java programming language.
519     *
520     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
521     * @return the column value; if the value is SQL <code>NULL</code>, the
522     * value returned is <code>null</code>
523     * @exception SQLException if the columnLabel is not valid;
524     * if a database access error occurs or this method is
525     *            called on a closed result set
526     */
527    String getString(String columnLabel) throws SQLException;
528
529    /**
530     * Retrieves the value of the designated column in the current row
531     * of this <code>ResultSet</code> object as
532     * a <code>boolean</code> in the Java programming language.
533     *
534     * <P>If the designated column has a datatype of CHAR or VARCHAR
535     * and contains a "0" or has a datatype of BIT, TINYINT, SMALLINT, INTEGER or BIGINT
536     * and contains  a 0, a value of <code>false</code> is returned.  If the designated column has a datatype
537     * of CHAR or VARCHAR
538     * and contains a "1" or has a datatype of BIT, TINYINT, SMALLINT, INTEGER or BIGINT
539     * and contains  a 1, a value of <code>true</code> is returned.
540     *
541     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
542     * @return the column value; if the value is SQL <code>NULL</code>, the
543     * value returned is <code>false</code>
544     * @exception SQLException if the columnLabel is not valid;
545     * if a database access error occurs or this method is
546     *            called on a closed result set
547     */
548    boolean getBoolean(String columnLabel) throws SQLException;
549
550    /**
551     * Retrieves the value of the designated column in the current row
552     * of this <code>ResultSet</code> object as
553     * a <code>byte</code> in the Java programming language.
554     *
555     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
556     * @return the column value; if the value is SQL <code>NULL</code>, the
557     * value returned is <code>0</code>
558     * @exception SQLException if the columnLabel is not valid;
559     * if a database access error occurs or this method is
560     *            called on a closed result set
561     */
562    byte getByte(String columnLabel) throws SQLException;
563
564    /**
565     * Retrieves the value of the designated column in the current row
566     * of this <code>ResultSet</code> object as
567     * a <code>short</code> in the Java programming language.
568     *
569     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
570     * @return the column value; if the value is SQL <code>NULL</code>, the
571     * value returned is <code>0</code>
572     * @exception SQLException if the columnLabel is not valid;
573     * if a database access error occurs or this method is
574     *            called on a closed result set
575     */
576    short getShort(String columnLabel) throws SQLException;
577
578    /**
579     * Retrieves the value of the designated column in the current row
580     * of this <code>ResultSet</code> object as
581     * an <code>int</code> in the Java programming language.
582     *
583     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
584     * @return the column value; if the value is SQL <code>NULL</code>, the
585     * value returned is <code>0</code>
586     * @exception SQLException if the columnLabel is not valid;
587     * if a database access error occurs or this method is
588     *            called on a closed result set
589     */
590    int getInt(String columnLabel) throws SQLException;
591
592    /**
593     * Retrieves the value of the designated column in the current row
594     * of this <code>ResultSet</code> object as
595     * a <code>long</code> in the Java programming language.
596     *
597     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
598     * @return the column value; if the value is SQL <code>NULL</code>, the
599     * value returned is <code>0</code>
600     * @exception SQLException if the columnLabel is not valid;
601     * if a database access error occurs or this method is
602     *            called on a closed result set
603     */
604    long getLong(String columnLabel) throws SQLException;
605
606    /**
607     * Retrieves the value of the designated column in the current row
608     * of this <code>ResultSet</code> object as
609     * a <code>float</code> in the Java programming language.
610     *
611     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
612     * @return the column value; if the value is SQL <code>NULL</code>, the
613     * value returned is <code>0</code>
614     * @exception SQLException if the columnLabel is not valid;
615     * if a database access error occurs or this method is
616     *            called on a closed result set
617     */
618    float getFloat(String columnLabel) throws SQLException;
619
620    /**
621     * Retrieves the value of the designated column in the current row
622     * of this <code>ResultSet</code> object as
623     * a <code>double</code> in the Java programming language.
624     *
625     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
626     * @return the column value; if the value is SQL <code>NULL</code>, the
627     * value returned is <code>0</code>
628     * @exception SQLException if the columnLabel is not valid;
629     * if a database access error occurs or this method is
630     *            called on a closed result set
631     */
632    double getDouble(String columnLabel) throws SQLException;
633
634    /**
635     * Retrieves the value of the designated column in the current row
636     * of this <code>ResultSet</code> object as
637     * a <code>java.math.BigDecimal</code> in the Java programming language.
638     *
639     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
640     * @param scale the number of digits to the right of the decimal point
641     * @return the column value; if the value is SQL <code>NULL</code>, the
642     * value returned is <code>null</code>
643     * @exception SQLException if the columnLabel is not valid;
644     * if a database access error occurs or this method is
645     *            called on a closed result set
646     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
647     * this method
648     * @deprecated Use {@code getBigDecimal(int columnIndex)}
649     *             or {@code getBigDecimal(String columnLabel)}
650     */
651    @Deprecated
652    BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException;
653
654    /**
655     * Retrieves the value of the designated column in the current row
656     * of this <code>ResultSet</code> object as
657     * a <code>byte</code> array in the Java programming language.
658     * The bytes represent the raw values returned by the driver.
659     *
660     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
661     * @return the column value; if the value is SQL <code>NULL</code>, the
662     * value returned is <code>null</code>
663     * @exception SQLException if the columnLabel is not valid;
664     * if a database access error occurs or this method is
665     *            called on a closed result set
666     */
667    byte[] getBytes(String columnLabel) throws SQLException;
668
669    /**
670     * Retrieves the value of the designated column in the current row
671     * of this <code>ResultSet</code> object as
672     * a <code>java.sql.Date</code> object in the Java programming language.
673     *
674     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
675     * @return the column value; if the value is SQL <code>NULL</code>, the
676     * value returned is <code>null</code>
677     * @exception SQLException if the columnLabel is not valid;
678     * if a database access error occurs or this method is
679     *            called on a closed result set
680     */
681    java.sql.Date getDate(String columnLabel) throws SQLException;
682
683    /**
684     * Retrieves the value of the designated column in the current row
685     * of this <code>ResultSet</code> object as
686     * a <code>java.sql.Time</code> object in the Java programming language.
687     *
688     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
689     * @return the column value;
690     * if the value is SQL <code>NULL</code>,
691     * the value returned is <code>null</code>
692     * @exception SQLException if the columnLabel is not valid;
693     * if a database access error occurs or this method is
694     *            called on a closed result set
695     */
696    java.sql.Time getTime(String columnLabel) throws SQLException;
697
698    /**
699     * Retrieves the value of the designated column in the current row
700     * of this <code>ResultSet</code> object as
701     * a <code>java.sql.Timestamp</code> object in the Java programming language.
702     *
703     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
704     * @return the column value; if the value is SQL <code>NULL</code>, the
705     * value returned is <code>null</code>
706     * @exception SQLException if the columnLabel is not valid;
707     * if a database access error occurs or this method is
708     *            called on a closed result set
709     */
710    java.sql.Timestamp getTimestamp(String columnLabel) throws SQLException;
711
712    /**
713     * Retrieves the value of the designated column in the current row
714     * of this <code>ResultSet</code> object as a stream of
715     * ASCII characters. The value can then be read in chunks from the
716     * stream. This method is particularly
717     * suitable for retrieving large <code>LONGVARCHAR</code> values.
718     * The JDBC driver will
719     * do any necessary conversion from the database format into ASCII.
720     *
721     * <P><B>Note:</B> All the data in the returned stream must be
722     * read prior to getting the value of any other column. The next
723     * call to a getter method implicitly closes the stream. Also, a
724     * stream may return <code>0</code> when the method <code>available</code>
725     * is called whether there is data available or not.
726     *
727     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
728     * @return a Java input stream that delivers the database column value
729     * as a stream of one-byte ASCII characters.
730     * If the value is SQL <code>NULL</code>,
731     * the value returned is <code>null</code>.
732     * @exception SQLException if the columnLabel is not valid;
733     * if a database access error occurs or this method is
734     *            called on a closed result set
735     */
736    java.io.InputStream getAsciiStream(String columnLabel) throws SQLException;
737
738    /**
739     * Retrieves the value of the designated column in the current row
740     * of this <code>ResultSet</code> object as a stream of two-byte
741     * Unicode characters. The first byte is the high byte; the second
742     * byte is the low byte.
743     *
744     * The value can then be read in chunks from the
745     * stream. This method is particularly
746     * suitable for retrieving large <code>LONGVARCHAR</code> values.
747     * The JDBC technology-enabled driver will
748     * do any necessary conversion from the database format into Unicode.
749     *
750     * <P><B>Note:</B> All the data in the returned stream must be
751     * read prior to getting the value of any other column. The next
752     * call to a getter method implicitly closes the stream.
753     * Also, a stream may return <code>0</code> when the method
754     * <code>InputStream.available</code> is called, whether there
755     * is data available or not.
756     *
757     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
758     * @return a Java input stream that delivers the database column value
759     *         as a stream of two-byte Unicode characters.
760     *         If the value is SQL <code>NULL</code>, the value returned
761     *         is <code>null</code>.
762     * @exception SQLException if the columnLabel is not valid;
763     * if a database access error occurs or this method is
764     *            called on a closed result set
765     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
766     * this method
767     * @deprecated use <code>getCharacterStream</code> instead
768     */
769    @Deprecated
770    java.io.InputStream getUnicodeStream(String columnLabel) throws SQLException;
771
772    /**
773     * Retrieves the value of the designated column in the current row
774     * of this <code>ResultSet</code> object as a stream of uninterpreted
775     * <code>byte</code>s.
776     * The value can then be read in chunks from the
777     * stream. This method is particularly
778     * suitable for retrieving large <code>LONGVARBINARY</code>
779     * values.
780     *
781     * <P><B>Note:</B> All the data in the returned stream must be
782     * read prior to getting the value of any other column. The next
783     * call to a getter method implicitly closes the stream. Also, a
784     * stream may return <code>0</code> when the method <code>available</code>
785     * is called whether there is data available or not.
786     *
787     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
788     * @return a Java input stream that delivers the database column value
789     * as a stream of uninterpreted bytes;
790     * if the value is SQL <code>NULL</code>, the result is <code>null</code>
791     * @exception SQLException if the columnLabel is not valid;
792     * if a database access error occurs or this method is
793     *            called on a closed result set
794     */
795    java.io.InputStream getBinaryStream(String columnLabel)
796        throws SQLException;
797
798
799    // Advanced features:
800
801    /**
802     * Retrieves the first warning reported by calls on this
803     * <code>ResultSet</code> object.
804     * Subsequent warnings on this <code>ResultSet</code> object
805     * will be chained to the <code>SQLWarning</code> object that
806     * this method returns.
807     *
808     * <P>The warning chain is automatically cleared each time a new
809     * row is read.  This method may not be called on a <code>ResultSet</code>
810     * object that has been closed; doing so will cause an
811     * <code>SQLException</code> to be thrown.
812     * <P>
813     * <B>Note:</B> This warning chain only covers warnings caused
814     * by <code>ResultSet</code> methods.  Any warning caused by
815     * <code>Statement</code> methods
816     * (such as reading OUT parameters) will be chained on the
817     * <code>Statement</code> object.
818     *
819     * @return the first <code>SQLWarning</code> object reported or
820     *         <code>null</code> if there are none
821     * @exception SQLException if a database access error occurs or this method is
822     *            called on a closed result set
823     */
824    SQLWarning getWarnings() throws SQLException;
825
826    /**
827     * Clears all warnings reported on this <code>ResultSet</code> object.
828     * After this method is called, the method <code>getWarnings</code>
829     * returns <code>null</code> until a new warning is
830     * reported for this <code>ResultSet</code> object.
831     *
832     * @exception SQLException if a database access error occurs or this method is
833     *            called on a closed result set
834     */
835    void clearWarnings() throws SQLException;
836
837    /**
838     * Retrieves the name of the SQL cursor used by this <code>ResultSet</code>
839     * object.
840     *
841     * <P>In SQL, a result table is retrieved through a cursor that is
842     * named. The current row of a result set can be updated or deleted
843     * using a positioned update/delete statement that references the
844     * cursor name. To insure that the cursor has the proper isolation
845     * level to support update, the cursor's <code>SELECT</code> statement
846     * should be of the form <code>SELECT FOR UPDATE</code>. If
847     * <code>FOR UPDATE</code> is omitted, the positioned updates may fail.
848     *
849     * <P>The JDBC API supports this SQL feature by providing the name of the
850     * SQL cursor used by a <code>ResultSet</code> object.
851     * The current row of a <code>ResultSet</code> object
852     * is also the current row of this SQL cursor.
853     *
854     * @return the SQL name for this <code>ResultSet</code> object's cursor
855     * @exception SQLException if a database access error occurs or this method is called on a closed result set
856     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
857     * this method
858     */
859    String getCursorName() throws SQLException;
860
861    /**
862     * Retrieves the  number, types and properties of
863     * this <code>ResultSet</code> object's columns.
864     *
865     * @return the description of this <code>ResultSet</code> object's columns
866     * @exception SQLException if a database access error occurs or this method is
867     *            called on a closed result set
868     */
869    ResultSetMetaData getMetaData() throws SQLException;
870
871    /**
872     * <p>Gets the value of the designated column in the current row
873     * of this <code>ResultSet</code> object as
874     * an <code>Object</code> in the Java programming language.
875     *
876     * <p>This method will return the value of the given column as a
877     * Java object.  The type of the Java object will be the default
878     * Java object type corresponding to the column's SQL type,
879     * following the mapping for built-in types specified in the JDBC
880     * specification. If the value is an SQL <code>NULL</code>,
881     * the driver returns a Java <code>null</code>.
882     *
883     * <p>This method may also be used to read database-specific
884     * abstract data types.
885     *
886     * In the JDBC 2.0 API, the behavior of method
887     * <code>getObject</code> is extended to materialize
888     * data of SQL user-defined types.
889     * <p>
890     * If <code>Connection.getTypeMap</code> does not throw a
891     * <code>SQLFeatureNotSupportedException</code>,
892     * then when a column contains a structured or distinct value,
893     * the behavior of this method is as
894     * if it were a call to: <code>getObject(columnIndex,
895     * this.getStatement().getConnection().getTypeMap())</code>.
896     *
897     * If <code>Connection.getTypeMap</code> does throw a
898     * <code>SQLFeatureNotSupportedException</code>,
899     * then structured values are not supported, and distinct values
900     * are mapped to the default Java class as determined by the
901     * underlying SQL type of the DISTINCT type.
902     *
903     * @param columnIndex the first column is 1, the second is 2, ...
904     * @return a <code>java.lang.Object</code> holding the column value
905     * @exception SQLException if the columnIndex is not valid;
906     * if a database access error occurs or this method is
907     *            called on a closed result set
908     */
909    Object getObject(int columnIndex) throws SQLException;
910
911    /**
912     * <p>Gets the value of the designated column in the current row
913     * of this <code>ResultSet</code> object as
914     * an <code>Object</code> in the Java programming language.
915     *
916     * <p>This method will return the value of the given column as a
917     * Java object.  The type of the Java object will be the default
918     * Java object type corresponding to the column's SQL type,
919     * following the mapping for built-in types specified in the JDBC
920     * specification. If the value is an SQL <code>NULL</code>,
921     * the driver returns a Java <code>null</code>.
922     * <P>
923     * This method may also be used to read database-specific
924     * abstract data types.
925     * <P>
926     * In the JDBC 2.0 API, the behavior of the method
927     * <code>getObject</code> is extended to materialize
928     * data of SQL user-defined types.  When a column contains
929     * a structured or distinct value, the behavior of this method is as
930     * if it were a call to: <code>getObject(columnIndex,
931     * this.getStatement().getConnection().getTypeMap())</code>.
932     *
933     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
934     * @return a <code>java.lang.Object</code> holding the column value
935     * @exception SQLException if the columnLabel is not valid;
936     * if a database access error occurs or this method is
937     *            called on a closed result set
938     */
939    Object getObject(String columnLabel) throws SQLException;
940
941    //----------------------------------------------------------------
942
943    /**
944     * Maps the given <code>ResultSet</code> column label to its
945     * <code>ResultSet</code> column index.
946     *
947     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
948     * @return the column index of the given column name
949     * @exception SQLException if the <code>ResultSet</code> object
950     * does not contain a column labeled <code>columnLabel</code>, a database access error occurs
951     *  or this method is called on a closed result set
952     */
953    int findColumn(String columnLabel) throws SQLException;
954
955
956    //--------------------------JDBC 2.0-----------------------------------
957
958    //---------------------------------------------------------------------
959    // Getters and Setters
960    //---------------------------------------------------------------------
961
962    /**
963     * Retrieves the value of the designated column in the current row
964     * of this <code>ResultSet</code> object as a
965     * <code>java.io.Reader</code> object.
966     * @return a <code>java.io.Reader</code> object that contains the column
967     * value; if the value is SQL <code>NULL</code>, the value returned is
968     * <code>null</code> in the Java programming language.
969     * @param columnIndex the first column is 1, the second is 2, ...
970     * @exception SQLException if the columnIndex is not valid;
971     * if a database access error occurs or this method is
972     *            called on a closed result set
973     * @since 1.2
974     */
975    java.io.Reader getCharacterStream(int columnIndex) throws SQLException;
976
977    /**
978     * Retrieves the value of the designated column in the current row
979     * of this <code>ResultSet</code> object as a
980     * <code>java.io.Reader</code> object.
981     *
982     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
983     * @return a <code>java.io.Reader</code> object that contains the column
984     * value; if the value is SQL <code>NULL</code>, the value returned is
985     * <code>null</code> in the Java programming language
986     * @exception SQLException if the columnLabel is not valid;
987     * if a database access error occurs or this method is
988     *            called on a closed result set
989     * @since 1.2
990     */
991    java.io.Reader getCharacterStream(String columnLabel) throws SQLException;
992
993    /**
994     * Retrieves the value of the designated column in the current row
995     * of this <code>ResultSet</code> object as a
996     * <code>java.math.BigDecimal</code> with full precision.
997     *
998     * @param columnIndex the first column is 1, the second is 2, ...
999     * @return the column value (full precision);
1000     * if the value is SQL <code>NULL</code>, the value returned is
1001     * <code>null</code> in the Java programming language.
1002     * @exception SQLException if the columnIndex is not valid;
1003     * if a database access error occurs or this method is
1004     *            called on a closed result set
1005     * @since 1.2
1006     */
1007    BigDecimal getBigDecimal(int columnIndex) throws SQLException;
1008
1009    /**
1010     * Retrieves the value of the designated column in the current row
1011     * of this <code>ResultSet</code> object as a
1012     * <code>java.math.BigDecimal</code> with full precision.
1013     *
1014     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1015     * @return the column value (full precision);
1016     * if the value is SQL <code>NULL</code>, the value returned is
1017     * <code>null</code> in the Java programming language.
1018     * @exception SQLException if the columnLabel is not valid;
1019     * if a database access error occurs or this method is
1020     *            called on a closed result set
1021     * @since 1.2
1022     *
1023     */
1024    BigDecimal getBigDecimal(String columnLabel) throws SQLException;
1025
1026    //---------------------------------------------------------------------
1027    // Traversal/Positioning
1028    //---------------------------------------------------------------------
1029
1030    /**
1031     * Retrieves whether the cursor is before the first row in
1032     * this <code>ResultSet</code> object.
1033     * <p>
1034     * <strong>Note:</strong>Support for the <code>isBeforeFirst</code> method
1035     * is optional for <code>ResultSet</code>s with a result
1036     * set type of <code>TYPE_FORWARD_ONLY</code>
1037     *
1038     * @return <code>true</code> if the cursor is before the first row;
1039     * <code>false</code> if the cursor is at any other position or the
1040     * result set contains no rows
1041     * @exception SQLException if a database access error occurs or this method is
1042     *            called on a closed result set
1043     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1044     * this method
1045     * @since 1.2
1046     */
1047    boolean isBeforeFirst() throws SQLException;
1048
1049    /**
1050     * Retrieves whether the cursor is after the last row in
1051     * this <code>ResultSet</code> object.
1052     * <p>
1053     * <strong>Note:</strong>Support for the <code>isAfterLast</code> method
1054     * is optional for <code>ResultSet</code>s with a result
1055     * set type of <code>TYPE_FORWARD_ONLY</code>
1056     *
1057     * @return <code>true</code> if the cursor is after the last row;
1058     * <code>false</code> if the cursor is at any other position or the
1059     * result set contains no rows
1060     * @exception SQLException if a database access error occurs or this method is
1061     *            called on a closed result set
1062     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1063     * this method
1064     * @since 1.2
1065     */
1066    boolean isAfterLast() throws SQLException;
1067
1068    /**
1069     * Retrieves whether the cursor is on the first row of
1070     * this <code>ResultSet</code> object.
1071     * <p>
1072     * <strong>Note:</strong>Support for the <code>isFirst</code> method
1073     * is optional for <code>ResultSet</code>s with a result
1074     * set type of <code>TYPE_FORWARD_ONLY</code>
1075     *
1076     * @return <code>true</code> if the cursor is on the first row;
1077     * <code>false</code> otherwise
1078     * @exception SQLException if a database access error occurs or this method is
1079     *            called on a closed result set
1080     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1081     * this method
1082     * @since 1.2
1083     */
1084    boolean isFirst() throws SQLException;
1085
1086    /**
1087     * Retrieves whether the cursor is on the last row of
1088     * this <code>ResultSet</code> object.
1089     *  <strong>Note:</strong> Calling the method <code>isLast</code> may be expensive
1090     * because the JDBC driver
1091     * might need to fetch ahead one row in order to determine
1092     * whether the current row is the last row in the result set.
1093     * <p>
1094     * <strong>Note:</strong> Support for the <code>isLast</code> method
1095     * is optional for <code>ResultSet</code>s with a result
1096     * set type of <code>TYPE_FORWARD_ONLY</code>
1097     * @return <code>true</code> if the cursor is on the last row;
1098     * <code>false</code> otherwise
1099     * @exception SQLException if a database access error occurs or this method is
1100     *            called on a closed result set
1101     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1102     * this method
1103     * @since 1.2
1104     */
1105    boolean isLast() throws SQLException;
1106
1107    /**
1108     * Moves the cursor to the front of
1109     * this <code>ResultSet</code> object, just before the
1110     * first row. This method has no effect if the result set contains no rows.
1111     *
1112     * @exception SQLException if a database access error
1113     * occurs; this method is called on a closed result set or the
1114     * result set type is <code>TYPE_FORWARD_ONLY</code>
1115     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1116     * this method
1117     * @since 1.2
1118     */
1119    void beforeFirst() throws SQLException;
1120
1121    /**
1122     * Moves the cursor to the end of
1123     * this <code>ResultSet</code> object, just after the
1124     * last row. This method has no effect if the result set contains no rows.
1125     * @exception SQLException if a database access error
1126     * occurs; this method is called on a closed result set
1127     * or the result set type is <code>TYPE_FORWARD_ONLY</code>
1128     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1129     * this method
1130     * @since 1.2
1131     */
1132    void afterLast() throws SQLException;
1133
1134    /**
1135     * Moves the cursor to the first row in
1136     * this <code>ResultSet</code> object.
1137     *
1138     * @return <code>true</code> if the cursor is on a valid row;
1139     * <code>false</code> if there are no rows in the result set
1140     * @exception SQLException if a database access error
1141     * occurs; this method is called on a closed result set
1142     * or the result set type is <code>TYPE_FORWARD_ONLY</code>
1143     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1144     * this method
1145     * @since 1.2
1146     */
1147    boolean first() throws SQLException;
1148
1149    /**
1150     * Moves the cursor to the last row in
1151     * this <code>ResultSet</code> object.
1152     *
1153     * @return <code>true</code> if the cursor is on a valid row;
1154     * <code>false</code> if there are no rows in the result set
1155     * @exception SQLException if a database access error
1156     * occurs; this method is called on a closed result set
1157     * or the result set type is <code>TYPE_FORWARD_ONLY</code>
1158     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1159     * this method
1160     * @since 1.2
1161     */
1162    boolean last() throws SQLException;
1163
1164    /**
1165     * Retrieves the current row number.  The first row is number 1, the
1166     * second number 2, and so on.
1167     * <p>
1168     * <strong>Note:</strong>Support for the <code>getRow</code> method
1169     * is optional for <code>ResultSet</code>s with a result
1170     * set type of <code>TYPE_FORWARD_ONLY</code>
1171     *
1172     * @return the current row number; <code>0</code> if there is no current row
1173     * @exception SQLException if a database access error occurs
1174     * or this method is called on a closed result set
1175     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1176     * this method
1177     * @since 1.2
1178     */
1179    int getRow() throws SQLException;
1180
1181    /**
1182     * Moves the cursor to the given row number in
1183     * this <code>ResultSet</code> object.
1184     *
1185     * <p>If the row number is positive, the cursor moves to
1186     * the given row number with respect to the
1187     * beginning of the result set.  The first row is row 1, the second
1188     * is row 2, and so on.
1189     *
1190     * <p>If the given row number is negative, the cursor moves to
1191     * an absolute row position with respect to
1192     * the end of the result set.  For example, calling the method
1193     * <code>absolute(-1)</code> positions the
1194     * cursor on the last row; calling the method <code>absolute(-2)</code>
1195     * moves the cursor to the next-to-last row, and so on.
1196     *
1197     * <p>If the row number specified is zero, the cursor is moved to
1198     * before the first row.
1199     *
1200     * <p>An attempt to position the cursor beyond the first/last row in
1201     * the result set leaves the cursor before the first row or after
1202     * the last row.
1203     *
1204     * <p><B>Note:</B> Calling <code>absolute(1)</code> is the same
1205     * as calling <code>first()</code>. Calling <code>absolute(-1)</code>
1206     * is the same as calling <code>last()</code>.
1207     *
1208     * @param row the number of the row to which the cursor should move.
1209     *        A value of zero indicates that the cursor will be positioned
1210     *        before the first row; a positive number indicates the row number
1211     *        counting from the beginning of the result set; a negative number
1212     *        indicates the row number counting from the end of the result set
1213     * @return <code>true</code> if the cursor is moved to a position in this
1214     * <code>ResultSet</code> object;
1215     * <code>false</code> if the cursor is before the first row or after the
1216     * last row
1217     * @exception SQLException if a database access error
1218     * occurs; this method is called on a closed result set
1219     * or the result set type is <code>TYPE_FORWARD_ONLY</code>
1220     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1221     * this method
1222     * @since 1.2
1223     */
1224    boolean absolute( int row ) throws SQLException;
1225
1226    /**
1227     * Moves the cursor a relative number of rows, either positive or negative.
1228     * Attempting to move beyond the first/last row in the
1229     * result set positions the cursor before/after the
1230     * the first/last row. Calling <code>relative(0)</code> is valid, but does
1231     * not change the cursor position.
1232     *
1233     * <p>Note: Calling the method <code>relative(1)</code>
1234     * is identical to calling the method <code>next()</code> and
1235     * calling the method <code>relative(-1)</code> is identical
1236     * to calling the method <code>previous()</code>.
1237     *
1238     * @param rows an <code>int</code> specifying the number of rows to
1239     *        move from the current row; a positive number moves the cursor
1240     *        forward; a negative number moves the cursor backward
1241     * @return <code>true</code> if the cursor is on a row;
1242     *         <code>false</code> otherwise
1243     * @exception SQLException if a database access error occurs;  this method
1244     * is called on a closed result set or the result set type is
1245     *            <code>TYPE_FORWARD_ONLY</code>
1246     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1247     * this method
1248     * @since 1.2
1249     */
1250    boolean relative( int rows ) throws SQLException;
1251
1252    /**
1253     * Moves the cursor to the previous row in this
1254     * <code>ResultSet</code> object.
1255     *<p>
1256     * When a call to the <code>previous</code> method returns <code>false</code>,
1257     * the cursor is positioned before the first row.  Any invocation of a
1258     * <code>ResultSet</code> method which requires a current row will result in a
1259     * <code>SQLException</code> being thrown.
1260     *<p>
1261     * If an input stream is open for the current row, a call to the method
1262     * <code>previous</code> will implicitly close it.  A <code>ResultSet</code>
1263     *  object's warning change is cleared when a new row is read.
1264     *<p>
1265     *
1266     * @return <code>true</code> if the cursor is now positioned on a valid row;
1267     * <code>false</code> if the cursor is positioned before the first row
1268     * @exception SQLException if a database access error
1269     * occurs; this method is called on a closed result set
1270     * or the result set type is <code>TYPE_FORWARD_ONLY</code>
1271     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1272     * this method
1273     * @since 1.2
1274     */
1275    boolean previous() throws SQLException;
1276
1277    //---------------------------------------------------------------------
1278    // Properties
1279    //---------------------------------------------------------------------
1280
1281    /**
1282     * The constant indicating that the rows in a result set will be
1283     * processed in a forward direction; first-to-last.
1284     * This constant is used by the method <code>setFetchDirection</code>
1285     * as a hint to the driver, which the driver may ignore.
1286     * @since 1.2
1287     */
1288    int FETCH_FORWARD = 1000;
1289
1290    /**
1291     * The constant indicating that the rows in a result set will be
1292     * processed in a reverse direction; last-to-first.
1293     * This constant is used by the method <code>setFetchDirection</code>
1294     * as a hint to the driver, which the driver may ignore.
1295     * @since 1.2
1296     */
1297    int FETCH_REVERSE = 1001;
1298
1299    /**
1300     * The constant indicating that the order in which rows in a
1301     * result set will be processed is unknown.
1302     * This constant is used by the method <code>setFetchDirection</code>
1303     * as a hint to the driver, which the driver may ignore.
1304     */
1305    int FETCH_UNKNOWN = 1002;
1306
1307    /**
1308     * Gives a hint as to the direction in which the rows in this
1309     * <code>ResultSet</code> object will be processed.
1310     * The initial value is determined by the
1311     * <code>Statement</code> object
1312     * that produced this <code>ResultSet</code> object.
1313     * The fetch direction may be changed at any time.
1314     *
1315     * @param direction an <code>int</code> specifying the suggested
1316     *        fetch direction; one of <code>ResultSet.FETCH_FORWARD</code>,
1317     *        <code>ResultSet.FETCH_REVERSE</code>, or
1318     *        <code>ResultSet.FETCH_UNKNOWN</code>
1319     * @exception SQLException if a database access error occurs; this
1320     * method is called on a closed result set or
1321     * the result set type is <code>TYPE_FORWARD_ONLY</code> and the fetch
1322     * direction is not <code>FETCH_FORWARD</code>
1323     * @since 1.2
1324     * @see Statement#setFetchDirection
1325     * @see #getFetchDirection
1326     */
1327    void setFetchDirection(int direction) throws SQLException;
1328
1329    /**
1330     * Retrieves the fetch direction for this
1331     * <code>ResultSet</code> object.
1332     *
1333     * @return the current fetch direction for this <code>ResultSet</code> object
1334     * @exception SQLException if a database access error occurs
1335     * or this method is called on a closed result set
1336     * @since 1.2
1337     * @see #setFetchDirection
1338     */
1339    int getFetchDirection() throws SQLException;
1340
1341    /**
1342     * Gives the JDBC driver a hint as to the number of rows that should
1343     * be fetched from the database when more rows are needed for this
1344     * <code>ResultSet</code> object.
1345     * If the fetch size specified is zero, the JDBC driver
1346     * ignores the value and is free to make its own best guess as to what
1347     * the fetch size should be.  The default value is set by the
1348     * <code>Statement</code> object
1349     * that created the result set.  The fetch size may be changed at any time.
1350     *
1351     * @param rows the number of rows to fetch
1352     * @exception SQLException if a database access error occurs; this method
1353     * is called on a closed result set or the
1354     * condition <code>rows >= 0 </code> is not satisfied
1355     * @since 1.2
1356     * @see #getFetchSize
1357     */
1358    void setFetchSize(int rows) throws SQLException;
1359
1360    /**
1361     * Retrieves the fetch size for this
1362     * <code>ResultSet</code> object.
1363     *
1364     * @return the current fetch size for this <code>ResultSet</code> object
1365     * @exception SQLException if a database access error occurs
1366     * or this method is called on a closed result set
1367     * @since 1.2
1368     * @see #setFetchSize
1369     */
1370    int getFetchSize() throws SQLException;
1371
1372    /**
1373     * The constant indicating the type for a <code>ResultSet</code> object
1374     * whose cursor may move only forward.
1375     * @since 1.2
1376     */
1377    int TYPE_FORWARD_ONLY = 1003;
1378
1379    /**
1380     * The constant indicating the type for a <code>ResultSet</code> object
1381     * that is scrollable but generally not sensitive to changes to the data
1382     * that underlies the <code>ResultSet</code>.
1383     * @since 1.2
1384     */
1385    int TYPE_SCROLL_INSENSITIVE = 1004;
1386
1387    /**
1388     * The constant indicating the type for a <code>ResultSet</code> object
1389     * that is scrollable and generally sensitive to changes to the data
1390     * that underlies the <code>ResultSet</code>.
1391     * @since 1.2
1392     */
1393    int TYPE_SCROLL_SENSITIVE = 1005;
1394
1395    /**
1396     * Retrieves the type of this <code>ResultSet</code> object.
1397     * The type is determined by the <code>Statement</code> object
1398     * that created the result set.
1399     *
1400     * @return <code>ResultSet.TYPE_FORWARD_ONLY</code>,
1401     *         <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>,
1402     *         or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
1403     * @exception SQLException if a database access error occurs
1404     * or this method is called on a closed result set
1405     * @since 1.2
1406     */
1407    int getType() throws SQLException;
1408
1409    /**
1410     * The constant indicating the concurrency mode for a
1411     * <code>ResultSet</code> object that may NOT be updated.
1412     * @since 1.2
1413     */
1414    int CONCUR_READ_ONLY = 1007;
1415
1416    /**
1417     * The constant indicating the concurrency mode for a
1418     * <code>ResultSet</code> object that may be updated.
1419     * @since 1.2
1420     */
1421    int CONCUR_UPDATABLE = 1008;
1422
1423    /**
1424     * Retrieves the concurrency mode of this <code>ResultSet</code> object.
1425     * The concurrency used is determined by the
1426     * <code>Statement</code> object that created the result set.
1427     *
1428     * @return the concurrency type, either
1429     *         <code>ResultSet.CONCUR_READ_ONLY</code>
1430     *         or <code>ResultSet.CONCUR_UPDATABLE</code>
1431     * @exception SQLException if a database access error occurs
1432     * or this method is called on a closed result set
1433     * @since 1.2
1434     */
1435    int getConcurrency() throws SQLException;
1436
1437    //---------------------------------------------------------------------
1438    // Updates
1439    //---------------------------------------------------------------------
1440
1441    /**
1442     * Retrieves whether the current row has been updated.  The value returned
1443     * depends on whether or not the result set can detect updates.
1444     * <p>
1445     * <strong>Note:</strong> Support for the <code>rowUpdated</code> method is optional with a result set
1446     * concurrency of <code>CONCUR_READ_ONLY</code>
1447     * @return <code>true</code> if the current row is detected to
1448     * have been visibly updated by the owner or another; <code>false</code> otherwise
1449     * @exception SQLException if a database access error occurs
1450     * or this method is called on a closed result set
1451     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1452     * this method
1453     * @see DatabaseMetaData#updatesAreDetected
1454     * @since 1.2
1455     */
1456    boolean rowUpdated() throws SQLException;
1457
1458    /**
1459     * Retrieves whether the current row has had an insertion.
1460     * The value returned depends on whether or not this
1461     * <code>ResultSet</code> object can detect visible inserts.
1462     * <p>
1463     * <strong>Note:</strong> Support for the <code>rowInserted</code> method is optional with a result set
1464     * concurrency of <code>CONCUR_READ_ONLY</code>
1465     * @return <code>true</code> if the current row is detected to
1466     * have been inserted; <code>false</code> otherwise
1467     * @exception SQLException if a database access error occurs
1468     * or this method is called on a closed result set
1469     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1470     * this method
1471     *
1472     * @see DatabaseMetaData#insertsAreDetected
1473     * @since 1.2
1474     */
1475    boolean rowInserted() throws SQLException;
1476
1477    /**
1478     * Retrieves whether a row has been deleted.  A deleted row may leave
1479     * a visible "hole" in a result set.  This method can be used to
1480     * detect holes in a result set.  The value returned depends on whether
1481     * or not this <code>ResultSet</code> object can detect deletions.
1482     * <p>
1483     * <strong>Note:</strong> Support for the <code>rowDeleted</code> method is optional with a result set
1484     * concurrency of <code>CONCUR_READ_ONLY</code>
1485     * @return <code>true</code> if the current row is detected to
1486     * have been deleted by the owner or another; <code>false</code> otherwise
1487     * @exception SQLException if a database access error occurs
1488     * or this method is called on a closed result set
1489     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1490     * this method
1491     *
1492     * @see DatabaseMetaData#deletesAreDetected
1493     * @since 1.2
1494     */
1495    boolean rowDeleted() throws SQLException;
1496
1497    /**
1498     * Updates the designated column with a <code>null</code> value.
1499     *
1500     * The updater methods are used to update column values in the
1501     * current row or the insert row.  The updater methods do not
1502     * update the underlying database; instead the <code>updateRow</code>
1503     * or <code>insertRow</code> methods are called to update the database.
1504     *
1505     * @param columnIndex the first column is 1, the second is 2, ...
1506     * @exception SQLException if the columnIndex is not valid;
1507     * if a database access error occurs;
1508     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1509     * or this method is called on a closed result set
1510     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1511     * this method
1512     * @since 1.2
1513     */
1514    void updateNull(int columnIndex) throws SQLException;
1515
1516    /**
1517     * Updates the designated column with a <code>boolean</code> value.
1518     * The updater methods are used to update column values in the
1519     * current row or the insert row.  The updater methods do not
1520     * update the underlying database; instead the <code>updateRow</code> or
1521     * <code>insertRow</code> methods are called to update the database.
1522     *
1523     * @param columnIndex the first column is 1, the second is 2, ...
1524     * @param x the new column value
1525     * @exception SQLException if the columnIndex is not valid;
1526     * if a database access error occurs;
1527     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1528     * or this method is called on a closed result set
1529     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1530     * this method
1531     * @since 1.2
1532     */
1533    void updateBoolean(int columnIndex, boolean x) throws SQLException;
1534
1535    /**
1536     * Updates the designated column with a <code>byte</code> value.
1537     * The updater methods are used to update column values in the
1538     * current row or the insert row.  The updater methods do not
1539     * update the underlying database; instead the <code>updateRow</code> or
1540     * <code>insertRow</code> methods are called to update the database.
1541     *
1542     *
1543     * @param columnIndex the first column is 1, the second is 2, ...
1544     * @param x the new column value
1545     * @exception SQLException if the columnIndex is not valid;
1546     * if a database access error occurs;
1547     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1548     * or this method is called on a closed result set
1549     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1550     * this method
1551     * @since 1.2
1552     */
1553    void updateByte(int columnIndex, byte x) throws SQLException;
1554
1555    /**
1556     * Updates the designated column with a <code>short</code> value.
1557     * The updater methods are used to update column values in the
1558     * current row or the insert row.  The updater methods do not
1559     * update the underlying database; instead the <code>updateRow</code> or
1560     * <code>insertRow</code> methods are called to update the database.
1561     *
1562     * @param columnIndex the first column is 1, the second is 2, ...
1563     * @param x the new column value
1564     * @exception SQLException if the columnIndex is not valid;
1565     * if a database access error occurs;
1566     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1567     * or this method is called on a closed result set
1568     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1569     * this method
1570     * @since 1.2
1571     */
1572    void updateShort(int columnIndex, short x) throws SQLException;
1573
1574    /**
1575     * Updates the designated column with an <code>int</code> value.
1576     * The updater methods are used to update column values in the
1577     * current row or the insert row.  The updater methods do not
1578     * update the underlying database; instead the <code>updateRow</code> or
1579     * <code>insertRow</code> methods are called to update the database.
1580     *
1581     * @param columnIndex the first column is 1, the second is 2, ...
1582     * @param x the new column value
1583     * @exception SQLException if the columnIndex is not valid;
1584     * if a database access error occurs;
1585     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1586     * or this method is called on a closed result set
1587     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1588     * this method
1589     * @since 1.2
1590     */
1591    void updateInt(int columnIndex, int x) throws SQLException;
1592
1593    /**
1594     * Updates the designated column with a <code>long</code> value.
1595     * The updater methods are used to update column values in the
1596     * current row or the insert row.  The updater methods do not
1597     * update the underlying database; instead the <code>updateRow</code> or
1598     * <code>insertRow</code> methods are called to update the database.
1599     *
1600     * @param columnIndex the first column is 1, the second is 2, ...
1601     * @param x the new column value
1602     * @exception SQLException if the columnIndex is not valid;
1603     * if a database access error occurs;
1604     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1605     * or this method is called on a closed result set
1606     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1607     * this method
1608     * @since 1.2
1609     */
1610    void updateLong(int columnIndex, long x) throws SQLException;
1611
1612    /**
1613     * Updates the designated column with a <code>float</code> value.
1614     * The updater methods are used to update column values in the
1615     * current row or the insert row.  The updater methods do not
1616     * update the underlying database; instead the <code>updateRow</code> or
1617     * <code>insertRow</code> methods are called to update the database.
1618     *
1619     * @param columnIndex the first column is 1, the second is 2, ...
1620     * @param x the new column value
1621     * @exception SQLException if the columnIndex is not valid;
1622     * if a database access error occurs;
1623     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1624     * or this method is called on a closed result set
1625     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1626     * this method
1627     * @since 1.2
1628     */
1629    void updateFloat(int columnIndex, float x) throws SQLException;
1630
1631    /**
1632     * Updates the designated column with a <code>double</code> value.
1633     * The updater methods are used to update column values in the
1634     * current row or the insert row.  The updater methods do not
1635     * update the underlying database; instead the <code>updateRow</code> or
1636     * <code>insertRow</code> methods are called to update the database.
1637     *
1638     * @param columnIndex the first column is 1, the second is 2, ...
1639     * @param x the new column value
1640     * @exception SQLException if the columnIndex is not valid;
1641     * if a database access error occurs;
1642     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1643     * or this method is called on a closed result set
1644     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1645     * this method
1646     * @since 1.2
1647     */
1648    void updateDouble(int columnIndex, double x) throws SQLException;
1649
1650    /**
1651     * Updates the designated column with a <code>java.math.BigDecimal</code>
1652     * value.
1653     * The updater methods are used to update column values in the
1654     * current row or the insert row.  The updater methods do not
1655     * update the underlying database; instead the <code>updateRow</code> or
1656     * <code>insertRow</code> methods are called to update the database.
1657     *
1658     * @param columnIndex the first column is 1, the second is 2, ...
1659     * @param x the new column value
1660     * @exception SQLException if the columnIndex is not valid;
1661     * if a database access error occurs;
1662     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1663     * or this method is called on a closed result set
1664     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1665     * this method
1666     * @since 1.2
1667     */
1668    void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException;
1669
1670    /**
1671     * Updates the designated column with a <code>String</code> value.
1672     * The updater methods are used to update column values in the
1673     * current row or the insert row.  The updater methods do not
1674     * update the underlying database; instead the <code>updateRow</code> or
1675     * <code>insertRow</code> methods are called to update the database.
1676     *
1677     * @param columnIndex the first column is 1, the second is 2, ...
1678     * @param x the new column value
1679     * @exception SQLException if the columnIndex is not valid;
1680     * if a database access error occurs;
1681     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1682     * or this method is called on a closed result set
1683     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1684     * this method
1685     * @since 1.2
1686     */
1687    void updateString(int columnIndex, String x) throws SQLException;
1688
1689    /**
1690     * Updates the designated column with a <code>byte</code> array value.
1691     * The updater methods are used to update column values in the
1692     * current row or the insert row.  The updater methods do not
1693     * update the underlying database; instead the <code>updateRow</code> or
1694     * <code>insertRow</code> methods are called to update the database.
1695     *
1696     * @param columnIndex the first column is 1, the second is 2, ...
1697     * @param x the new column value
1698     * @exception SQLException if the columnIndex is not valid;
1699     * if a database access error occurs;
1700     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1701     * or this method is called on a closed result set
1702     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1703     * this method
1704     * @since 1.2
1705     */
1706    void updateBytes(int columnIndex, byte x[]) throws SQLException;
1707
1708    /**
1709     * Updates the designated column with a <code>java.sql.Date</code> value.
1710     * The updater methods are used to update column values in the
1711     * current row or the insert row.  The updater methods do not
1712     * update the underlying database; instead the <code>updateRow</code> or
1713     * <code>insertRow</code> methods are called to update the database.
1714     *
1715     * @param columnIndex the first column is 1, the second is 2, ...
1716     * @param x the new column value
1717     * @exception SQLException if the columnIndex is not valid;
1718     * if a database access error occurs;
1719     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1720     * or this method is called on a closed result set
1721     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1722     * this method
1723     * @since 1.2
1724     */
1725    void updateDate(int columnIndex, java.sql.Date x) throws SQLException;
1726
1727    /**
1728     * Updates the designated column with a <code>java.sql.Time</code> value.
1729     * The updater methods are used to update column values in the
1730     * current row or the insert row.  The updater methods do not
1731     * update the underlying database; instead the <code>updateRow</code> or
1732     * <code>insertRow</code> methods are called to update the database.
1733     *
1734     * @param columnIndex the first column is 1, the second is 2, ...
1735     * @param x the new column value
1736     * @exception SQLException if the columnIndex is not valid;
1737     * if a database access error occurs;
1738     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1739     * or this method is called on a closed result set
1740     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1741     * this method
1742     * @since 1.2
1743     */
1744    void updateTime(int columnIndex, java.sql.Time x) throws SQLException;
1745
1746    /**
1747     * Updates the designated column with a <code>java.sql.Timestamp</code>
1748     * value.
1749     * The updater methods are used to update column values in the
1750     * current row or the insert row.  The updater methods do not
1751     * update the underlying database; instead the <code>updateRow</code> or
1752     * <code>insertRow</code> methods are called to update the database.
1753     *
1754     * @param columnIndex the first column is 1, the second is 2, ...
1755     * @param x the new column value
1756     * @exception SQLException if the columnIndex is not valid;
1757     * if a database access error occurs;
1758     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1759     * or this method is called on a closed result set
1760     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1761     * this method
1762     * @since 1.2
1763     */
1764    void updateTimestamp(int columnIndex, java.sql.Timestamp x)
1765      throws SQLException;
1766
1767    /**
1768     * Updates the designated column with an ascii stream value, which will have
1769     * the specified number of bytes.
1770     * The updater methods are used to update column values in the
1771     * current row or the insert row.  The updater methods do not
1772     * update the underlying database; instead the <code>updateRow</code> or
1773     * <code>insertRow</code> methods are called to update the database.
1774     *
1775     * @param columnIndex the first column is 1, the second is 2, ...
1776     * @param x the new column value
1777     * @param length the length of the stream
1778     * @exception SQLException if the columnIndex is not valid;
1779     * if a database access error occurs;
1780     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1781     * or this method is called on a closed result set
1782     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1783     * this method
1784     * @since 1.2
1785     */
1786    void updateAsciiStream(int columnIndex,
1787                           java.io.InputStream x,
1788                           int length) throws SQLException;
1789
1790    /**
1791     * Updates the designated column with a binary stream value, which will have
1792     * the specified number of bytes.
1793     * The updater methods are used to update column values in the
1794     * current row or the insert row.  The updater methods do not
1795     * update the underlying database; instead the <code>updateRow</code> or
1796     * <code>insertRow</code> methods are called to update the database.
1797     *
1798     * @param columnIndex the first column is 1, the second is 2, ...
1799     * @param x the new column value
1800     * @param length the length of the stream
1801     * @exception SQLException if the columnIndex is not valid;
1802     * if a database access error occurs;
1803     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1804     * or this method is called on a closed result set
1805     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1806     * this method
1807     * @since 1.2
1808     */
1809    void updateBinaryStream(int columnIndex,
1810                            java.io.InputStream x,
1811                            int length) throws SQLException;
1812
1813    /**
1814     * Updates the designated column with a character stream value, which will have
1815     * the specified number of bytes.
1816     * The updater methods are used to update column values in the
1817     * current row or the insert row.  The updater methods do not
1818     * update the underlying database; instead the <code>updateRow</code> or
1819     * <code>insertRow</code> methods are called to update the database.
1820     *
1821     * @param columnIndex the first column is 1, the second is 2, ...
1822     * @param x the new column value
1823     * @param length the length of the stream
1824     * @exception SQLException if the columnIndex is not valid;
1825     * if a database access error occurs;
1826     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1827     * or this method is called on a closed result set
1828     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1829     * this method
1830     * @since 1.2
1831     */
1832    void updateCharacterStream(int columnIndex,
1833                             java.io.Reader x,
1834                             int length) throws SQLException;
1835
1836    /**
1837     * Updates the designated column with an <code>Object</code> value.
1838     * The updater methods are used to update column values in the
1839     * current row or the insert row.  The updater methods do not
1840     * update the underlying database; instead the <code>updateRow</code> or
1841     * <code>insertRow</code> methods are called to update the database.
1842     *<p>
1843     * If the second argument is an <code>InputStream</code> then the stream must contain
1844     * the number of bytes specified by scaleOrLength.  If the second argument is a
1845     * <code>Reader</code> then the reader must contain the number of characters specified
1846     * by scaleOrLength. If these conditions are not true the driver will generate a
1847     * <code>SQLException</code> when the statement is executed.
1848     *
1849     * @param columnIndex the first column is 1, the second is 2, ...
1850     * @param x the new column value
1851     * @param scaleOrLength for an object of <code>java.math.BigDecimal</code> ,
1852     *          this is the number of digits after the decimal point. For
1853     *          Java Object types <code>InputStream</code> and <code>Reader</code>,
1854     *          this is the length
1855     *          of the data in the stream or reader.  For all other types,
1856     *          this value will be ignored.
1857     * @exception SQLException if the columnIndex is not valid;
1858     * if a database access error occurs;
1859     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1860     * or this method is called on a closed result set
1861     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1862     * this method
1863     * @since 1.2
1864     */
1865    void updateObject(int columnIndex, Object x, int scaleOrLength)
1866      throws SQLException;
1867
1868    /**
1869     * Updates the designated column with an <code>Object</code> value.
1870     * The updater methods are used to update column values in the
1871     * current row or the insert row.  The updater methods do not
1872     * update the underlying database; instead the <code>updateRow</code> or
1873     * <code>insertRow</code> methods are called to update the database.
1874     *
1875     * @param columnIndex the first column is 1, the second is 2, ...
1876     * @param x the new column value
1877     * @exception SQLException if the columnIndex is not valid;
1878     * if a database access error occurs;
1879     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1880     * or this method is called on a closed result set
1881     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1882     * this method
1883     * @since 1.2
1884     */
1885    void updateObject(int columnIndex, Object x) throws SQLException;
1886
1887    /**
1888     * Updates the designated column with a <code>null</code> value.
1889     * The updater methods are used to update column values in the
1890     * current row or the insert row.  The updater methods do not
1891     * update the underlying database; instead the <code>updateRow</code> or
1892     * <code>insertRow</code> methods are called to update the database.
1893     *
1894     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1895     * @exception SQLException if the columnLabel is not valid;
1896     * if a database access error occurs;
1897     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1898     * or this method is called on a closed result set
1899     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1900     * this method
1901     * @since 1.2
1902     */
1903    void updateNull(String columnLabel) throws SQLException;
1904
1905    /**
1906     * Updates the designated column with a <code>boolean</code> value.
1907     * The updater methods are used to update column values in the
1908     * current row or the insert row.  The updater methods do not
1909     * update the underlying database; instead the <code>updateRow</code> or
1910     * <code>insertRow</code> methods are called to update the database.
1911     *
1912     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1913     * @param x the new column value
1914     * @exception SQLException if the columnLabel is not valid;
1915     * if a database access error occurs;
1916     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1917     * or this method is called on a closed result set
1918     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1919     * this method
1920     * @since 1.2
1921     */
1922    void updateBoolean(String columnLabel, boolean x) throws SQLException;
1923
1924    /**
1925     * Updates the designated column with a <code>byte</code> value.
1926     * The updater methods are used to update column values in the
1927     * current row or the insert row.  The updater methods do not
1928     * update the underlying database; instead the <code>updateRow</code> or
1929     * <code>insertRow</code> methods are called to update the database.
1930     *
1931     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1932     * @param x the new column value
1933     * @exception SQLException if the columnLabel is not valid;
1934     * if a database access error occurs;
1935     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1936     * or this method is called on a closed result set
1937     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1938     * this method
1939     * @since 1.2
1940     */
1941    void updateByte(String columnLabel, byte x) throws SQLException;
1942
1943    /**
1944     * Updates the designated column with a <code>short</code> value.
1945     * The updater methods are used to update column values in the
1946     * current row or the insert row.  The updater methods do not
1947     * update the underlying database; instead the <code>updateRow</code> or
1948     * <code>insertRow</code> methods are called to update the database.
1949     *
1950     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1951     * @param x the new column value
1952     * @exception SQLException if the columnLabel is not valid;
1953     * if a database access error occurs;
1954     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1955     * or this method is called on a closed result set
1956     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1957     * this method
1958     * @since 1.2
1959     */
1960    void updateShort(String columnLabel, short x) throws SQLException;
1961
1962    /**
1963     * Updates the designated column with an <code>int</code> value.
1964     * The updater methods are used to update column values in the
1965     * current row or the insert row.  The updater methods do not
1966     * update the underlying database; instead the <code>updateRow</code> or
1967     * <code>insertRow</code> methods are called to update the database.
1968     *
1969     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1970     * @param x the new column value
1971     * @exception SQLException if the columnLabel is not valid;
1972     * if a database access error occurs;
1973     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1974     * or this method is called on a closed result set
1975     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1976     * this method
1977     * @since 1.2
1978     */
1979    void updateInt(String columnLabel, int x) throws SQLException;
1980
1981    /**
1982     * Updates the designated column with a <code>long</code> value.
1983     * The updater methods are used to update column values in the
1984     * current row or the insert row.  The updater methods do not
1985     * update the underlying database; instead the <code>updateRow</code> or
1986     * <code>insertRow</code> methods are called to update the database.
1987     *
1988     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
1989     * @param x the new column value
1990     * @exception SQLException if the columnLabel is not valid;
1991     * if a database access error occurs;
1992     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
1993     * or this method is called on a closed result set
1994     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
1995     * this method
1996     * @since 1.2
1997     */
1998    void updateLong(String columnLabel, long x) throws SQLException;
1999
2000    /**
2001     * Updates the designated column with a <code>float </code> value.
2002     * The updater methods are used to update column values in the
2003     * current row or the insert row.  The updater methods do not
2004     * update the underlying database; instead the <code>updateRow</code> or
2005     * <code>insertRow</code> methods are called to update the database.
2006     *
2007     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2008     * @param x the new column value
2009     * @exception SQLException if the columnLabel is not valid;
2010     * if a database access error occurs;
2011     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2012     * or this method is called on a closed result set
2013     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2014     * this method
2015     * @since 1.2
2016     */
2017    void updateFloat(String columnLabel, float x) throws SQLException;
2018
2019    /**
2020     * Updates the designated column with a <code>double</code> value.
2021     * The updater methods are used to update column values in the
2022     * current row or the insert row.  The updater methods do not
2023     * update the underlying database; instead the <code>updateRow</code> or
2024     * <code>insertRow</code> methods are called to update the database.
2025     *
2026     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2027     * @param x the new column value
2028     * @exception SQLException if the columnLabel is not valid;
2029     * if a database access error occurs;
2030     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2031     * or this method is called on a closed result set
2032     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2033     * this method
2034     * @since 1.2
2035     */
2036    void updateDouble(String columnLabel, double x) throws SQLException;
2037
2038    /**
2039     * Updates the designated column with a <code>java.sql.BigDecimal</code>
2040     * value.
2041     * The updater methods are used to update column values in the
2042     * current row or the insert row.  The updater methods do not
2043     * update the underlying database; instead the <code>updateRow</code> or
2044     * <code>insertRow</code> methods are called to update the database.
2045     *
2046     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2047     * @param x the new column value
2048     * @exception SQLException if the columnLabel is not valid;
2049     * if a database access error occurs;
2050     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2051     * or this method is called on a closed result set
2052     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2053     * this method
2054     * @since 1.2
2055     */
2056    void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException;
2057
2058    /**
2059     * Updates the designated column with a <code>String</code> value.
2060     * The updater methods are used to update column values in the
2061     * current row or the insert row.  The updater methods do not
2062     * update the underlying database; instead the <code>updateRow</code> or
2063     * <code>insertRow</code> methods are called to update the database.
2064     *
2065     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2066     * @param x the new column value
2067     * @exception SQLException if the columnLabel is not valid;
2068     * if a database access error occurs;
2069     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2070     * or this method is called on a closed result set
2071     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2072     * this method
2073     * @since 1.2
2074     */
2075    void updateString(String columnLabel, String x) throws SQLException;
2076
2077    /**
2078     * Updates the designated column with a byte array value.
2079     *
2080     * The updater methods are used to update column values in the
2081     * current row or the insert row.  The updater methods do not
2082     * update the underlying database; instead the <code>updateRow</code>
2083     * or <code>insertRow</code> methods are called to update the database.
2084     *
2085     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2086     * @param x the new column value
2087     * @exception SQLException if the columnLabel is not valid;
2088     * if a database access error occurs;
2089     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2090     * or this method is called on a closed result set
2091     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2092     * this method
2093     * @since 1.2
2094     */
2095    void updateBytes(String columnLabel, byte x[]) throws SQLException;
2096
2097    /**
2098     * Updates the designated column with a <code>java.sql.Date</code> value.
2099     * The updater methods are used to update column values in the
2100     * current row or the insert row.  The updater methods do not
2101     * update the underlying database; instead the <code>updateRow</code> or
2102     * <code>insertRow</code> methods are called to update the database.
2103     *
2104     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2105     * @param x the new column value
2106     * @exception SQLException if the columnLabel is not valid;
2107     * if a database access error occurs;
2108     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2109     * or this method is called on a closed result set
2110     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2111     * this method
2112     * @since 1.2
2113     */
2114    void updateDate(String columnLabel, java.sql.Date x) throws SQLException;
2115
2116    /**
2117     * Updates the designated column with a <code>java.sql.Time</code> value.
2118     * The updater methods are used to update column values in the
2119     * current row or the insert row.  The updater methods do not
2120     * update the underlying database; instead the <code>updateRow</code> or
2121     * <code>insertRow</code> methods are called to update the database.
2122     *
2123     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2124     * @param x the new column value
2125     * @exception SQLException if the columnLabel is not valid;
2126     * if a database access error occurs;
2127     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2128     * or this method is called on a closed result set
2129     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2130     * this method
2131     * @since 1.2
2132     */
2133    void updateTime(String columnLabel, java.sql.Time x) throws SQLException;
2134
2135    /**
2136     * Updates the designated column with a <code>java.sql.Timestamp</code>
2137     * value.
2138     * The updater methods are used to update column values in the
2139     * current row or the insert row.  The updater methods do not
2140     * update the underlying database; instead the <code>updateRow</code> or
2141     * <code>insertRow</code> methods are called to update the database.
2142     *
2143     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2144     * @param x the new column value
2145     * @exception SQLException if the columnLabel is not valid;
2146     * if a database access error occurs;
2147     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2148     * or this method is called on a closed result set
2149     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2150     * this method
2151     * @since 1.2
2152     */
2153    void updateTimestamp(String columnLabel, java.sql.Timestamp x)
2154      throws SQLException;
2155
2156    /**
2157     * Updates the designated column with an ascii stream value, which will have
2158     * the specified number of bytes.
2159     * The updater methods are used to update column values in the
2160     * current row or the insert row.  The updater methods do not
2161     * update the underlying database; instead the <code>updateRow</code> or
2162     * <code>insertRow</code> methods are called to update the database.
2163     *
2164     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2165     * @param x the new column value
2166     * @param length the length of the stream
2167     * @exception SQLException if the columnLabel is not valid;
2168     * if a database access error occurs;
2169     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2170     * or this method is called on a closed result set
2171     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2172     * this method
2173     * @since 1.2
2174     */
2175    void updateAsciiStream(String columnLabel,
2176                           java.io.InputStream x,
2177                           int length) throws SQLException;
2178
2179    /**
2180     * Updates the designated column with a binary stream value, which will have
2181     * the specified number of bytes.
2182     * The updater methods are used to update column values in the
2183     * current row or the insert row.  The updater methods do not
2184     * update the underlying database; instead the <code>updateRow</code> or
2185     * <code>insertRow</code> methods are called to update the database.
2186     *
2187     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2188     * @param x the new column value
2189     * @param length the length of the stream
2190     * @exception SQLException if the columnLabel is not valid;
2191     * if a database access error occurs;
2192     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2193     * or this method is called on a closed result set
2194     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2195     * this method
2196     * @since 1.2
2197     */
2198    void updateBinaryStream(String columnLabel,
2199                            java.io.InputStream x,
2200                            int length) throws SQLException;
2201
2202    /**
2203     * Updates the designated column with a character stream value, which will have
2204     * the specified number of bytes.
2205     * The updater methods are used to update column values in the
2206     * current row or the insert row.  The updater methods do not
2207     * update the underlying database; instead the <code>updateRow</code> or
2208     * <code>insertRow</code> methods are called to update the database.
2209     *
2210     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2211     * @param reader the <code>java.io.Reader</code> object containing
2212     *        the new column value
2213     * @param length the length of the stream
2214     * @exception SQLException if the columnLabel is not valid;
2215     * if a database access error occurs;
2216     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2217     * or this method is called on a closed result set
2218     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2219     * this method
2220     * @since 1.2
2221     */
2222    void updateCharacterStream(String columnLabel,
2223                             java.io.Reader reader,
2224                             int length) throws SQLException;
2225
2226    /**
2227     * Updates the designated column with an <code>Object</code> value.
2228     * The updater methods are used to update column values in the
2229     * current row or the insert row.  The updater methods do not
2230     * update the underlying database; instead the <code>updateRow</code> or
2231     * <code>insertRow</code> methods are called to update the database.
2232     *<p>
2233     * If the second argument is an <code>InputStream</code> then the stream must contain
2234     * the number of bytes specified by scaleOrLength.  If the second argument is a
2235     * <code>Reader</code> then the reader must contain the number of characters specified
2236     * by scaleOrLength. If these conditions are not true the driver will generate a
2237     * <code>SQLException</code> when the statement is executed.
2238     *
2239     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2240     * @param x the new column value
2241     * @param scaleOrLength for an object of <code>java.math.BigDecimal</code> ,
2242     *          this is the number of digits after the decimal point. For
2243     *          Java Object types <code>InputStream</code> and <code>Reader</code>,
2244     *          this is the length
2245     *          of the data in the stream or reader.  For all other types,
2246     *          this value will be ignored.
2247     * @exception SQLException if the columnLabel is not valid;
2248     * if a database access error occurs;
2249     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2250     * or this method is called on a closed result set
2251     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2252     * this method
2253     * @since 1.2
2254     */
2255    void updateObject(String columnLabel, Object x, int scaleOrLength)
2256      throws SQLException;
2257
2258    /**
2259     * Updates the designated column with an <code>Object</code> value.
2260     * The updater methods are used to update column values in the
2261     * current row or the insert row.  The updater methods do not
2262     * update the underlying database; instead the <code>updateRow</code> or
2263     * <code>insertRow</code> methods are called to update the database.
2264     *
2265     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2266     * @param x the new column value
2267     * @exception SQLException if the columnLabel is not valid;
2268     * if a database access error occurs;
2269     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2270     * or this method is called on a closed result set
2271     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2272     * this method
2273     * @since 1.2
2274     */
2275    void updateObject(String columnLabel, Object x) throws SQLException;
2276
2277    /**
2278     * Inserts the contents of the insert row into this
2279     * <code>ResultSet</code> object and into the database.
2280     * The cursor must be on the insert row when this method is called.
2281     *
2282     * @exception SQLException if a database access error occurs;
2283     * the result set concurrency is <code>CONCUR_READ_ONLY</code>,
2284     * this method is called on a closed result set,
2285     * if this method is called when the cursor is not on the insert row,
2286     * or if not all of non-nullable columns in
2287     * the insert row have been given a non-null value
2288     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2289     * this method
2290     * @since 1.2
2291     */
2292    void insertRow() throws SQLException;
2293
2294    /**
2295     * Updates the underlying database with the new contents of the
2296     * current row of this <code>ResultSet</code> object.
2297     * This method cannot be called when the cursor is on the insert row.
2298     *
2299     * @exception SQLException if a database access error occurs;
2300     * the result set concurrency is <code>CONCUR_READ_ONLY</code>;
2301     *  this method is called on a closed result set or
2302     * if this method is called when the cursor is on the insert row
2303     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2304     * this method
2305     * @since 1.2
2306     */
2307    void updateRow() throws SQLException;
2308
2309    /**
2310     * Deletes the current row from this <code>ResultSet</code> object
2311     * and from the underlying database.  This method cannot be called when
2312     * the cursor is on the insert row.
2313     *
2314     * @exception SQLException if a database access error occurs;
2315     * the result set concurrency is <code>CONCUR_READ_ONLY</code>;
2316     * this method is called on a closed result set
2317     * or if this method is called when the cursor is on the insert row
2318     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2319     * this method
2320     * @since 1.2
2321     */
2322    void deleteRow() throws SQLException;
2323
2324    /**
2325     * Refreshes the current row with its most recent value in
2326     * the database.  This method cannot be called when
2327     * the cursor is on the insert row.
2328     *
2329     * <P>The <code>refreshRow</code> method provides a way for an
2330     * application to
2331     * explicitly tell the JDBC driver to refetch a row(s) from the
2332     * database.  An application may want to call <code>refreshRow</code> when
2333     * caching or prefetching is being done by the JDBC driver to
2334     * fetch the latest value of a row from the database.  The JDBC driver
2335     * may actually refresh multiple rows at once if the fetch size is
2336     * greater than one.
2337     *
2338     * <P> All values are refetched subject to the transaction isolation
2339     * level and cursor sensitivity.  If <code>refreshRow</code> is called after
2340     * calling an updater method, but before calling
2341     * the method <code>updateRow</code>, then the
2342     * updates made to the row are lost.  Calling the method
2343     * <code>refreshRow</code> frequently will likely slow performance.
2344     *
2345     * @exception SQLException if a database access error
2346     * occurs; this method is called on a closed result set;
2347     * the result set type is <code>TYPE_FORWARD_ONLY</code> or if this
2348     * method is called when the cursor is on the insert row
2349     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2350     * this method or this method is not supported for the specified result
2351     * set type and result set concurrency.
2352     * @since 1.2
2353     */
2354    void refreshRow() throws SQLException;
2355
2356    /**
2357     * Cancels the updates made to the current row in this
2358     * <code>ResultSet</code> object.
2359     * This method may be called after calling an
2360     * updater method(s) and before calling
2361     * the method <code>updateRow</code> to roll back
2362     * the updates made to a row.  If no updates have been made or
2363     * <code>updateRow</code> has already been called, this method has no
2364     * effect.
2365     *
2366     * @exception SQLException if a database access error
2367     *            occurs; this method is called on a closed result set;
2368     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2369     * or if this method is called when the cursor is
2370     *            on the insert row
2371      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2372     * this method
2373     * @since 1.2
2374     */
2375    void cancelRowUpdates() throws SQLException;
2376
2377    /**
2378     * Moves the cursor to the insert row.  The current cursor position is
2379     * remembered while the cursor is positioned on the insert row.
2380     *
2381     * The insert row is a special row associated with an updatable
2382     * result set.  It is essentially a buffer where a new row may
2383     * be constructed by calling the updater methods prior to
2384     * inserting the row into the result set.
2385     *
2386     * Only the updater, getter,
2387     * and <code>insertRow</code> methods may be
2388     * called when the cursor is on the insert row.  All of the columns in
2389     * a result set must be given a value each time this method is
2390     * called before calling <code>insertRow</code>.
2391     * An updater method must be called before a
2392     * getter method can be called on a column value.
2393     *
2394     * @exception SQLException if a database access error occurs; this
2395     * method is called on a closed result set
2396     * or the result set concurrency is <code>CONCUR_READ_ONLY</code>
2397     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2398     * this method
2399     * @since 1.2
2400     */
2401    void moveToInsertRow() throws SQLException;
2402
2403    /**
2404     * Moves the cursor to the remembered cursor position, usually the
2405     * current row.  This method has no effect if the cursor is not on
2406     * the insert row.
2407     *
2408     * @exception SQLException if a database access error occurs; this
2409     * method is called on a closed result set
2410     *  or the result set concurrency is <code>CONCUR_READ_ONLY</code>
2411     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2412     * this method
2413     * @since 1.2
2414     */
2415    void moveToCurrentRow() throws SQLException;
2416
2417    /**
2418     * Retrieves the <code>Statement</code> object that produced this
2419     * <code>ResultSet</code> object.
2420     * If the result set was generated some other way, such as by a
2421     * <code>DatabaseMetaData</code> method, this method  may return
2422     * <code>null</code>.
2423     *
2424     * @return the <code>Statment</code> object that produced
2425     * this <code>ResultSet</code> object or <code>null</code>
2426     * if the result set was produced some other way
2427     * @exception SQLException if a database access error occurs
2428     * or this method is called on a closed result set
2429     * @since 1.2
2430     */
2431    Statement getStatement() throws SQLException;
2432
2433    /**
2434     * Retrieves the value of the designated column in the current row
2435     * of this <code>ResultSet</code> object as an <code>Object</code>
2436     * in the Java programming language.
2437     * If the value is an SQL <code>NULL</code>,
2438     * the driver returns a Java <code>null</code>.
2439     * This method uses the given <code>Map</code> object
2440     * for the custom mapping of the
2441     * SQL structured or distinct type that is being retrieved.
2442     *
2443     * @param columnIndex the first column is 1, the second is 2, ...
2444     * @param map a <code>java.util.Map</code> object that contains the mapping
2445     * from SQL type names to classes in the Java programming language
2446     * @return an <code>Object</code> in the Java programming language
2447     * representing the SQL value
2448     * @exception SQLException if the columnIndex is not valid;
2449     * if a database access error occurs
2450     * or this method is called on a closed result set
2451     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2452     * this method
2453     * @since 1.2
2454     */
2455    Object getObject(int columnIndex, java.util.Map<String,Class<?>> map)
2456        throws SQLException;
2457
2458    /**
2459     * Retrieves the value of the designated column in the current row
2460     * of this <code>ResultSet</code> object as a <code>Ref</code> object
2461     * in the Java programming language.
2462     *
2463     * @param columnIndex the first column is 1, the second is 2, ...
2464     * @return a <code>Ref</code> object representing an SQL <code>REF</code>
2465     *         value
2466     * @exception SQLException if the columnIndex is not valid;
2467     * if a database access error occurs
2468     * or this method is called on a closed result set
2469     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2470     * this method
2471     * @since 1.2
2472     */
2473    Ref getRef(int columnIndex) throws SQLException;
2474
2475    /**
2476     * Retrieves the value of the designated column in the current row
2477     * of this <code>ResultSet</code> object as a <code>Blob</code> object
2478     * in the Java programming language.
2479     *
2480     * @param columnIndex the first column is 1, the second is 2, ...
2481     * @return a <code>Blob</code> object representing the SQL
2482     *         <code>BLOB</code> value in the specified column
2483     * @exception SQLException if the columnIndex is not valid;
2484     * if a database access error occurs
2485     * or this method is called on a closed result set
2486     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2487     * this method
2488     * @since 1.2
2489     */
2490    Blob getBlob(int columnIndex) throws SQLException;
2491
2492    /**
2493     * Retrieves the value of the designated column in the current row
2494     * of this <code>ResultSet</code> object as a <code>Clob</code> object
2495     * in the Java programming language.
2496     *
2497     * @param columnIndex the first column is 1, the second is 2, ...
2498     * @return a <code>Clob</code> object representing the SQL
2499     *         <code>CLOB</code> value in the specified column
2500     * @exception SQLException if the columnIndex is not valid;
2501     * if a database access error occurs
2502     * or this method is called on a closed result set
2503     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2504     * this method
2505     * @since 1.2
2506     */
2507    Clob getClob(int columnIndex) throws SQLException;
2508
2509    /**
2510     * Retrieves the value of the designated column in the current row
2511     * of this <code>ResultSet</code> object as an <code>Array</code> object
2512     * in the Java programming language.
2513     *
2514     * @param columnIndex the first column is 1, the second is 2, ...
2515     * @return an <code>Array</code> object representing the SQL
2516     *         <code>ARRAY</code> value in the specified column
2517     * @exception SQLException if the columnIndex is not valid;
2518     * if a database access error occurs
2519     * or this method is called on a closed result set
2520      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2521     * this method
2522     * @since 1.2
2523     */
2524    Array getArray(int columnIndex) throws SQLException;
2525
2526    /**
2527     * Retrieves the value of the designated column in the current row
2528     * of this <code>ResultSet</code> object as an <code>Object</code>
2529     * in the Java programming language.
2530     * If the value is an SQL <code>NULL</code>,
2531     * the driver returns a Java <code>null</code>.
2532     * This method uses the specified <code>Map</code> object for
2533     * custom mapping if appropriate.
2534     *
2535     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2536     * @param map a <code>java.util.Map</code> object that contains the mapping
2537     * from SQL type names to classes in the Java programming language
2538     * @return an <code>Object</code> representing the SQL value in the
2539     *         specified column
2540     * @exception SQLException if the columnLabel is not valid;
2541     * if a database access error occurs
2542     * or this method is called on a closed result set
2543     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2544     * this method
2545     * @since 1.2
2546     */
2547    Object getObject(String columnLabel, java.util.Map<String,Class<?>> map)
2548      throws SQLException;
2549
2550    /**
2551     * Retrieves the value of the designated column in the current row
2552     * of this <code>ResultSet</code> object as a <code>Ref</code> object
2553     * in the Java programming language.
2554     *
2555     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2556     * @return a <code>Ref</code> object representing the SQL <code>REF</code>
2557     *         value in the specified column
2558     * @exception SQLException if the columnLabel is not valid;
2559     * if a database access error occurs
2560     * or this method is called on a closed result set
2561      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2562     * this method
2563     * @since 1.2
2564     */
2565    Ref getRef(String columnLabel) throws SQLException;
2566
2567    /**
2568     * Retrieves the value of the designated column in the current row
2569     * of this <code>ResultSet</code> object as a <code>Blob</code> object
2570     * in the Java programming language.
2571     *
2572     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2573     * @return a <code>Blob</code> object representing the SQL <code>BLOB</code>
2574     *         value in the specified column
2575     * @exception SQLException if the columnLabel is not valid;
2576     * if a database access error occurs
2577     * or this method is called on a closed result set
2578     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2579     * this method
2580     * @since 1.2
2581     */
2582    Blob getBlob(String columnLabel) throws SQLException;
2583
2584    /**
2585     * Retrieves the value of the designated column in the current row
2586     * of this <code>ResultSet</code> object as a <code>Clob</code> object
2587     * in the Java programming language.
2588     *
2589     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2590     * @return a <code>Clob</code> object representing the SQL <code>CLOB</code>
2591     * value in the specified column
2592     * @exception SQLException if the columnLabel is not valid;
2593     * if a database access error occurs
2594     * or this method is called on a closed result set
2595      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2596     * this method
2597     * @since 1.2
2598     */
2599    Clob getClob(String columnLabel) throws SQLException;
2600
2601    /**
2602     * Retrieves the value of the designated column in the current row
2603     * of this <code>ResultSet</code> object as an <code>Array</code> object
2604     * in the Java programming language.
2605     *
2606     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2607     * @return an <code>Array</code> object representing the SQL <code>ARRAY</code> value in
2608     *         the specified column
2609     * @exception SQLException if the columnLabel is not valid;
2610     * if a database access error occurs
2611     * or this method is called on a closed result set
2612     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2613     * this method
2614     * @since 1.2
2615     */
2616    Array getArray(String columnLabel) throws SQLException;
2617
2618    /**
2619     * Retrieves the value of the designated column in the current row
2620     * of this <code>ResultSet</code> object as a <code>java.sql.Date</code> object
2621     * in the Java programming language.
2622     * This method uses the given calendar to construct an appropriate millisecond
2623     * value for the date if the underlying database does not store
2624     * timezone information.
2625     *
2626     * @param columnIndex the first column is 1, the second is 2, ...
2627     * @param cal the <code>java.util.Calendar</code> object
2628     * to use in constructing the date
2629     * @return the column value as a <code>java.sql.Date</code> object;
2630     * if the value is SQL <code>NULL</code>,
2631     * the value returned is <code>null</code> in the Java programming language
2632     * @exception SQLException if the columnIndex is not valid;
2633     * if a database access error occurs
2634     * or this method is called on a closed result set
2635     * @since 1.2
2636     */
2637    java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException;
2638
2639    /**
2640     * Retrieves the value of the designated column in the current row
2641     * of this <code>ResultSet</code> object as a <code>java.sql.Date</code> object
2642     * in the Java programming language.
2643     * This method uses the given calendar to construct an appropriate millisecond
2644     * value for the date if the underlying database does not store
2645     * timezone information.
2646     *
2647     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2648     * @param cal the <code>java.util.Calendar</code> object
2649     * to use in constructing the date
2650     * @return the column value as a <code>java.sql.Date</code> object;
2651     * if the value is SQL <code>NULL</code>,
2652     * the value returned is <code>null</code> in the Java programming language
2653     * @exception SQLException if the columnLabel is not valid;
2654     * if a database access error occurs
2655     * or this method is called on a closed result set
2656     * @since 1.2
2657     */
2658    java.sql.Date getDate(String columnLabel, Calendar cal) throws SQLException;
2659
2660    /**
2661     * Retrieves the value of the designated column in the current row
2662     * of this <code>ResultSet</code> object as a <code>java.sql.Time</code> object
2663     * in the Java programming language.
2664     * This method uses the given calendar to construct an appropriate millisecond
2665     * value for the time if the underlying database does not store
2666     * timezone information.
2667     *
2668     * @param columnIndex the first column is 1, the second is 2, ...
2669     * @param cal the <code>java.util.Calendar</code> object
2670     * to use in constructing the time
2671     * @return the column value as a <code>java.sql.Time</code> object;
2672     * if the value is SQL <code>NULL</code>,
2673     * the value returned is <code>null</code> in the Java programming language
2674     * @exception SQLException if the columnIndex is not valid;
2675     * if a database access error occurs
2676     * or this method is called on a closed result set
2677     * @since 1.2
2678     */
2679    java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException;
2680
2681    /**
2682     * Retrieves the value of the designated column in the current row
2683     * of this <code>ResultSet</code> object as a <code>java.sql.Time</code> object
2684     * in the Java programming language.
2685     * This method uses the given calendar to construct an appropriate millisecond
2686     * value for the time if the underlying database does not store
2687     * timezone information.
2688     *
2689     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2690     * @param cal the <code>java.util.Calendar</code> object
2691     * to use in constructing the time
2692     * @return the column value as a <code>java.sql.Time</code> object;
2693     * if the value is SQL <code>NULL</code>,
2694     * the value returned is <code>null</code> in the Java programming language
2695     * @exception SQLException if the columnLabel is not valid;
2696     * if a database access error occurs
2697     * or this method is called on a closed result set
2698     * @since 1.2
2699     */
2700    java.sql.Time getTime(String columnLabel, Calendar cal) throws SQLException;
2701
2702    /**
2703     * Retrieves the value of the designated column in the current row
2704     * of this <code>ResultSet</code> object as a <code>java.sql.Timestamp</code> object
2705     * in the Java programming language.
2706     * This method uses the given calendar to construct an appropriate millisecond
2707     * value for the timestamp if the underlying database does not store
2708     * timezone information.
2709     *
2710     * @param columnIndex the first column is 1, the second is 2, ...
2711     * @param cal the <code>java.util.Calendar</code> object
2712     * to use in constructing the timestamp
2713     * @return the column value as a <code>java.sql.Timestamp</code> object;
2714     * if the value is SQL <code>NULL</code>,
2715     * the value returned is <code>null</code> in the Java programming language
2716     * @exception SQLException if the columnIndex is not valid;
2717     * if a database access error occurs
2718     * or this method is called on a closed result set
2719     * @since 1.2
2720     */
2721    java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal)
2722      throws SQLException;
2723
2724    /**
2725     * Retrieves the value of the designated column in the current row
2726     * of this <code>ResultSet</code> object as a <code>java.sql.Timestamp</code> object
2727     * in the Java programming language.
2728     * This method uses the given calendar to construct an appropriate millisecond
2729     * value for the timestamp if the underlying database does not store
2730     * timezone information.
2731     *
2732     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2733     * @param cal the <code>java.util.Calendar</code> object
2734     * to use in constructing the date
2735     * @return the column value as a <code>java.sql.Timestamp</code> object;
2736     * if the value is SQL <code>NULL</code>,
2737     * the value returned is <code>null</code> in the Java programming language
2738     * @exception SQLException if the columnLabel is not valid or
2739     * if a database access error occurs
2740     * or this method is called on a closed result set
2741     * @since 1.2
2742     */
2743    java.sql.Timestamp getTimestamp(String columnLabel, Calendar cal)
2744      throws SQLException;
2745
2746    //-------------------------- JDBC 3.0 ----------------------------------------
2747
2748    /**
2749     * The constant indicating that open <code>ResultSet</code> objects with this
2750     * holdability will remain open when the current transaction is commited.
2751     *
2752     * @since 1.4
2753     */
2754    int HOLD_CURSORS_OVER_COMMIT = 1;
2755
2756    /**
2757     * The constant indicating that open <code>ResultSet</code> objects with this
2758     * holdability will be closed when the current transaction is commited.
2759     *
2760     * @since 1.4
2761     */
2762    int CLOSE_CURSORS_AT_COMMIT = 2;
2763
2764    /**
2765     * Retrieves the value of the designated column in the current row
2766     * of this <code>ResultSet</code> object as a <code>java.net.URL</code>
2767     * object in the Java programming language.
2768     *
2769     * @param columnIndex the index of the column 1 is the first, 2 is the second,...
2770     * @return the column value as a <code>java.net.URL</code> object;
2771     * if the value is SQL <code>NULL</code>,
2772     * the value returned is <code>null</code> in the Java programming language
2773     * @exception SQLException if the columnIndex is not valid;
2774     * if a database access error occurs; this method
2775     * is called on a closed result set or if a URL is malformed
2776      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2777     * this method
2778     * @since 1.4
2779     */
2780    java.net.URL getURL(int columnIndex) throws SQLException;
2781
2782    /**
2783     * Retrieves the value of the designated column in the current row
2784     * of this <code>ResultSet</code> object as a <code>java.net.URL</code>
2785     * object in the Java programming language.
2786     *
2787     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2788     * @return the column value as a <code>java.net.URL</code> object;
2789     * if the value is SQL <code>NULL</code>,
2790     * the value returned is <code>null</code> in the Java programming language
2791     * @exception SQLException if the columnLabel is not valid;
2792     * if a database access error occurs; this method
2793     * is called on a closed result set or if a URL is malformed
2794     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2795     * this method
2796     * @since 1.4
2797     */
2798    java.net.URL getURL(String columnLabel) throws SQLException;
2799
2800    /**
2801     * Updates the designated column with a <code>java.sql.Ref</code> value.
2802     * The updater methods are used to update column values in the
2803     * current row or the insert row.  The updater methods do not
2804     * update the underlying database; instead the <code>updateRow</code> or
2805     * <code>insertRow</code> methods are called to update the database.
2806     *
2807     * @param columnIndex the first column is 1, the second is 2, ...
2808     * @param x the new column value
2809     * @exception SQLException if the columnIndex is not valid;
2810     * if a database access error occurs;
2811     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2812     * or this method is called on a closed result set
2813     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2814     * this method
2815     * @since 1.4
2816     */
2817    void updateRef(int columnIndex, java.sql.Ref x) throws SQLException;
2818
2819    /**
2820     * Updates the designated column with a <code>java.sql.Ref</code> value.
2821     * The updater methods are used to update column values in the
2822     * current row or the insert row.  The updater methods do not
2823     * update the underlying database; instead the <code>updateRow</code> or
2824     * <code>insertRow</code> methods are called to update the database.
2825     *
2826     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2827     * @param x the new column value
2828     * @exception SQLException if the columnLabel is not valid;
2829     * if a database access error occurs;
2830     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2831     * or this method is called on a closed result set
2832     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2833     * this method
2834     * @since 1.4
2835     */
2836    void updateRef(String columnLabel, java.sql.Ref x) throws SQLException;
2837
2838    /**
2839     * Updates the designated column with a <code>java.sql.Blob</code> value.
2840     * The updater methods are used to update column values in the
2841     * current row or the insert row.  The updater methods do not
2842     * update the underlying database; instead the <code>updateRow</code> or
2843     * <code>insertRow</code> methods are called to update the database.
2844     *
2845     * @param columnIndex the first column is 1, the second is 2, ...
2846     * @param x the new column value
2847     * @exception SQLException if the columnIndex is not valid;
2848     * if a database access error occurs;
2849     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2850     * or this method is called on a closed result set
2851     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2852     * this method
2853     * @since 1.4
2854     */
2855    void updateBlob(int columnIndex, java.sql.Blob x) throws SQLException;
2856
2857    /**
2858     * Updates the designated column with a <code>java.sql.Blob</code> value.
2859     * The updater methods are used to update column values in the
2860     * current row or the insert row.  The updater methods do not
2861     * update the underlying database; instead the <code>updateRow</code> or
2862     * <code>insertRow</code> methods are called to update the database.
2863     *
2864     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2865     * @param x the new column value
2866     * @exception SQLException if the columnLabel is not valid;
2867     * if a database access error occurs;
2868     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2869     * or this method is called on a closed result set
2870     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2871     * this method
2872     * @since 1.4
2873     */
2874    void updateBlob(String columnLabel, java.sql.Blob x) throws SQLException;
2875
2876    /**
2877     * Updates the designated column with a <code>java.sql.Clob</code> value.
2878     * The updater methods are used to update column values in the
2879     * current row or the insert row.  The updater methods do not
2880     * update the underlying database; instead the <code>updateRow</code> or
2881     * <code>insertRow</code> methods are called to update the database.
2882     *
2883     * @param columnIndex the first column is 1, the second is 2, ...
2884     * @param x the new column value
2885     * @exception SQLException if the columnIndex is not valid;
2886     * if a database access error occurs;
2887     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2888     * or this method is called on a closed result set
2889     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2890     * this method
2891     * @since 1.4
2892     */
2893    void updateClob(int columnIndex, java.sql.Clob x) throws SQLException;
2894
2895    /**
2896     * Updates the designated column with a <code>java.sql.Clob</code> value.
2897     * The updater methods are used to update column values in the
2898     * current row or the insert row.  The updater methods do not
2899     * update the underlying database; instead the <code>updateRow</code> or
2900     * <code>insertRow</code> methods are called to update the database.
2901     *
2902     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2903     * @param x the new column value
2904     * @exception SQLException if the columnLabel is not valid;
2905     * if a database access error occurs;
2906     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2907     * or this method is called on a closed result set
2908     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2909     * this method
2910     * @since 1.4
2911     */
2912    void updateClob(String columnLabel, java.sql.Clob x) throws SQLException;
2913
2914    /**
2915     * Updates the designated column with a <code>java.sql.Array</code> value.
2916     * The updater methods are used to update column values in the
2917     * current row or the insert row.  The updater methods do not
2918     * update the underlying database; instead the <code>updateRow</code> or
2919     * <code>insertRow</code> methods are called to update the database.
2920     *
2921     * @param columnIndex the first column is 1, the second is 2, ...
2922     * @param x the new column value
2923     * @exception SQLException if the columnIndex is not valid;
2924     * if a database access error occurs;
2925     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2926     * or this method is called on a closed result set
2927     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2928     * this method
2929     * @since 1.4
2930     */
2931    void updateArray(int columnIndex, java.sql.Array x) throws SQLException;
2932
2933    /**
2934     * Updates the designated column with a <code>java.sql.Array</code> value.
2935     * The updater methods are used to update column values in the
2936     * current row or the insert row.  The updater methods do not
2937     * update the underlying database; instead the <code>updateRow</code> or
2938     * <code>insertRow</code> methods are called to update the database.
2939     *
2940     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2941     * @param x the new column value
2942     * @exception SQLException if the columnLabel is not valid;
2943     * if a database access error occurs;
2944     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
2945     * or this method is called on a closed result set
2946     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2947     * this method
2948     * @since 1.4
2949     */
2950    void updateArray(String columnLabel, java.sql.Array x) throws SQLException;
2951
2952    //------------------------- JDBC 4.0 -----------------------------------
2953
2954    /**
2955     * Retrieves the value of the designated column in the current row of this
2956     * <code>ResultSet</code> object as a <code>java.sql.RowId</code> object in the Java
2957     * programming language.
2958     *
2959     * @param columnIndex the first column is 1, the second 2, ...
2960     * @return the column value; if the value is a SQL <code>NULL</code> the
2961     *     value returned is <code>null</code>
2962     * @throws SQLException if the columnIndex is not valid;
2963     * if a database access error occurs
2964     * or this method is called on a closed result set
2965     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2966     * this method
2967     * @since 1.6
2968     */
2969    RowId getRowId(int columnIndex) throws SQLException;
2970
2971    /**
2972     * Retrieves the value of the designated column in the current row of this
2973     * <code>ResultSet</code> object as a <code>java.sql.RowId</code> object in the Java
2974     * programming language.
2975     *
2976     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
2977     * @return the column value ; if the value is a SQL <code>NULL</code> the
2978     *     value returned is <code>null</code>
2979     * @throws SQLException if the columnLabel is not valid;
2980     * if a database access error occurs
2981     * or this method is called on a closed result set
2982     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
2983     * this method
2984     * @since 1.6
2985     */
2986    RowId getRowId(String columnLabel) throws SQLException;
2987
2988    /**
2989     * Updates the designated column with a <code>RowId</code> value. The updater
2990     * methods are used to update column values in the current row or the insert
2991     * row. The updater methods do not update the underlying database; instead
2992     * the <code>updateRow</code> or <code>insertRow</code> methods are called
2993     * to update the database.
2994     *
2995     * @param columnIndex the first column is 1, the second 2, ...
2996     * @param x the column value
2997     * @exception SQLException if the columnIndex is not valid;
2998     * if a database access error occurs;
2999     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3000     * or this method is called on a closed result set
3001     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3002     * this method
3003     * @since 1.6
3004     */
3005    void updateRowId(int columnIndex, RowId x) throws SQLException;
3006
3007    /**
3008     * Updates the designated column with a <code>RowId</code> value. The updater
3009     * methods are used to update column values in the current row or the insert
3010     * row. The updater methods do not update the underlying database; instead
3011     * the <code>updateRow</code> or <code>insertRow</code> methods are called
3012     * to update the database.
3013     *
3014     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3015     * @param x the column value
3016     * @exception SQLException if the columnLabel is not valid;
3017     * if a database access error occurs;
3018     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3019     * or this method is called on a closed result set
3020     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3021     * this method
3022     * @since 1.6
3023     */
3024    void updateRowId(String columnLabel, RowId x) throws SQLException;
3025
3026    /**
3027     * Retrieves the holdability of this <code>ResultSet</code> object
3028     * @return  either <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>
3029     * @throws SQLException if a database access error occurs
3030     * or this method is called on a closed result set
3031     * @since 1.6
3032     */
3033    int getHoldability() throws SQLException;
3034
3035    /**
3036     * Retrieves whether this <code>ResultSet</code> object has been closed. A <code>ResultSet</code> is closed if the
3037     * method close has been called on it, or if it is automatically closed.
3038     *
3039     * @return true if this <code>ResultSet</code> object is closed; false if it is still open
3040     * @throws SQLException if a database access error occurs
3041     * @since 1.6
3042     */
3043    boolean isClosed() throws SQLException;
3044
3045    /**
3046     * Updates the designated column with a <code>String</code> value.
3047     * It is intended for use when updating <code>NCHAR</code>,<code>NVARCHAR</code>
3048     * and <code>LONGNVARCHAR</code> columns.
3049     * The updater methods are used to update column values in the
3050     * current row or the insert row.  The updater methods do not
3051     * update the underlying database; instead the <code>updateRow</code> or
3052     * <code>insertRow</code> methods are called to update the database.
3053     *
3054     * @param columnIndex the first column is 1, the second 2, ...
3055     * @param nString the value for the column to be updated
3056     * @throws SQLException if the columnIndex is not valid;
3057     * if the driver does not support national
3058     *         character sets;  if the driver can detect that a data conversion
3059     *  error could occur; this method is called on a closed result set;
3060     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3061     * or if a database access error occurs
3062     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3063     * this method
3064     * @since 1.6
3065     */
3066    void updateNString(int columnIndex, String nString) throws SQLException;
3067
3068    /**
3069     * Updates the designated column with a <code>String</code> value.
3070     * It is intended for use when updating <code>NCHAR</code>,<code>NVARCHAR</code>
3071     * and <code>LONGNVARCHAR</code> columns.
3072     * The updater methods are used to update column values in the
3073     * current row or the insert row.  The updater methods do not
3074     * update the underlying database; instead the <code>updateRow</code> or
3075     * <code>insertRow</code> methods are called to update the database.
3076     *
3077     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3078     * @param nString the value for the column to be updated
3079     * @throws SQLException if the columnLabel is not valid;
3080     * if the driver does not support national
3081     *         character sets;  if the driver can detect that a data conversion
3082     *  error could occur; this method is called on a closed result set;
3083     * the result set concurrency is <CODE>CONCUR_READ_ONLY</code>
3084     *  or if a database access error occurs
3085     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3086     * this method
3087     * @since 1.6
3088     */
3089    void updateNString(String columnLabel, String nString) throws SQLException;
3090
3091    /**
3092     * Updates the designated column with a <code>java.sql.NClob</code> value.
3093     * The updater methods are used to update column values in the
3094     * current row or the insert row.  The updater methods do not
3095     * update the underlying database; instead the <code>updateRow</code> or
3096     * <code>insertRow</code> methods are called to update the database.
3097     *
3098     * @param columnIndex the first column is 1, the second 2, ...
3099     * @param nClob the value for the column to be updated
3100     * @throws SQLException if the columnIndex is not valid;
3101     * if the driver does not support national
3102     *         character sets;  if the driver can detect that a data conversion
3103     *  error could occur; this method is called on a closed result set;
3104     * if a database access error occurs or
3105     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3106     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3107     * this method
3108     * @since 1.6
3109     */
3110    void updateNClob(int columnIndex, NClob nClob) throws SQLException;
3111
3112    /**
3113     * Updates the designated column with a <code>java.sql.NClob</code> value.
3114     * The updater methods are used to update column values in the
3115     * current row or the insert row.  The updater methods do not
3116     * update the underlying database; instead the <code>updateRow</code> or
3117     * <code>insertRow</code> methods are called to update the database.
3118     *
3119     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3120     * @param nClob the value for the column to be updated
3121     * @throws SQLException if the columnLabel is not valid;
3122     * if the driver does not support national
3123     *         character sets;  if the driver can detect that a data conversion
3124     *  error could occur; this method is called on a closed result set;
3125     *  if a database access error occurs or
3126     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3127     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3128     * this method
3129     * @since 1.6
3130     */
3131    void updateNClob(String columnLabel, NClob nClob) throws SQLException;
3132
3133    /**
3134     * Retrieves the value of the designated column in the current row
3135     * of this <code>ResultSet</code> object as a <code>NClob</code> object
3136     * in the Java programming language.
3137     *
3138     * @param columnIndex the first column is 1, the second is 2, ...
3139     * @return a <code>NClob</code> object representing the SQL
3140     *         <code>NCLOB</code> value in the specified column
3141     * @exception SQLException if the columnIndex is not valid;
3142     * if the driver does not support national
3143     *         character sets;  if the driver can detect that a data conversion
3144     *  error could occur; this method is called on a closed result set
3145     * or if a database access error occurs
3146     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3147     * this method
3148     * @since 1.6
3149     */
3150    NClob getNClob(int columnIndex) throws SQLException;
3151
3152  /**
3153     * Retrieves the value of the designated column in the current row
3154     * of this <code>ResultSet</code> object as a <code>NClob</code> object
3155     * in the Java programming language.
3156     *
3157     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3158     * @return a <code>NClob</code> object representing the SQL <code>NCLOB</code>
3159     * value in the specified column
3160     * @exception SQLException if the columnLabel is not valid;
3161   * if the driver does not support national
3162     *         character sets;  if the driver can detect that a data conversion
3163     *  error could occur; this method is called on a closed result set
3164     * or if a database access error occurs
3165     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3166     * this method
3167     * @since 1.6
3168     */
3169    NClob getNClob(String columnLabel) throws SQLException;
3170
3171    /**
3172     * Retrieves the value of the designated column in  the current row of
3173     *  this <code>ResultSet</code> as a
3174     * <code>java.sql.SQLXML</code> object in the Java programming language.
3175     * @param columnIndex the first column is 1, the second is 2, ...
3176     * @return a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
3177     * @throws SQLException if the columnIndex is not valid;
3178     * if a database access error occurs
3179     * or this method is called on a closed result set
3180     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3181     * this method
3182     * @since 1.6
3183     */
3184    SQLXML getSQLXML(int columnIndex) throws SQLException;
3185
3186    /**
3187     * Retrieves the value of the designated column in  the current row of
3188     *  this <code>ResultSet</code> as a
3189     * <code>java.sql.SQLXML</code> object in the Java programming language.
3190     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3191     * @return a <code>SQLXML</code> object that maps an <code>SQL XML</code> value
3192     * @throws SQLException if the columnLabel is not valid;
3193     * if a database access error occurs
3194     * or this method is called on a closed result set
3195     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3196     * this method
3197     * @since 1.6
3198     */
3199    SQLXML getSQLXML(String columnLabel) throws SQLException;
3200    /**
3201     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
3202     * The updater
3203     * methods are used to update column values in the current row or the insert
3204     * row. The updater methods do not update the underlying database; instead
3205     * the <code>updateRow</code> or <code>insertRow</code> methods are called
3206     * to update the database.
3207     * <p>
3208     *
3209     * @param columnIndex the first column is 1, the second 2, ...
3210     * @param xmlObject the value for the column to be updated
3211     * @throws SQLException if the columnIndex is not valid;
3212     * if a database access error occurs; this method
3213     *  is called on a closed result set;
3214     * the <code>java.xml.transform.Result</code>,
3215     *  <code>Writer</code> or <code>OutputStream</code> has not been closed
3216     * for the <code>SQLXML</code> object;
3217     *  if there is an error processing the XML value or
3218     * the result set concurrency is <code>CONCUR_READ_ONLY</code>.  The <code>getCause</code> method
3219     *  of the exception may provide a more detailed exception, for example, if the
3220     *  stream does not contain valid XML.
3221     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3222     * this method
3223     * @since 1.6
3224     */
3225    void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException;
3226    /**
3227     * Updates the designated column with a <code>java.sql.SQLXML</code> value.
3228     * The updater
3229     * methods are used to update column values in the current row or the insert
3230     * row. The updater methods do not update the underlying database; instead
3231     * the <code>updateRow</code> or <code>insertRow</code> methods are called
3232     * to update the database.
3233     * <p>
3234     *
3235     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3236     * @param xmlObject the column value
3237     * @throws SQLException if the columnLabel is not valid;
3238     * if a database access error occurs; this method
3239     *  is called on a closed result set;
3240     * the <code>java.xml.transform.Result</code>,
3241     *  <code>Writer</code> or <code>OutputStream</code> has not been closed
3242     * for the <code>SQLXML</code> object;
3243     *  if there is an error processing the XML value or
3244     * the result set concurrency is <code>CONCUR_READ_ONLY</code>.  The <code>getCause</code> method
3245     *  of the exception may provide a more detailed exception, for example, if the
3246     *  stream does not contain valid XML.
3247     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3248     * this method
3249     * @since 1.6
3250     */
3251    void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException;
3252
3253    /**
3254     * Retrieves the value of the designated column in the current row
3255     * of this <code>ResultSet</code> object as
3256     * a <code>String</code> in the Java programming language.
3257     * It is intended for use when
3258     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
3259     * and <code>LONGNVARCHAR</code> columns.
3260     *
3261     * @param columnIndex the first column is 1, the second is 2, ...
3262     * @return the column value; if the value is SQL <code>NULL</code>, the
3263     * value returned is <code>null</code>
3264     * @exception SQLException if the columnIndex is not valid;
3265     * if a database access error occurs
3266     * or this method is called on a closed result set
3267     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3268     * this method
3269     * @since 1.6
3270     */
3271    String getNString(int columnIndex) throws SQLException;
3272
3273
3274    /**
3275     * Retrieves the value of the designated column in the current row
3276     * of this <code>ResultSet</code> object as
3277     * a <code>String</code> in the Java programming language.
3278     * It is intended for use when
3279     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
3280     * and <code>LONGNVARCHAR</code> columns.
3281     *
3282     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3283     * @return the column value; if the value is SQL <code>NULL</code>, the
3284     * value returned is <code>null</code>
3285     * @exception SQLException if the columnLabel is not valid;
3286     * if a database access error occurs
3287     * or this method is called on a closed result set
3288     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3289     * this method
3290     * @since 1.6
3291     */
3292    String getNString(String columnLabel) throws SQLException;
3293
3294
3295    /**
3296     * Retrieves the value of the designated column in the current row
3297     * of this <code>ResultSet</code> object as a
3298     * <code>java.io.Reader</code> object.
3299     * It is intended for use when
3300     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
3301     * and <code>LONGNVARCHAR</code> columns.
3302     *
3303     * @return a <code>java.io.Reader</code> object that contains the column
3304     * value; if the value is SQL <code>NULL</code>, the value returned is
3305     * <code>null</code> in the Java programming language.
3306     * @param columnIndex the first column is 1, the second is 2, ...
3307     * @exception SQLException if the columnIndex is not valid;
3308     * if a database access error occurs
3309     * or this method is called on a closed result set
3310     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3311     * this method
3312     * @since 1.6
3313     */
3314    java.io.Reader getNCharacterStream(int columnIndex) throws SQLException;
3315
3316    /**
3317     * Retrieves the value of the designated column in the current row
3318     * of this <code>ResultSet</code> object as a
3319     * <code>java.io.Reader</code> object.
3320     * It is intended for use when
3321     * accessing  <code>NCHAR</code>,<code>NVARCHAR</code>
3322     * and <code>LONGNVARCHAR</code> columns.
3323     *
3324     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3325     * @return a <code>java.io.Reader</code> object that contains the column
3326     * value; if the value is SQL <code>NULL</code>, the value returned is
3327     * <code>null</code> in the Java programming language
3328     * @exception SQLException if the columnLabel is not valid;
3329     * if a database access error occurs
3330     * or this method is called on a closed result set
3331     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3332     * this method
3333     * @since 1.6
3334     */
3335    java.io.Reader getNCharacterStream(String columnLabel) throws SQLException;
3336
3337    /**
3338     * Updates the designated column with a character stream value, which will have
3339     * the specified number of bytes.   The
3340     * driver does the necessary conversion from Java character format to
3341     * the national character set in the database.
3342     * It is intended for use when
3343     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
3344     * and <code>LONGNVARCHAR</code> columns.
3345     * <p>
3346     * The updater methods are used to update column values in the
3347     * current row or the insert row.  The updater methods do not
3348     * update the underlying database; instead the <code>updateRow</code> or
3349     * <code>insertRow</code> methods are called to update the database.
3350     *
3351     * @param columnIndex the first column is 1, the second is 2, ...
3352     * @param x the new column value
3353     * @param length the length of the stream
3354     * @exception SQLException if the columnIndex is not valid;
3355     * if a database access error occurs;
3356     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
3357     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3358     * this method
3359     * @since 1.6
3360     */
3361    void updateNCharacterStream(int columnIndex,
3362                             java.io.Reader x,
3363                             long length) throws SQLException;
3364
3365    /**
3366     * Updates the designated column with a character stream value, which will have
3367     * the specified number of bytes.  The
3368     * driver does the necessary conversion from Java character format to
3369     * the national character set in the database.
3370     * It is intended for use when
3371     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
3372     * and <code>LONGNVARCHAR</code> columns.
3373     * <p>
3374     * The updater methods are used to update column values in the
3375     * current row or the insert row.  The updater methods do not
3376     * update the underlying database; instead the <code>updateRow</code> or
3377     * <code>insertRow</code> methods are called to update the database.
3378     *
3379     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3380     * @param reader the <code>java.io.Reader</code> object containing
3381     *        the new column value
3382     * @param length the length of the stream
3383     * @exception SQLException if the columnLabel is not valid;
3384     * if a database access error occurs;
3385     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
3386      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3387     * this method
3388     * @since 1.6
3389     */
3390    void updateNCharacterStream(String columnLabel,
3391                             java.io.Reader reader,
3392                             long length) throws SQLException;
3393    /**
3394     * Updates the designated column with an ascii stream value, which will have
3395     * the specified number of bytes.
3396     * <p>
3397     * The updater methods are used to update column values in the
3398     * current row or the insert row.  The updater methods do not
3399     * update the underlying database; instead the <code>updateRow</code> or
3400     * <code>insertRow</code> methods are called to update the database.
3401     *
3402     * @param columnIndex the first column is 1, the second is 2, ...
3403     * @param x the new column value
3404     * @param length the length of the stream
3405     * @exception SQLException if the columnIndex is not valid;
3406     * if a database access error occurs;
3407     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3408     * or this method is called on a closed result set
3409     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3410     * this method
3411     * @since 1.6
3412     */
3413    void updateAsciiStream(int columnIndex,
3414                           java.io.InputStream x,
3415                           long length) throws SQLException;
3416
3417    /**
3418     * Updates the designated column with a binary stream value, which will have
3419     * the specified number of bytes.
3420     * <p>
3421     * The updater methods are used to update column values in the
3422     * current row or the insert row.  The updater methods do not
3423     * update the underlying database; instead the <code>updateRow</code> or
3424     * <code>insertRow</code> methods are called to update the database.
3425     *
3426     * @param columnIndex the first column is 1, the second is 2, ...
3427     * @param x the new column value
3428     * @param length the length of the stream
3429     * @exception SQLException if the columnIndex is not valid;
3430     * if a database access error occurs;
3431     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3432     * or this method is called on a closed result set
3433     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3434     * this method
3435     * @since 1.6
3436     */
3437    void updateBinaryStream(int columnIndex,
3438                            java.io.InputStream x,
3439                            long length) throws SQLException;
3440
3441    /**
3442     * Updates the designated column with a character stream value, which will have
3443     * the specified number of bytes.
3444     * <p>
3445     * The updater methods are used to update column values in the
3446     * current row or the insert row.  The updater methods do not
3447     * update the underlying database; instead the <code>updateRow</code> or
3448     * <code>insertRow</code> methods are called to update the database.
3449     *
3450     * @param columnIndex the first column is 1, the second is 2, ...
3451     * @param x the new column value
3452     * @param length the length of the stream
3453     * @exception SQLException if the columnIndex is not valid;
3454     * if a database access error occurs;
3455     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3456     * or this method is called on a closed result set
3457     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3458     * this method
3459     * @since 1.6
3460     */
3461    void updateCharacterStream(int columnIndex,
3462                             java.io.Reader x,
3463                             long length) throws SQLException;
3464    /**
3465     * Updates the designated column with an ascii stream value, which will have
3466     * the specified number of bytes.
3467     * <p>
3468     * The updater methods are used to update column values in the
3469     * current row or the insert row.  The updater methods do not
3470     * update the underlying database; instead the <code>updateRow</code> or
3471     * <code>insertRow</code> methods are called to update the database.
3472     *
3473     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3474     * @param x the new column value
3475     * @param length the length of the stream
3476     * @exception SQLException if the columnLabel is not valid;
3477     * if a database access error occurs;
3478     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3479     * or this method is called on a closed result set
3480     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3481     * this method
3482     * @since 1.6
3483     */
3484    void updateAsciiStream(String columnLabel,
3485                           java.io.InputStream x,
3486                           long length) throws SQLException;
3487
3488    /**
3489     * Updates the designated column with a binary stream value, which will have
3490     * the specified number of bytes.
3491     * <p>
3492     * The updater methods are used to update column values in the
3493     * current row or the insert row.  The updater methods do not
3494     * update the underlying database; instead the <code>updateRow</code> or
3495     * <code>insertRow</code> methods are called to update the database.
3496     *
3497     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3498     * @param x the new column value
3499     * @param length the length of the stream
3500     * @exception SQLException if the columnLabel is not valid;
3501     * if a database access error occurs;
3502     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3503     * or this method is called on a closed result set
3504     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3505     * this method
3506     * @since 1.6
3507     */
3508    void updateBinaryStream(String columnLabel,
3509                            java.io.InputStream x,
3510                            long length) throws SQLException;
3511
3512    /**
3513     * Updates the designated column with a character stream value, which will have
3514     * the specified number of bytes.
3515     * <p>
3516     * The updater methods are used to update column values in the
3517     * current row or the insert row.  The updater methods do not
3518     * update the underlying database; instead the <code>updateRow</code> or
3519     * <code>insertRow</code> methods are called to update the database.
3520     *
3521     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3522     * @param reader the <code>java.io.Reader</code> object containing
3523     *        the new column value
3524     * @param length the length of the stream
3525     * @exception SQLException if the columnLabel is not valid;
3526     * if a database access error occurs;
3527     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3528     * or this method is called on a closed result set
3529     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3530     * this method
3531     * @since 1.6
3532     */
3533    void updateCharacterStream(String columnLabel,
3534                             java.io.Reader reader,
3535                             long length) throws SQLException;
3536    /**
3537     * Updates the designated column using the given input stream, which
3538     * will have the specified number of bytes.
3539     *
3540     * <p>
3541     * The updater methods are used to update column values in the
3542     * current row or the insert row.  The updater methods do not
3543     * update the underlying database; instead the <code>updateRow</code> or
3544     * <code>insertRow</code> methods are called to update the database.
3545     *
3546     * @param columnIndex the first column is 1, the second is 2, ...
3547     * @param inputStream An object that contains the data to set the parameter
3548     * value to.
3549     * @param length the number of bytes in the parameter data.
3550     * @exception SQLException if the columnIndex is not valid;
3551     * if a database access error occurs;
3552     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3553     * or this method is called on a closed result set
3554     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3555     * this method
3556     * @since 1.6
3557     */
3558    void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException;
3559
3560    /**
3561     * Updates the designated column using the given input stream, which
3562     * will have the specified number of bytes.
3563     *
3564     * <p>
3565     * The updater methods are used to update column values in the
3566     * current row or the insert row.  The updater methods do not
3567     * update the underlying database; instead the <code>updateRow</code> or
3568     * <code>insertRow</code> methods are called to update the database.
3569     *
3570     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3571     * @param inputStream An object that contains the data to set the parameter
3572     * value to.
3573     * @param length the number of bytes in the parameter data.
3574     * @exception SQLException if the columnLabel is not valid;
3575     * if a database access error occurs;
3576     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3577     * or this method is called on a closed result set
3578     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3579     * this method
3580     * @since 1.6
3581     */
3582    void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException;
3583
3584    /**
3585     * Updates the designated column using the given <code>Reader</code>
3586     * object, which is the given number of characters long.
3587     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
3588     * parameter, it may be more practical to send it via a
3589     * <code>java.io.Reader</code> object. The JDBC driver will
3590     * do any necessary conversion from UNICODE to the database char format.
3591     *
3592     * <p>
3593     * The updater methods are used to update column values in the
3594     * current row or the insert row.  The updater methods do not
3595     * update the underlying database; instead the <code>updateRow</code> or
3596     * <code>insertRow</code> methods are called to update the database.
3597     *
3598     * @param columnIndex the first column is 1, the second is 2, ...
3599     * @param reader An object that contains the data to set the parameter value to.
3600     * @param length the number of characters in the parameter data.
3601     * @exception SQLException if the columnIndex is not valid;
3602     * if a database access error occurs;
3603     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3604     * or this method is called on a closed result set
3605     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3606     * this method
3607     * @since 1.6
3608     */
3609    void updateClob(int columnIndex,  Reader reader, long length) throws SQLException;
3610
3611    /**
3612     * Updates the designated column using the given <code>Reader</code>
3613     * object, which is the given number of characters long.
3614     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
3615     * parameter, it may be more practical to send it via a
3616     * <code>java.io.Reader</code> object.  The JDBC driver will
3617     * do any necessary conversion from UNICODE to the database char format.
3618     *
3619     * <p>
3620     * The updater methods are used to update column values in the
3621     * current row or the insert row.  The updater methods do not
3622     * update the underlying database; instead the <code>updateRow</code> or
3623     * <code>insertRow</code> methods are called to update the database.
3624     *
3625     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3626     * @param reader An object that contains the data to set the parameter value to.
3627     * @param length the number of characters in the parameter data.
3628     * @exception SQLException if the columnLabel is not valid;
3629     * if a database access error occurs;
3630     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3631     * or this method is called on a closed result set
3632     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3633     * this method
3634     * @since 1.6
3635     */
3636    void updateClob(String columnLabel,  Reader reader, long length) throws SQLException;
3637   /**
3638     * Updates the designated column using the given <code>Reader</code>
3639     * object, which is the given number of characters long.
3640     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
3641     * parameter, it may be more practical to send it via a
3642     * <code>java.io.Reader</code> object. The JDBC driver will
3643     * do any necessary conversion from UNICODE to the database char format.
3644     *
3645     * <p>
3646     * The updater methods are used to update column values in the
3647     * current row or the insert row.  The updater methods do not
3648     * update the underlying database; instead the <code>updateRow</code> or
3649     * <code>insertRow</code> methods are called to update the database.
3650     *
3651     * @param columnIndex the first column is 1, the second 2, ...
3652     * @param reader An object that contains the data to set the parameter value to.
3653     * @param length the number of characters in the parameter data.
3654     * @throws SQLException if the columnIndex is not valid;
3655    * if the driver does not support national
3656     *         character sets;  if the driver can detect that a data conversion
3657     *  error could occur; this method is called on a closed result set,
3658     * if a database access error occurs or
3659     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3660     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3661     * this method
3662     * @since 1.6
3663     */
3664    void updateNClob(int columnIndex,  Reader reader, long length) throws SQLException;
3665
3666    /**
3667     * Updates the designated column using the given <code>Reader</code>
3668     * object, which is the given number of characters long.
3669     * When a very large UNICODE value is input to a <code>LONGVARCHAR</code>
3670     * parameter, it may be more practical to send it via a
3671     * <code>java.io.Reader</code> object. The JDBC driver will
3672     * do any necessary conversion from UNICODE to the database char format.
3673     *
3674     * <p>
3675     * The updater methods are used to update column values in the
3676     * current row or the insert row.  The updater methods do not
3677     * update the underlying database; instead the <code>updateRow</code> or
3678     * <code>insertRow</code> methods are called to update the database.
3679     *
3680     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3681     * @param reader An object that contains the data to set the parameter value to.
3682     * @param length the number of characters in the parameter data.
3683     * @throws SQLException if the columnLabel is not valid;
3684     * if the driver does not support national
3685     *         character sets;  if the driver can detect that a data conversion
3686     *  error could occur; this method is called on a closed result set;
3687     *  if a database access error occurs or
3688     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3689     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3690     * this method
3691     * @since 1.6
3692     */
3693    void updateNClob(String columnLabel,  Reader reader, long length) throws SQLException;
3694
3695    //---
3696
3697    /**
3698     * Updates the designated column with a character stream value.
3699     * The data will be read from the stream
3700     * as needed until end-of-stream is reached.  The
3701     * driver does the necessary conversion from Java character format to
3702     * the national character set in the database.
3703     * It is intended for use when
3704     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
3705     * and <code>LONGNVARCHAR</code> columns.
3706     * <p>
3707     * The updater methods are used to update column values in the
3708     * current row or the insert row.  The updater methods do not
3709     * update the underlying database; instead the <code>updateRow</code> or
3710     * <code>insertRow</code> methods are called to update the database.
3711     *
3712     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3713     * it might be more efficient to use a version of
3714     * <code>updateNCharacterStream</code> which takes a length parameter.
3715     *
3716     * @param columnIndex the first column is 1, the second is 2, ...
3717     * @param x the new column value
3718     * @exception SQLException if the columnIndex is not valid;
3719     * if a database access error occurs;
3720     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
3721     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3722     * this method
3723     * @since 1.6
3724     */
3725    void updateNCharacterStream(int columnIndex,
3726                             java.io.Reader x) throws SQLException;
3727
3728    /**
3729     * Updates the designated column with a character stream value.
3730     * The data will be read from the stream
3731     * as needed until end-of-stream is reached.  The
3732     * driver does the necessary conversion from Java character format to
3733     * the national character set in the database.
3734     * It is intended for use when
3735     * updating  <code>NCHAR</code>,<code>NVARCHAR</code>
3736     * and <code>LONGNVARCHAR</code> columns.
3737     * <p>
3738     * The updater methods are used to update column values in the
3739     * current row or the insert row.  The updater methods do not
3740     * update the underlying database; instead the <code>updateRow</code> or
3741     * <code>insertRow</code> methods are called to update the database.
3742     *
3743     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3744     * it might be more efficient to use a version of
3745     * <code>updateNCharacterStream</code> which takes a length parameter.
3746     *
3747     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3748     * @param reader the <code>java.io.Reader</code> object containing
3749     *        the new column value
3750     * @exception SQLException if the columnLabel is not valid;
3751     * if a database access error occurs;
3752     * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set
3753      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3754     * this method
3755     * @since 1.6
3756     */
3757    void updateNCharacterStream(String columnLabel,
3758                             java.io.Reader reader) throws SQLException;
3759    /**
3760     * Updates the designated column with an ascii stream value.
3761     * The data will be read from the stream
3762     * as needed until end-of-stream is reached.
3763     * <p>
3764     * The updater methods are used to update column values in the
3765     * current row or the insert row.  The updater methods do not
3766     * update the underlying database; instead the <code>updateRow</code> or
3767     * <code>insertRow</code> methods are called to update the database.
3768     *
3769     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3770     * it might be more efficient to use a version of
3771     * <code>updateAsciiStream</code> which takes a length parameter.
3772     *
3773     * @param columnIndex the first column is 1, the second is 2, ...
3774     * @param x the new column value
3775     * @exception SQLException if the columnIndex is not valid;
3776     * if a database access error occurs;
3777     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3778     * or this method is called on a closed result set
3779     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3780     * this method
3781     * @since 1.6
3782     */
3783    void updateAsciiStream(int columnIndex,
3784                           java.io.InputStream x) throws SQLException;
3785
3786    /**
3787     * Updates the designated column with a binary stream value.
3788     * The data will be read from the stream
3789     * as needed until end-of-stream is reached.
3790     * <p>
3791     * The updater methods are used to update column values in the
3792     * current row or the insert row.  The updater methods do not
3793     * update the underlying database; instead the <code>updateRow</code> or
3794     * <code>insertRow</code> methods are called to update the database.
3795     *
3796     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3797     * it might be more efficient to use a version of
3798     * <code>updateBinaryStream</code> which takes a length parameter.
3799     *
3800     * @param columnIndex the first column is 1, the second is 2, ...
3801     * @param x the new column value
3802     * @exception SQLException if the columnIndex is not valid;
3803     * if a database access error occurs;
3804     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3805     * or this method is called on a closed result set
3806     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3807     * this method
3808     * @since 1.6
3809     */
3810    void updateBinaryStream(int columnIndex,
3811                            java.io.InputStream x) throws SQLException;
3812
3813    /**
3814     * Updates the designated column with a character stream value.
3815     * The data will be read from the stream
3816     * as needed until end-of-stream is reached.
3817     * <p>
3818     * The updater methods are used to update column values in the
3819     * current row or the insert row.  The updater methods do not
3820     * update the underlying database; instead the <code>updateRow</code> or
3821     * <code>insertRow</code> methods are called to update the database.
3822     *
3823     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3824     * it might be more efficient to use a version of
3825     * <code>updateCharacterStream</code> which takes a length parameter.
3826     *
3827     * @param columnIndex the first column is 1, the second is 2, ...
3828     * @param x the new column value
3829     * @exception SQLException if the columnIndex is not valid;
3830     * if a database access error occurs;
3831     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3832     * or this method is called on a closed result set
3833     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3834     * this method
3835     * @since 1.6
3836     */
3837    void updateCharacterStream(int columnIndex,
3838                             java.io.Reader x) throws SQLException;
3839    /**
3840     * Updates the designated column with an ascii stream value.
3841     * The data will be read from the stream
3842     * as needed until end-of-stream is reached.
3843     * <p>
3844     * The updater methods are used to update column values in the
3845     * current row or the insert row.  The updater methods do not
3846     * update the underlying database; instead the <code>updateRow</code> or
3847     * <code>insertRow</code> methods are called to update the database.
3848     *
3849     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3850     * it might be more efficient to use a version of
3851     * <code>updateAsciiStream</code> which takes a length parameter.
3852     *
3853     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3854     * @param x the new column value
3855     * @exception SQLException if the columnLabel is not valid;
3856     * if a database access error occurs;
3857     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3858     * or this method is called on a closed result set
3859     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3860     * this method
3861     * @since 1.6
3862     */
3863    void updateAsciiStream(String columnLabel,
3864                           java.io.InputStream x) throws SQLException;
3865
3866    /**
3867     * Updates the designated column with a binary stream value.
3868     * The data will be read from the stream
3869     * as needed until end-of-stream is reached.
3870     * <p>
3871     * The updater methods are used to update column values in the
3872     * current row or the insert row.  The updater methods do not
3873     * update the underlying database; instead the <code>updateRow</code> or
3874     * <code>insertRow</code> methods are called to update the database.
3875     *
3876     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3877     * it might be more efficient to use a version of
3878     * <code>updateBinaryStream</code> which takes a length parameter.
3879     *
3880     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3881     * @param x the new column value
3882     * @exception SQLException if the columnLabel is not valid;
3883     * if a database access error occurs;
3884     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3885     * or this method is called on a closed result set
3886     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3887     * this method
3888     * @since 1.6
3889     */
3890    void updateBinaryStream(String columnLabel,
3891                            java.io.InputStream x) throws SQLException;
3892
3893    /**
3894     * Updates the designated column with a character stream value.
3895     * The data will be read from the stream
3896     * as needed until end-of-stream is reached.
3897     * <p>
3898     * The updater methods are used to update column values in the
3899     * current row or the insert row.  The updater methods do not
3900     * update the underlying database; instead the <code>updateRow</code> or
3901     * <code>insertRow</code> methods are called to update the database.
3902     *
3903     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3904     * it might be more efficient to use a version of
3905     * <code>updateCharacterStream</code> which takes a length parameter.
3906     *
3907     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3908     * @param reader the <code>java.io.Reader</code> object containing
3909     *        the new column value
3910     * @exception SQLException if the columnLabel is not valid; if a database access error occurs;
3911     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3912     * or this method is called on a closed result set
3913     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3914     * this method
3915     * @since 1.6
3916     */
3917    void updateCharacterStream(String columnLabel,
3918                             java.io.Reader reader) throws SQLException;
3919    /**
3920     * Updates the designated column using the given input stream. The data will be read from the stream
3921     * as needed until end-of-stream is reached.
3922     * <p>
3923     * The updater methods are used to update column values in the
3924     * current row or the insert row.  The updater methods do not
3925     * update the underlying database; instead the <code>updateRow</code> or
3926     * <code>insertRow</code> methods are called to update the database.
3927     *
3928     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3929     * it might be more efficient to use a version of
3930     * <code>updateBlob</code> which takes a length parameter.
3931     *
3932     * @param columnIndex the first column is 1, the second is 2, ...
3933     * @param inputStream An object that contains the data to set the parameter
3934     * value to.
3935     * @exception SQLException if the columnIndex is not valid; if a database access error occurs;
3936     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3937     * or this method is called on a closed result set
3938     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3939     * this method
3940     * @since 1.6
3941     */
3942    void updateBlob(int columnIndex, InputStream inputStream) throws SQLException;
3943
3944    /**
3945     * Updates the designated column using the given input stream. The data will be read from the stream
3946     * as needed until end-of-stream is reached.
3947     * <p>
3948     * The updater methods are used to update column values in the
3949     * current row or the insert row.  The updater methods do not
3950     * update the underlying database; instead the <code>updateRow</code> or
3951     * <code>insertRow</code> methods are called to update the database.
3952     *
3953     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3954     * it might be more efficient to use a version of
3955     * <code>updateBlob</code> which takes a length parameter.
3956     *
3957     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
3958     * @param inputStream An object that contains the data to set the parameter
3959     * value to.
3960     * @exception SQLException if the columnLabel is not valid; if a database access error occurs;
3961     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3962     * or this method is called on a closed result set
3963     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3964     * this method
3965     * @since 1.6
3966     */
3967    void updateBlob(String columnLabel, InputStream inputStream) throws SQLException;
3968
3969    /**
3970     * Updates the designated column using the given <code>Reader</code>
3971     * object.
3972     *  The data will be read from the stream
3973     * as needed until end-of-stream is reached.  The JDBC driver will
3974     * do any necessary conversion from UNICODE to the database char format.
3975     *
3976     * <p>
3977     * The updater methods are used to update column values in the
3978     * current row or the insert row.  The updater methods do not
3979     * update the underlying database; instead the <code>updateRow</code> or
3980     * <code>insertRow</code> methods are called to update the database.
3981     *
3982     *   <P><B>Note:</B> Consult your JDBC driver documentation to determine if
3983     * it might be more efficient to use a version of
3984     * <code>updateClob</code> which takes a length parameter.
3985     *
3986     * @param columnIndex the first column is 1, the second is 2, ...
3987     * @param reader An object that contains the data to set the parameter value to.
3988     * @exception SQLException if the columnIndex is not valid;
3989     * if a database access error occurs;
3990     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
3991     * or this method is called on a closed result set
3992     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
3993     * this method
3994     * @since 1.6
3995     */
3996    void updateClob(int columnIndex,  Reader reader) throws SQLException;
3997
3998    /**
3999     * Updates the designated column using the given <code>Reader</code>
4000     * object.
4001     *  The data will be read from the stream
4002     * as needed until end-of-stream is reached.  The JDBC driver will
4003     * do any necessary conversion from UNICODE to the database char format.
4004     *
4005     * <p>
4006     * The updater methods are used to update column values in the
4007     * current row or the insert row.  The updater methods do not
4008     * update the underlying database; instead the <code>updateRow</code> or
4009     * <code>insertRow</code> methods are called to update the database.
4010     *
4011     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
4012     * it might be more efficient to use a version of
4013     * <code>updateClob</code> which takes a length parameter.
4014     *
4015     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
4016     * @param reader An object that contains the data to set the parameter value to.
4017     * @exception SQLException if the columnLabel is not valid; if a database access error occurs;
4018     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
4019     * or this method is called on a closed result set
4020     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
4021     * this method
4022     * @since 1.6
4023     */
4024    void updateClob(String columnLabel,  Reader reader) throws SQLException;
4025   /**
4026     * Updates the designated column using the given <code>Reader</code>
4027     *
4028     * The data will be read from the stream
4029     * as needed until end-of-stream is reached.  The JDBC driver will
4030     * do any necessary conversion from UNICODE to the database char format.
4031     *
4032     * <p>
4033     * The updater methods are used to update column values in the
4034     * current row or the insert row.  The updater methods do not
4035     * update the underlying database; instead the <code>updateRow</code> or
4036     * <code>insertRow</code> methods are called to update the database.
4037     *
4038     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
4039     * it might be more efficient to use a version of
4040     * <code>updateNClob</code> which takes a length parameter.
4041     *
4042     * @param columnIndex the first column is 1, the second 2, ...
4043     * @param reader An object that contains the data to set the parameter value to.
4044     * @throws SQLException if the columnIndex is not valid;
4045    * if the driver does not support national
4046     *         character sets;  if the driver can detect that a data conversion
4047     *  error could occur; this method is called on a closed result set,
4048     * if a database access error occurs or
4049     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
4050     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
4051     * this method
4052     * @since 1.6
4053     */
4054    void updateNClob(int columnIndex,  Reader reader) throws SQLException;
4055
4056    /**
4057     * Updates the designated column using the given <code>Reader</code>
4058     * object.
4059     * The data will be read from the stream
4060     * as needed until end-of-stream is reached.  The JDBC driver will
4061     * do any necessary conversion from UNICODE to the database char format.
4062     *
4063     * <p>
4064     * The updater methods are used to update column values in the
4065     * current row or the insert row.  The updater methods do not
4066     * update the underlying database; instead the <code>updateRow</code> or
4067     * <code>insertRow</code> methods are called to update the database.
4068     *
4069     * <P><B>Note:</B> Consult your JDBC driver documentation to determine if
4070     * it might be more efficient to use a version of
4071     * <code>updateNClob</code> which takes a length parameter.
4072     *
4073     * @param columnLabel the label for the column specified with the SQL AS clause.  If the SQL AS clause was not specified, then the label is the name of the column
4074     * @param reader An object that contains the data to set the parameter value to.
4075     * @throws SQLException if the columnLabel is not valid; if the driver does not support national
4076     *         character sets;  if the driver can detect that a data conversion
4077     *  error could occur; this method is called on a closed result set;
4078     *  if a database access error occurs or
4079     * the result set concurrency is <code>CONCUR_READ_ONLY</code>
4080     * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
4081     * this method
4082     * @since 1.6
4083     */
4084    void updateNClob(String columnLabel,  Reader reader) throws SQLException;
4085
4086}
4087