< prev index next >

src/java.sql.rowset/share/classes/com/sun/rowset/internal/SyncResolverImpl.java

Print this page




  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.rowset.internal;
  27 
  28 import java.sql.*;
  29 import javax.sql.*;
  30 import java.util.*;
  31 import java.math.BigDecimal;
  32 
  33 import javax.sql.rowset.*;
  34 import javax.sql.rowset.spi.*;
  35 
  36 import com.sun.rowset.*;
  37 import java.io.IOException;
  38 import java.io.ObjectInputStream;
  39 
  40 /**
  41  * There will be two sets of data which will be maintained by the rowset at the
  42  * time of synchronization. The <code>SyncProvider</code> will utilize the
  43  * <code>SyncResolver</code> to synchronize the changes back to database.
  44  */
  45 public class SyncResolverImpl extends CachedRowSetImpl implements SyncResolver {
  46     /**
  47      * This CachedRowSet object will encapsulate a rowset
  48      * which will be sync'ed with the datasource but will
  49      * contain values in rows where there is conflict.
  50      * For rows other than conflict, it will *not* contain
  51      * any data. For rows containing conflict it will
  52      * return either of the three values set by SyncResolver.*_CONFLICT
  53      * from getStatus()
  54      */
  55     private CachedRowSetImpl crsRes;
  56 
  57     /**
  58      * This is the actual CachedRowSet object
  59      * which is being synchronized back to
  60      * datasource.
  61      */
  62     private CachedRowSetImpl crsSync;
  63 
  64     /**
  65      *  This ArrayList will contain the status of a row
  66      *  from the SyncResolver.* values else it will be null.
  67      */
  68     private ArrayList<?> stats;
  69 
  70     /**
  71      * The RowSetWriter associated with the original
  72      * CachedRowSet object which is being synchronized.
  73      */
  74     private CachedRowSetWriter crw;
  75 
  76     /**
  77      * Row number identifier
  78      */
  79     private int rowStatus;
  80 
  81     /**
  82      * This will contain the size of the <code>CachedRowSet</code> object
  83      */
  84     private int sz;
  85 
  86     /**
  87      * The <code>Connection</code> handle used to synchronize the changes
  88      * back to datasource. This is the same connection handle as was passed
  89      * to the CachedRowSet while fetching the data.
  90      */
  91     private transient Connection con;
  92 
  93     /**
  94      * The <code>CachedRowSet</code> object which will encapsulate
  95      * a row at any time. This will be built from CachedRowSet and
  96      * SyncResolver values. Synchronization takes place on a row by
  97      * row basis encapsulated as a CahedRowSet.
  98      */
  99     private CachedRowSet row;
 100 
 101     private JdbcRowSetResourceBundle resBundle;
 102 
 103     /**
 104      * Public constructor
 105      */
 106     public SyncResolverImpl() throws SQLException {
 107         try {
 108             crsSync = new CachedRowSetImpl();
 109             crsRes = new CachedRowSetImpl();
 110             crw = new CachedRowSetWriter();
 111             row = new CachedRowSetImpl();
 112             rowStatus = 1;
 113             try {
 114                 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
 115             } catch(IOException ioe) {
 116                 throw new RuntimeException(ioe);
 117             }
 118 
 119         } catch(SQLException sqle) {
 120         }
 121      }
 122 
 123 
 124     /**
 125      * Retrieves the conflict status of the current row of this
 126      * <code>SyncResolver</code>, which indicates the operationthe <code>RowSet</code>
 127      * object was attempting when the conflict occurred.
 128      *
 129      * @return one of the following constants:
 130      *         <code>SyncResolver.UPDATE_ROW_CONFLICT</code>,
 131      *         <code>SyncResolver.DELETE_ROW_CONFLICT</code>, or
 132      *         <code>SyncResolver.INSERT_ROW_CONFLICT</code>
 133      */
 134     public int getStatus() {
 135         return ((Integer)stats.get(rowStatus-1)).intValue();
 136     }
 137 
 138     /**
 139      * Retrieves the value in the designated column in the current row of this
 140      * <code>SyncResolver</code> object, which is the value that caused a conflict.
 141      *
 142      * @param index <code>int</code> designating the column in this row of this
 143      *        <code>SyncResolver</code> object from which to retrieve the value
 144      *        causing a conflict
 145      */
 146     public Object getConflictValue(int index) throws SQLException {
 147         try {
 148              return crsRes.getObject(index);
 149         } catch(SQLException sqle) {
 150             throw new SQLException(sqle.getMessage());
 151         }
 152     }
 153 
 154     /**
 155      * Retrieves the value in the designated column in the current row of this
 156      * <code>SyncResolver</code> object, which is the value that caused a conflict.
 157      *
 158      * @param columnName a <code>String</code> object designating the column in this row of this
 159      *        <code>SyncResolver</code> object from which to retrieve the value
 160      *        causing a conflict
 161      */
 162     public Object getConflictValue(String columnName) throws SQLException {
 163         try {
 164              return crsRes.getObject(columnName);
 165         } catch(SQLException sqle) {
 166              throw new SQLException(sqle.getMessage());
 167         }
 168     }
 169 
 170     /**
 171      * Sets <i>obj</i> as the value in column <i>index</i> in the current row of the
 172      * <code>RowSet</code> object. This value is the resolved value that is to be
 173      * persisted in the data source.
 174      *
 175      * @param index an <code>int</code> giving the number of the column into which to
 176      *        set the value to be persisted
 177      * @param obj an <code>Object</code> that is the value to be set in the data source
 178      */
 179     public void setResolvedValue(int index, Object obj) throws SQLException {
 180         // modify method to throw SQLException in spec
 181 
 182         /**
 183          * When a value is resolved properly make it to null
 184          * inside crsRes for that column.
 185          *
 186          * For more than one conflicts in the row,
 187          * check for the last resolved value of the current row
 188          * (Note: it can be resolved randomly for same row)
 189          * then sync back immediately.
 190          **/
 191         try {
 192             // check whether the index is in range
 193             if(index<=0 || index > crsSync.getMetaData().getColumnCount() ) {
 194                 throw new SQLException(resBundle.handleGetObject("syncrsimpl.indexval").toString()+ index);
 195             }
 196              // check whether index col is in conflict
 197             if(crsRes.getObject(index) == null) {


 274                           * Also will prevent from going into a loop of SPE's
 275                           **/
 276                          throw new SQLException(resBundle.handleGetObject("syncrsimpl.syncnotpos").toString());
 277                      }
 278                   } //end if(bool)
 279 
 280              } else {
 281                  throw new SQLException(resBundle.handleGetObject("syncrsimpl.valtores").toString());
 282              } //end if (crs.getObject ...) block
 283 
 284 
 285         } catch(SQLException sqle) {
 286            throw new SQLException(sqle.getMessage());
 287         }
 288     }
 289 
 290     /**
 291      * This passes a CachedRowSet as a row to the CachedRowSetWriter
 292      * after the values have been resolved, back to the datasource.
 293      *
 294      * @param row a <code>CachedRowSet</code> object which will hold the
 295      *        values of a particular row after they have been resolved by
 296      *        the user to synchronize back to datasource.
 297      * @throws SQLException if synchronization does not happen properly
 298      *         maybe beacuse <code>Connection</code> has timed out.
 299      **/
 300      private void writeData(CachedRowSet row) throws SQLException {
 301         crw.updateResolvedConflictToDB(row, crw.getReader().connect((RowSetInternal)crsSync));
 302      }
 303 
 304     /**
 305      * This function builds a row  as a <code>CachedRowSet</code> object
 306      * which has been resolved and is ready to be synchrinized to the datasource
 307      *
 308      * @throws SQLException if there is problem in building
 309      *         the metadata of the row.
 310      **/
 311      private CachedRowSet buildCachedRow() throws SQLException {
 312        int iColCount;
 313        CachedRowSetImpl crsRow = new CachedRowSetImpl();
 314 
 315        RowSetMetaDataImpl rsmd = new RowSetMetaDataImpl();
 316        RowSetMetaDataImpl rsmdWrite = (RowSetMetaDataImpl)crsSync.getMetaData();
 317        RowSetMetaDataImpl rsmdRow = new RowSetMetaDataImpl();
 318 
 319        iColCount = rsmdWrite.getColumnCount();
 320        rsmdRow.setColumnCount(iColCount);
 321 
 322        for(int i =1;i<=iColCount;i++) {
 323           rsmdRow.setColumnType(i,rsmdWrite.getColumnType(i));
 324           rsmdRow.setColumnName(i,rsmdWrite.getColumnName(i));
 325           rsmdRow.setNullable(i,ResultSetMetaData.columnNullableUnknown);


 368 
 369        try {
 370             if(crsSync.getCommand() != null)
 371                 crsRow.setCommand(crsSync.getCommand());
 372        } catch(SQLException sqle) {
 373 
 374        }
 375 
 376        try {
 377             crsRow.setKeyColumns(crsSync.getKeyColumns());
 378        } catch(SQLException sqle) {
 379 
 380        }
 381        return crsRow;
 382     }
 383 
 384 
 385 
 386     /**
 387      * Sets <i>obj</i> as the value in column <i>columnName</i> in the current row of the
 388      * <code>RowSet</code> object. This value is the resolved value that is to be
 389      * persisted in the data source.
 390      *
 391      * @param columnName a <code>String</code> object giving the name of the column
 392      *        into which to set the value to be persisted
 393      * @param obj an <code>Object</code> that is the value to be set in the data source
 394      */
 395     public void setResolvedValue(String columnName, Object obj) throws SQLException {
 396        // modify method to throw SQLException in spec
 397        // %%% Missing implementation!
 398     }
 399 
 400     /**
 401      * This function is package private,
 402      * i.e. cannot be accesses outside this package.
 403      * This is used to set the actual CachedRowSet
 404      * which is being synchronized to the database
 405      **/
 406    void setCachedRowSet(CachedRowSet crs) {
 407            crsSync = (CachedRowSetImpl)crs;
 408     }
 409 
 410     /**
 411      * This function is package private,
 412      * i.e. cannot be accesses outside this package.
 413      * This is used to set the CachedRowSet formed


 428      * i.e. cannot be accesses outside this package.
 429      * This is used to set the status of each row
 430      * to either of the values SyncResolver.*_CONFLICT
 431      **/
 432     @SuppressWarnings("rawtypes")
 433     void setStatus(ArrayList status){
 434              stats = status;
 435     }
 436 
 437     /**
 438      * This function is package private,
 439      * i.e. cannot be accesses outside this package.
 440      * This is used to set the handle to the writer object
 441      * which will write the resolved values back to datasource
 442      **/
 443     void setCachedRowSetWriter(CachedRowSetWriter CRWriter) {
 444          crw = CRWriter;
 445     }
 446 
 447     /**
 448      * Moves the cursor down one row from its current position. A <code>SyncResolver</code>
 449      * cursor is initially positioned before the first conflict row; the first call to the
 450      * method <code>nextConflict()</code> makes the first conflict row the current row;
 451      * the second call makes the second conflict row the current row, and so on.
 452      * <p>
 453      * If an input stream is open for the current row, a call to the method next will
 454      * implicitly close it. A <code>SyncResolver</code> object's warning chain is cleared
 455      * when a new row
 456      *
 457      * @return true if the new current row is valid; false if there are no more rows
 458      * @throws SQLException if a database access occurs
 459      *
 460      */
 461     public boolean nextConflict() throws SQLException {
 462         /**
 463           * The next() method will hop from
 464           * one conflict to another
 465           *
 466           * Internally do a crs.next() until
 467           * next conflict.
 468           **/
 469       boolean bool = false;
 470 
 471       crsSync.setShowDeleted(true);
 472       while(crsSync.next()) {
 473            crsRes.previous();
 474            rowStatus++;  //sz--;


 478              break;
 479           }
 480 
 481           if(((Integer)stats.get(rowStatus-1)).intValue() == SyncResolver.NO_ROW_CONFLICT) {
 482               // do nothing
 483               // bool remains as false
 484              ;
 485            } else {
 486              bool = true;
 487              break;
 488            } //end if
 489 
 490       } //end while
 491 
 492         crsSync.setShowDeleted(false);
 493         return bool;
 494    } // end next() method
 495 
 496 
 497     /**
 498      * Moves the cursor to the previous conflict row in this <code>SyncResolver</code> object.
 499      *
 500      * @return <code>true</code> if the cursor is on a valid row; <code>false</code>
 501      *     if it is off the result set
 502      * @throws SQLException if a database access error occurs or the result set type
 503      *     is TYPE_FORWARD_ONLY
 504      */
 505    public boolean previousConflict() throws SQLException {
 506        throw new UnsupportedOperationException();
 507    }
 508 
 509     //-----------------------------------------------------------------------
 510     // Properties
 511     //-----------------------------------------------------------------------
 512 
 513     /**
 514      * Sets this <code>CachedRowSetImpl</code> object's command property
 515      * to the given <code>String</code> object and clears the parameters,
 516      * if any, that were set for the previous command.
 517      * <P>
 518      * The command property may not be needed
 519      * if the rowset is produced by a data source, such as a spreadsheet,
 520      * that does not support commands. Thus, this property is optional
 521      * and may be <code>null</code>.
 522      *
 523      * @param cmd a <code>String</code> object containing an SQL query
 524      *            that will be set as the command; may be <code>null</code>
 525      * @throws SQLException if an error occurs
 526      */
 527     public void setCommand(String cmd) throws SQLException {
 528          throw new UnsupportedOperationException();
 529     }
 530 
 531 
 532     //---------------------------------------------------------------------
 533     // Reading and writing data
 534     //---------------------------------------------------------------------
 535 
 536     /**
 537      * Populates this <code>CachedRowSetImpl</code> object with data from
 538      * the given <code>ResultSet</code> object.  This
 539      * method is an alternative to the method <code>execute</code>
 540      * for filling the rowset with data.  The method <code>populate</code>
 541      * does not require that the properties needed by the method
 542      * <code>execute</code>, such as the <code>command</code> property,
 543      * be set. This is true because the method <code>populate</code>
 544      * is given the <code>ResultSet</code> object from
 545      * which to get data and thus does not need to use the properties
 546      * required for setting up a connection and executing this
 547      * <code>CachedRowSetImpl</code> object's command.
 548      * <P>
 549      * After populating this rowset with data, the method
 550      * <code>populate</code> sets the rowset's metadata and
 551      * then sends a <code>RowSetChangedEvent</code> object
 552      * to all registered listeners prior to returning.
 553      *
 554      * @param data the <code>ResultSet</code> object containing the data
 555      *             to be read into this <code>CachedRowSetImpl</code> object
 556      * @throws SQLException if an error occurs; or the max row setting is
 557      *          violated while populating the RowSet
 558      * @see #execute
 559      */
 560     public void populate(ResultSet data) throws SQLException {
 561          throw new UnsupportedOperationException();
 562     }
 563 
 564     /**
 565      * Populates this <code>CachedRowSetImpl</code> object with data,
 566      * using the given connection to produce the result set from
 567      * which data will be read.  A second form of this method,
 568      * which takes no arguments, uses the values from this rowset's
 569      * user, password, and either url or data source properties to
 570      * create a new database connection. The form of <code>execute</code>
 571      * that is given a connection ignores these properties.
 572      *
 573      * @param conn A standard JDBC <code>Connection</code> object that this
 574      * <code>CachedRowSet</code> object can pass to a synchronization provider
 575      * to establish a connection to the data source
 576      * @throws SQLException if an invalid <code>Connection</code> is supplied
 577      *           or an error occurs in establishing the connection to the
 578      *           data source
 579      * @see #populate
 580      * @see java.sql.Connection
 581      */
 582     public void execute(Connection conn) throws SQLException {
 583         throw new UnsupportedOperationException();
 584     }
 585 
 586     /**
 587      * Propagates all row update, insert, and delete changes to the
 588      * underlying data source backing this <code>CachedRowSetImpl</code>
 589      * object.
 590      * <P>
 591      * <b>Note</b>In the reference implementation an optimistic concurrency implementation
 592      * is provided as a sample implementation of a the <code>SyncProvider</code>
 593      * abstract class.
 594      * <P>
 595      * This method fails if any of the updates cannot be propagated back
 596      * to the data source.  When it fails, the caller can assume that
 597      * none of the updates are reflected in the data source.
 598      * When an exception is thrown, the current row
 599      * is set to the first "updated" row that resulted in an exception
 600      * unless the row that caused the exception is a "deleted" row.
 601      * In that case, when deleted rows are not shown, which is usually true,
 602      * the current row is not affected.
 603      * <P>
 604      * If no <code>SyncProvider</code> is configured, the reference implementation
 605      * leverages the <code>RIOptimisticProvider</code> available which provides the
 606      * default and reference synchronization capabilities for disconnected
 607      * <code>RowSets</code>.
 608      *
 609      * @throws SQLException if the cursor is on the insert row or the underlying
 610      *          reference synchronization provider fails to commit the updates
 611      *          to the datasource
 612      * @throws SyncProviderException if an internal error occurs within the
 613      *          <code>SyncProvider</code> instance during either during the
 614      *          process or at any time when the <code>SyncProvider</code>
 615      *          instance touches the data source.
 616      * @see #acceptChanges(java.sql.Connection)
 617      * @see javax.sql.RowSetWriter
 618      * @see javax.sql.rowset.spi.SyncProvider
 619      */
 620     public void acceptChanges() throws SyncProviderException {
 621         throw new UnsupportedOperationException();
 622     }
 623 
 624     /**
 625      * Propagates all row update, insert, and delete changes to the
 626      * data source backing this <code>CachedRowSetImpl</code> object
 627      * using the given <code>Connection</code> object.
 628      * <P>
 629      * The reference implementation <code>RIOptimisticProvider</code>
 630      * modifies its synchronization to a write back function given
 631      * the updated connection
 632      * The reference implementation modifies its synchronization behaviour
 633      * via the <code>SyncProvider</code> to ensure the synchronization
 634      * occurs according to the updated JDBC <code>Connection</code>
 635      * properties.
 636      *
 637      * @param con a standard JDBC <code>Connection</code> object
 638      * @throws SQLException if the cursor is on the insert row or the underlying
 639      *                   synchronization provider fails to commit the updates
 640      *                   back to the data source
 641      * @see #acceptChanges
 642      * @see javax.sql.RowSetWriter
 643      * @see javax.sql.rowset.spi.SyncFactory
 644      * @see javax.sql.rowset.spi.SyncProvider
 645      */
 646     public void acceptChanges(Connection con) throws SyncProviderException{
 647      throw new UnsupportedOperationException();
 648     }
 649 
 650     /**
 651      * Restores this <code>CachedRowSetImpl</code> object to its original state,
 652      * that is, its state before the last set of changes.
 653      * <P>
 654      * Before returning, this method moves the cursor before the first row
 655      * and sends a <code>rowSetChanged</code> event to all registered
 656      * listeners.
 657      * @throws SQLException if an error is occurs rolling back the RowSet
 658      *           state to the definied original value.
 659      * @see javax.sql.RowSetListener#rowSetChanged
 660      */
 661     public void restoreOriginal() throws SQLException {
 662         throw new UnsupportedOperationException();
 663     }
 664 
 665     /**
 666      * Releases the current contents of this <code>CachedRowSetImpl</code>
 667      * object and sends a <code>rowSetChanged</code> event object to all
 668      * registered listeners.
 669      *
 670      * @throws SQLException if an error occurs flushing the contents of
 671      *           RowSet.
 672      * @see javax.sql.RowSetListener#rowSetChanged
 673      */
 674     public void release() throws SQLException {
 675         throw new UnsupportedOperationException();
 676     }
 677 
 678     /**
 679      * Cancels deletion of the current row and notifies listeners that
 680      * a row has changed.
 681      * <P>
 682      * Note:  This method can be ignored if deleted rows are not being shown,
 683      * which is the normal case.
 684      *
 685      * @throws SQLException if the cursor is not on a valid row
 686      */
 687     public void undoDelete() throws SQLException {
 688         throw new UnsupportedOperationException();
 689     }
 690 
 691     /**
 692      * Immediately removes the current row from this
 693      * <code>CachedRowSetImpl</code> object if the row has been inserted, and
 694      * also notifies listeners the a row has changed.  An exception is thrown
 695      * if the row is not a row that has been inserted or the cursor is before
 696      * the first row, after the last row, or on the insert row.
 697      * <P>
 698      * This operation cannot be undone.
 699      *
 700      * @throws SQLException if an error occurs,
 701      *                         the cursor is not on a valid row,
 702      *                         or the row has not been inserted
 703      */
 704     public void undoInsert() throws SQLException {
 705         throw new UnsupportedOperationException();
 706     }
 707 
 708     /**
 709      * Immediately reverses the last update operation if the
 710      * row has been modified. This method can be
 711      * called to reverse updates on a all columns until all updates in a row have
 712      * been rolled back to their originating state since the last synchronization
 713      * (<code>acceptChanges</code>) or population. This method may also be called
 714      * while performing updates to the insert row.
 715      * <P>
 716      * <code>undoUpdate</code may be called at any time during the life-time of a
 717      * rowset, however after a synchronization has occurs this method has no
 718      * affect until further modification to the RowSet data occurs.
 719      *
 720      * @throws SQLException if cursor is before the first row, after the last
 721      *     row in rowset.
 722      * @see #undoDelete
 723      * @see #undoInsert
 724      * @see java.sql.ResultSet#cancelRowUpdates
 725      */
 726     public void undoUpdate() throws SQLException {
 727         throw new UnsupportedOperationException();
 728 
 729     }
 730 
 731     //--------------------------------------------------------------------
 732     // Views
 733     //--------------------------------------------------------------------
 734 
 735     /**
 736      * Returns a new <code>RowSet</code> object backed by the same data as
 737      * that of this <code>CachedRowSetImpl</code> object and sharing a set of cursors
 738      * with it. This allows cursors to interate over a shared set of rows, providing
 739      * multiple views of the underlying data.
 740      *
 741      * @return a <code>RowSet</code> object that is a copy of this <code>CachedRowSetImpl</code>
 742      * object and shares a set of cursors with it
 743      * @throws SQLException if an error occurs or cloning is
 744      *                         not supported
 745      * @see javax.sql.RowSetEvent
 746      * @see javax.sql.RowSetListener
 747      */
 748     public RowSet createShared() throws SQLException {
 749         throw new UnsupportedOperationException();
 750     }
 751 
 752     /**
 753      * Returns a new <code>RowSet</code> object containing by the same data
 754      * as this <code>CachedRowSetImpl</code> object.  This method
 755      * differs from the method <code>createCopy</code> in that it throws a
 756      * <code>CloneNotSupportedException</code> object instead of an
 757      * <code>SQLException</code> object, as the method <code>createShared</code>
 758      * does.  This <code>clone</code>
 759      * method is called internally by the method <code>createShared</code>,
 760      * which catches the <code>CloneNotSupportedException</code> object
 761      * and in turn throws a new <code>SQLException</code> object.
 762      *
 763      * @return a copy of this <code>CachedRowSetImpl</code> object
 764      * @throws CloneNotSupportedException if an error occurs when
 765      * attempting to clone this <code>CachedRowSetImpl</code> object
 766      * @see #createShared
 767      */
 768     protected Object clone() throws CloneNotSupportedException  {
 769        throw new UnsupportedOperationException();
 770     }
 771 
 772     /**
 773      * Creates a <code>RowSet</code> object that is a deep copy of
 774      * this <code>CachedRowSetImpl</code> object's data, including
 775      * constraints.  Updates made
 776      * on a copy are not visible to the original rowset;
 777      * a copy of a rowset is completely independent from the original.
 778      * <P>
 779      * Making a copy saves the cost of creating an identical rowset
 780      * from first principles, which can be quite expensive.
 781      * For example, it can eliminate the need to query a
 782      * remote database server.
 783      * @return a new <code>CachedRowSet</code> object that is a deep copy
 784      *           of this <code>CachedRowSet</code> object and is
 785      *           completely independent from this <code>CachedRowSetImpl</code>
 786      *           object.
 787      * @throws SQLException if an error occurs in generating the copy of this
 788      *           of the <code>CachedRowSetImpl</code>
 789      * @see #createShared
 790      * @see javax.sql.RowSetEvent
 791      * @see javax.sql.RowSetListener
 792      */
 793     public CachedRowSet createCopy() throws SQLException {
 794         throw new UnsupportedOperationException();
 795     }
 796 
 797     /**
 798      * Creates a <code>RowSet</code> object that is a copy of
 799      * this <code>CachedRowSetImpl</code> object's table structure
 800      * and the constraints only.
 801      * There will be no data in the object being returned.
 802      * Updates made on a copy are not visible to the original rowset.
 803      * <P>
 804      * This helps in getting the underlying XML schema which can
 805      * be used as the basis for populating a <code>WebRowSet</code>.
 806      *
 807      * @return a new <code>CachedRowSet</code> object that is a copy
 808      * of this <code>CachedRowSetImpl</code> object's schema and
 809      * retains all the constraints on the original rowset but contains
 810      * no data
 811      * @throws SQLException if an error occurs in generating the copy
 812      * of the <code>CachedRowSet</code> object
 813      * @see #createShared
 814      * @see #createCopy
 815      * @see #createCopyNoConstraints
 816      * @see javax.sql.RowSetEvent
 817      * @see javax.sql.RowSetListener
 818      */
 819     public CachedRowSet createCopySchema() throws SQLException {
 820         throw new UnsupportedOperationException();
 821     }
 822 
 823     /**
 824      * Creates a <code>CachedRowSet</code> object that is a copy of
 825      * this <code>CachedRowSetImpl</code> object's data only.
 826      * All constraints set in this object will not be there
 827      * in the returning object.  Updates made
 828      * on a copy are not visible to the original rowset.
 829      *
 830      * @return a new <code>CachedRowSet</code> object that is a deep copy
 831      * of this <code>CachedRowSetImpl</code> object and is
 832      * completely independent from this <code>CachedRowSetImpl</code> object
 833      * @throws SQLException if an error occurs in generating the copy of the
 834      * of the <code>CachedRowSet</code>
 835      * @see #createShared
 836      * @see #createCopy
 837      * @see #createCopySchema
 838      * @see javax.sql.RowSetEvent
 839      * @see javax.sql.RowSetListener
 840      */
 841     public CachedRowSet createCopyNoConstraints() throws SQLException {
 842         throw new UnsupportedOperationException();
 843     }
 844 
 845     /**
 846      * Converts this <code>CachedRowSetImpl</code> object to a collection
 847      * of tables. The sample implementation utilitizes the <code>TreeMap</code>
 848      * collection type.
 849      * This class guarantees that the map will be in ascending key order,
 850      * sorted according to the natural order for the key's class.
 851      *
 852      * @return a <code>Collection</code> object consisting of tables,
 853      *         each of which is a copy of a row in this
 854      *         <code>CachedRowSetImpl</code> object
 855      * @throws SQLException if an error occurs in generating the collection
 856      * @see #toCollection(int)
 857      * @see #toCollection(String)
 858      * @see java.util.TreeMap
 859      */
 860     @SuppressWarnings("rawtypes")
 861     public Collection toCollection() throws SQLException {
 862        throw new UnsupportedOperationException();
 863     }
 864 
 865     /**
 866      * Returns the specified column of this <code>CachedRowSetImpl</code> object
 867      * as a <code>Collection</code> object.  This method makes a copy of the
 868      * column's data and utilitizes the <code>Vector</code> to establish the
 869      * collection. The <code>Vector</code> class implements a growable array
 870      * objects allowing the individual components to be accessed using an
 871      * an integer index similar to that of an array.
 872      *
 873      * @return a <code>Collection</code> object that contains the value(s)
 874      *         stored in the specified column of this
 875      *         <code>CachedRowSetImpl</code>
 876      *         object
 877      * @throws SQLException if an error occurs generated the collection; or
 878      *          an invalid column is provided.
 879      * @see #toCollection()
 880      * @see #toCollection(String)
 881      * @see java.util.Vector
 882      */
 883     @SuppressWarnings("rawtypes")
 884     public Collection toCollection(int column) throws SQLException {
 885        throw new UnsupportedOperationException();
 886     }
 887 
 888     /**
 889      * Returns the specified column of this <code>CachedRowSetImpl</code> object
 890      * as a <code>Collection</code> object.  This method makes a copy of the
 891      * column's data and utilitizes the <code>Vector</code> to establish the
 892      * collection. The <code>Vector</code> class implements a growable array
 893      * objects allowing the individual components to be accessed using an
 894      * an integer index similar to that of an array.
 895      *
 896      * @return a <code>Collection</code> object that contains the value(s)
 897      *         stored in the specified column of this
 898      *         <code>CachedRowSetImpl</code>
 899      *         object
 900      * @throws SQLException if an error occurs generated the collection; or
 901      *          an invalid column is provided.
 902      * @see #toCollection()
 903      * @see #toCollection(int)
 904      * @see java.util.Vector
 905      */
 906     @SuppressWarnings("rawtypes")
 907     public Collection toCollection(String column) throws SQLException {
 908         throw new UnsupportedOperationException();
 909     }
 910 
 911     //--------------------------------------------------------------------
 912     // Advanced features
 913     //--------------------------------------------------------------------
 914 
 915 
 916     /**
 917      * Returns the <code>SyncProvider</code> implementation being used
 918      * with this <code>CachedRowSetImpl</code> implementation rowset.
 919      *
 920      * @return the SyncProvider used by the rowset. If not provider was
 921      *          set when the rowset was instantiated, the reference
 922      *          implementation (default) provider is returned.
 923      * @throws SQLException if error occurs while return the
 924      *          <code>SyncProvider</code> instance.
 925      */
 926     public SyncProvider getSyncProvider() throws SQLException {
 927       throw new UnsupportedOperationException();
 928     }
 929 
 930     /**
 931      * Sets the active <code>SyncProvider</code> and attempts to load
 932      * load the new provider using the <code>SyncFactory</code> SPI.
 933      *
 934      * @throws SQLException if an error occurs while resetting the
 935      *          <code>SyncProvider</code>.
 936      */
 937     public void setSyncProvider(String providerStr) throws SQLException {
 938         throw new UnsupportedOperationException();
 939     }
 940 
 941 
 942     //-----------------
 943     // methods inherited from RowSet
 944     //-----------------
 945 
 946 
 947 
 948 
 949 
 950 
 951     //---------------------------------------------------------------------
 952     // Reading and writing data
 953     //---------------------------------------------------------------------
 954 
 955     /**
 956      * Populates this <code>CachedRowSetImpl</code> object with data.
 957      * This form of the method uses the rowset's user, password, and url or
 958      * data source name properties to create a database
 959      * connection.  If properties that are needed
 960      * have not been set, this method will throw an exception.
 961      * <P>
 962      * Another form of this method uses an existing JDBC <code>Connection</code>
 963      * object instead of creating a new one; therefore, it ignores the
 964      * properties used for establishing a new connection.
 965      * <P>
 966      * The query specified by the command property is executed to create a
 967      * <code>ResultSet</code> object from which to retrieve data.
 968      * The current contents of the rowset are discarded, and the
 969      * rowset's metadata is also (re)set.  If there are outstanding updates,
 970      * they are also ignored.
 971      * <P>
 972      * The method <code>execute</code> closes any database connections that it
 973      * creates.
 974      *
 975      * @throws SQLException if an error occurs or the
 976      *                         necessary properties have not been set
 977      */
 978     public void execute() throws SQLException {
 979         throw new UnsupportedOperationException();
 980     }
 981 
 982 
 983 
 984     //-----------------------------------
 985     // Methods inherited from ResultSet
 986     //-----------------------------------
 987 
 988     /**
 989      * Moves the cursor down one row from its current position and
 990      * returns <code>true</code> if the new cursor position is a
 991      * valid row.
 992      * The cursor for a new <code>ResultSet</code> object is initially
 993      * positioned before the first row. The first call to the method
 994      * <code>next</code> moves the cursor to the first row, making it
 995      * the current row; the second call makes the second row the
 996      * current row, and so on.
 997      *
 998      * <P>If an input stream from the previous row is open, it is
 999      * implicitly closed. The <code>ResultSet</code> object's warning
1000      * chain is cleared when a new row is read.
1001      *
1002      * @return <code>true</code> if the new current row is valid;
1003      *         <code>false</code> if there are no more rows
1004      * @throws SQLException if an error occurs or
1005      *            the cursor is not positioned in the rowset, before
1006      *            the first row, or after the last row
1007      */
1008     public boolean next() throws SQLException {
1009        throw new UnsupportedOperationException();
1010     }
1011 
1012     /**
1013      * Moves this <code>CachedRowSetImpl</code> object's cursor to the next
1014      * row and returns <code>true</code> if the cursor is still in the rowset;
1015      * returns <code>false</code> if the cursor has moved to the position after
1016      * the last row.
1017      * <P>
1018      * This method handles the cases where the cursor moves to a row that
1019      * has been deleted.
1020      * If this rowset shows deleted rows and the cursor moves to a row
1021      * that has been deleted, this method moves the cursor to the next
1022      * row until the cursor is on a row that has not been deleted.
1023      * <P>
1024      * The method <code>internalNext</code> is called by methods such as
1025      * <code>next</code>, <code>absolute</code>, and <code>relative</code>,
1026      * and, as its name implies, is only called internally.
1027      * <p>
1028      * This is a implementation only method and is not required as a standard
1029      * implementation of the <code>CachedRowSet</code> interface.
1030      *
1031      * @return <code>true</code> if the cursor is on a valid row in this
1032      *         rowset; <code>false</code> if it is after the last row
1033      * @throws SQLException if an error occurs
1034      */
1035     protected boolean internalNext() throws SQLException {
1036         throw new UnsupportedOperationException();
1037     }
1038 
1039     /**
1040      * Closes this <code>CachedRowSetImpl</code> objecy and releases any resources
1041      * it was using.
1042      *
1043      * @throws SQLException if an error occurs when releasing any resources in use
1044      * by this <code>CachedRowSetImpl</code> object
1045      */
1046     public void close() throws SQLException {
1047         throw new UnsupportedOperationException();
1048     }
1049 
1050     /**
1051      * Reports whether the last column read was SQL <code>NULL</code>.
1052      * Note that you must first call the method <code>getXXX</code>
1053      * on a column to try to read its value and then call the method
1054      * <code>wasNull</code> to determine whether the value was
1055      * SQL <code>NULL</code>.
1056      *
1057      * @return <code>true</code> if the value in the last column read
1058      *         was SQL <code>NULL</code>; <code>false</code> otherwise
1059      * @throws SQLException if an error occurs
1060      */
1061     public boolean wasNull() throws SQLException {
1062         throw new UnsupportedOperationException();
1063     }
1064 
1065     /**
1066      * Returns the insert row or the current row of this
1067      * <code>CachedRowSetImpl</code>object.
1068      *
1069      * @return the <code>Row</code> object on which this <code>CachedRowSetImpl</code>
1070      * objects's cursor is positioned
1071      */
1072     protected BaseRow getCurrentRow() {
1073         throw new UnsupportedOperationException();
1074     }
1075 
1076     /**
1077      * Removes the row on which the cursor is positioned.
1078      * <p>
1079      * This is a implementation only method and is not required as a standard
1080      * implementation of the <code>CachedRowSet</code> interface.
1081      *
1082      * @throws SQLException if the cursor is positioned on the insert
1083      *            row
1084      */
1085     protected void removeCurrentRow() {
1086         throw new UnsupportedOperationException();
1087     }
1088 
1089 
1090     /**
1091      * Retrieves the value of the designated column in the current row
1092      * of this <code>CachedRowSetImpl</code> object as a
1093      * <code>String</code> object.
1094      *
1095      * @param columnIndex the first column is <code>1</code>, the second
1096      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1097      *        and equal to or less than the number of columns in the rowset
1098      * @return the column value; if the value is SQL <code>NULL</code>, the
1099      *         result is <code>null</code>
1100      * @throws SQLException if (1) the given column index is out of bounds,
1101      * (2) the cursor is not on one of this rowset's rows or its
1102      * insert row, or (3) the designated column does not store an
1103      * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
1104      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>, <b>VARCHAR</b></code>
1105      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
1106      * recommended return type.
1107      */
1108     public String getString(int columnIndex) throws SQLException {
1109         throw new UnsupportedOperationException();
1110     }
1111 
1112     /**
1113      * Retrieves the value of the designated column in the current row
1114      * of this <code>CachedRowSetImpl</code> object as a
1115      * <code>boolean</code> value.
1116      *
1117      * @param columnIndex the first column is <code>1</code>, the second
1118      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1119      *        and equal to or less than the number of columns in the rowset
1120      * @return the column value as a <code>boolean</code> in the Java progamming language;
1121      *        if the value is SQL <code>NULL</code>, the result is <code>false</code>
1122      * @throws SQLException if (1) the given column index is out of bounds,
1123      *            (2) the cursor is not on one of this rowset's rows or its
1124      *            insert row, or (3) the designated column does not store an
1125      *            SQL <code>BOOLEAN</code> value
1126      * @see #getBoolean(String)
1127      */
1128     public boolean getBoolean(int columnIndex) throws SQLException {
1129         throw new UnsupportedOperationException();
1130     }
1131 
1132     /**
1133      * Retrieves the value of the designated column in the current row
1134      * of this <code>CachedRowSetImpl</code> object as a
1135      * <code>byte</code> value.
1136      *
1137      * @param columnIndex the first column is <code>1</code>, the second
1138      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1139      *        and equal to or less than the number of columns in the rowset
1140      * @return the column value as a <code>byte</code> in the Java programming
1141      * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
1142      * @throws SQLException if (1) the given column index is out of bounds,
1143      *            (2) the cursor is not on one of this rowset's rows or its
1144      *            insert row, or (3) the designated column does not store an
1145      *            SQL <code><b>TINYINT</b>, SMALLINT, INTEGER, BIGINT, REAL,
1146      *            FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1147      *            or <code>LONGVARCHAR</code> value. The bold SQL type
1148      *            designates the recommended return type.
1149      * @see #getByte(String)
1150      */
1151     public byte getByte(int columnIndex) throws SQLException {
1152         throw new UnsupportedOperationException();
1153     }
1154 
1155     /**
1156      * Retrieves the value of the designated column in the current row
1157      * of this <code>CachedRowSetImpl</code> object as a
1158      * <code>short</code> value.
1159      *
1160      * @param columnIndex the first column is <code>1</code>, the second
1161      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1162      *        and equal to or less than the number of columns in the rowset
1163      * @return the column value; if the value is SQL <code>NULL</code>, the
1164      *         result is <code>0</code>
1165      * @throws SQLException if (1) the given column index is out of bounds,
1166      * (2) the cursor is not on one of this rowset's rows or its
1167      * insert row, or (3) the designated column does not store an
1168      * SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER, BIGINT, REAL
1169      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1170      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
1171      * recommended return type.

1172      * @see #getShort(String)
1173      */
1174     public short getShort(int columnIndex) throws SQLException {
1175         throw new UnsupportedOperationException();
1176     }
1177 
1178     /**
1179      * Retrieves the value of the designated column in the current row
1180      * of this <code>CachedRowSetImpl</code> object as an
1181      * <code>int</code> value.
1182      *
1183      * @param columnIndex the first column is <code>1</code>, the second
1184      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1185      *        and equal to or less than the number of columns in the rowset
1186      * @return the column value; if the value is SQL <code>NULL</code>, the
1187      *         result is <code>0</code>
1188      * @throws SQLException if (1) the given column index is out of bounds,
1189      * (2) the cursor is not on one of this rowset's rows or its
1190      * insert row, or (3) the designated column does not store an
1191      * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
1192      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1193      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the

1194      * recommended return type.
1195      */
1196     public int getInt(int columnIndex) throws SQLException {
1197         throw new UnsupportedOperationException();
1198     }
1199 
1200     /**
1201      * Retrieves the value of the designated column in the current row
1202      * of this <code>CachedRowSetImpl</code> object as a
1203      * <code>long</code> value.
1204      *
1205      * @param columnIndex the first column is <code>1</code>, the second
1206      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1207      *        and equal to or less than the number of columns in the rowset
1208      * @return the column value; if the value is SQL <code>NULL</code>, the
1209      *         result is <code>0</code>
1210      * @throws SQLException if (1) the given column index is out of bounds,
1211      * (2) the cursor is not on one of this rowset's rows or its
1212      * insert row, or (3) the designated column does not store an
1213      * SQL <code>TINYINT, SMALLINT, INTEGER, <b>BIGINT</b>, REAL
1214      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1215      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
1216      * recommended return type.

1217      * @see #getLong(String)
1218      */
1219     public long getLong(int columnIndex) throws SQLException {
1220         throw new UnsupportedOperationException();
1221     }
1222 
1223     /**
1224      * Retrieves the value of the designated column in the current row
1225      * of this <code>CachedRowSetImpl</code> object as a
1226      * <code>float</code> value.
1227      *
1228      * @param columnIndex the first column is <code>1</code>, the second
1229      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1230      *        and equal to or less than the number of columns in the rowset
1231      * @return the column value; if the value is SQL <code>NULL</code>, the
1232      *         result is <code>0</code>
1233      * @throws SQLException if (1) the given column index is out of bounds,
1234      * (2) the cursor is not on one of this rowset's rows or its
1235      * insert row, or (3) the designated column does not store an
1236      * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, <b>REAL</b>,
1237      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1238      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
1239      * recommended return type.
1240      * @see #getFloat(String)
1241      */
1242     public float getFloat(int columnIndex) throws SQLException {
1243         throw new UnsupportedOperationException();
1244     }
1245 
1246     /**
1247      * Retrieves the value of the designated column in the current row
1248      * of this <code>CachedRowSetImpl</code> object as a
1249      * <code>double</code> value.
1250      *
1251      * @param columnIndex the first column is <code>1</code>, the second
1252      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1253      *        and equal to or less than the number of columns in the rowset
1254      * @return the column value; if the value is SQL <code>NULL</code>, the
1255      *         result is <code>0</code>
1256      * @throws SQLException if (1) the given column index is out of bounds,
1257      * (2) the cursor is not on one of this rowset's rows or its
1258      * insert row, or (3) the designated column does not store an
1259      * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
1260      * <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1261      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the
1262      * recommended return type.

1263      * @see #getDouble(String)
1264      *
1265      */
1266     public double getDouble(int columnIndex) throws SQLException {
1267         throw new UnsupportedOperationException();
1268     }
1269 
1270     /**
1271      * Retrieves the value of the designated column in the current row
1272      * of this <code>CachedRowSetImpl</code> object as a
1273      * <code>java.math.BigDecimal</code> object.
1274      * <P>
1275      * This method is deprecated; use the version of <code>getBigDecimal</code>
1276      * that does not take a scale parameter and returns a value with full
1277      * precision.
1278      *
1279      * @param columnIndex the first column is <code>1</code>, the second
1280      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1281      *        and equal to or less than the number of columns in the rowset
1282      * @param scale the number of digits to the right of the decimal point in the
1283      *        value returned
1284      * @return the column value with the specified number of digits to the right
1285      *         of the decimal point; if the value is SQL <code>NULL</code>, the
1286      *         result is <code>null</code>
1287      * @throws SQLException if the given column index is out of bounds,
1288      *            the cursor is not on a valid row, or this method fails
1289      * @deprecated
1290      */
1291     @Deprecated
1292     public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
1293        throw new UnsupportedOperationException();
1294     }
1295 
1296     /**
1297      * Retrieves the value of the designated column in the current row
1298      * of this <code>CachedRowSetImpl</code> object as a
1299      * <code>byte</code> array value.
1300      *
1301      * @param columnIndex the first column is <code>1</code>, the second
1302      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1303      *        and equal to or less than the number of columns in the rowset
1304      * @return the column value as a <code>byte</code> array in the Java programming
1305      * language; if the value is SQL <code>NULL</code>, the
1306      * result is <code>null</code>
1307      *
1308      * @throws SQLException if (1) the given column index is out of bounds,
1309      * (2) the cursor is not on one of this rowset's rows or its
1310      * insert row, or (3) the designated column does not store an
1311      * SQL <code><b>BINARY</b>, <b>VARBINARY</b> or
1312      * LONGVARBINARY</code> value.
1313      * The bold SQL type designates the recommended return type.
1314      * @see #getBytes(String)
1315      */
1316     public byte[] getBytes(int columnIndex) throws SQLException {
1317         throw new UnsupportedOperationException();
1318     }
1319 
1320     /**
1321      * Retrieves the value of the designated column in the current row
1322      * of this <code>CachedRowSetImpl</code> object as a
1323      * <code>java.sql.Date</code> object.
1324      *
1325      * @param columnIndex the first column is <code>1</code>, the second
1326      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1327      *        and equal to or less than the number of columns in the rowset
1328      * @return the column value as a <code>java.sql.Data</code> object; if
1329      *        the value is SQL <code>NULL</code>, the
1330      *        result is <code>null</code>
1331      * @throws SQLException if the given column index is out of bounds,
1332      *            the cursor is not on a valid row, or this method fails
1333      */
1334     public java.sql.Date getDate(int columnIndex) throws SQLException {
1335         throw new UnsupportedOperationException();
1336     }
1337 
1338     /**
1339      * Retrieves the value of the designated column in the current row
1340      * of this <code>CachedRowSetImpl</code> object as a
1341      * <code>java.sql.Time</code> object.
1342      *
1343      * @param columnIndex the first column is <code>1</code>, the second
1344      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1345      *        and equal to or less than the number of columns in the rowset
1346      * @return the column value; if the value is SQL <code>NULL</code>, the
1347      *         result is <code>null</code>
1348      * @throws SQLException if the given column index is out of bounds,
1349      *         the cursor is not on a valid row, or this method fails
1350      */
1351     public java.sql.Time getTime(int columnIndex) throws SQLException {
1352         throw new UnsupportedOperationException();
1353     }
1354 
1355     /**
1356      * Retrieves the value of the designated column in the current row
1357      * of this <code>CachedRowSetImpl</code> object as a
1358      * <code>java.sql.Timestamp</code> object.
1359      *
1360      * @param columnIndex the first column is <code>1</code>, the second
1361      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1362      *        and equal to or less than the number of columns in the rowset
1363      * @return the column value; if the value is SQL <code>NULL</code>, the
1364      *         result is <code>null</code>
1365      * @throws SQLException if the given column index is out of bounds,
1366      *            the cursor is not on a valid row, or this method fails
1367      */
1368     public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
1369         throw new UnsupportedOperationException();
1370     }
1371 
1372     /**
1373      * Retrieves the value of the designated column in the current row of this
1374      * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
1375      * object.
1376      *
1377      * A column value can be retrieved as a stream of ASCII characters
1378      * and then read in chunks from the stream.  This method is particularly
1379      * suitable for retrieving large <code>LONGVARCHAR</code> values.  The JDBC
1380      * driver will do any necessary conversion from the database format into ASCII.
1381      *
1382      * <P><B>Note:</B> All the data in the returned stream must be
1383      * read prior to getting the value of any other column. The next
1384      * call to a get method implicitly closes the stream. . Also, a
1385      * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
1386      * whether there is data available or not.
1387      *
1388      * @param columnIndex the first column is <code>1</code>, the second
1389      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1390      *        and equal to or less than the number of columns in this rowset
1391      * @return a Java input stream that delivers the database column value
1392      *         as a stream of one-byte ASCII characters.  If the value is SQL
1393      *         <code>NULL</code>, the result is <code>null</code>.
1394      * @throws SQLException if (1) the given column index is out of bounds,
1395      * (2) the cursor is not on one of this rowset's rows or its
1396      * insert row, or (3) the designated column does not store an
1397      * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
1398      * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
1399      * bold SQL type designates the recommended return types that this method is
1400      * used to retrieve.
1401      * @see #getAsciiStream(String)
1402      */
1403     public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
1404        throw new UnsupportedOperationException();
1405     }
1406 
1407     /**
1408      * A column value can be retrieved as a stream of Unicode characters
1409      * and then read in chunks from the stream.  This method is particularly
1410      * suitable for retrieving large LONGVARCHAR values.  The JDBC driver will
1411      * do any necessary conversion from the database format into Unicode.
1412      *
1413      * <P><B>Note:</B> All the data in the returned stream must be
1414      * read prior to getting the value of any other column. The next
1415      * call to a get method implicitly closes the stream. . Also, a
1416      * stream may return 0 for available() whether there is data
1417      * available or not.
1418      *
1419      * @param columnIndex the first column is <code>1</code>, the second
1420      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1421      *        and equal to or less than the number of columns in this rowset
1422      * @return a Java input stream that delivers the database column value
1423      * as a stream of two byte Unicode characters.  If the value is SQL NULL
1424      * then the result is null.
1425      * @throws SQLException if an error occurs
1426      * @deprecated
1427      */
1428     @Deprecated
1429     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
1430        throw new UnsupportedOperationException();
1431     }
1432 
1433     /**
1434      * Retrieves the value of the designated column in the current row of this
1435      * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
1436      * object.
1437      * <P>
1438      * A column value can be retrieved as a stream of uninterpreted bytes
1439      * and then read in chunks from the stream.  This method is particularly
1440      * suitable for retrieving large <code>LONGVARBINARY</code> values.
1441      *
1442      * <P><B>Note:</B> All the data in the returned stream must be
1443      * read prior to getting the value of any other column. The next
1444      * call to a get method implicitly closes the stream. Also, a
1445      * stream may return <code>0</code> for
1446      * <code>CachedRowSetImpl.available()</code> whether there is data
1447      * available or not.
1448      *
1449      * @param columnIndex the first column is <code>1</code>, the second
1450      * is <code>2</code>, and so on; must be <code>1</code> or larger
1451      * and equal to or less than the number of columns in the rowset
1452      * @return a Java input stream that delivers the database column value
1453      * as a stream of uninterpreted bytes.  If the value is SQL <code>NULL</code>
1454      * then the result is <code>null</code>.
1455      * @throws SQLException if (1) the given column index is out of bounds,
1456      * (2) the cursor is not on one of this rowset's rows or its
1457      * insert row, or (3) the designated column does not store an
1458      * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
1459      * The bold type indicates the SQL type that this method is recommened
1460      * to retrieve.
1461      * @see #getBinaryStream(String)
1462      */
1463     public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
1464        throw new UnsupportedOperationException();
1465 
1466     }
1467 
1468 
1469     //======================================================================
1470     // Methods for accessing results by column name
1471     //======================================================================
1472 
1473     /**
1474      * Retrieves the value stored in the designated column
1475      * of the current row as a <code>String</code> object.
1476      *
1477      * @param columnName a <code>String</code> object giving the SQL name of
1478      *        a column in this <code>CachedRowSetImpl</code> object
1479      * @return the column value; if the value is SQL <code>NULL</code>,
1480      *         the result is <code>null</code>
1481      * @throws SQLException if (1) the given column name is not the name of
1482      * a column in this rowset, (2) the cursor is not on one of
1483      * this rowset's rows or its insert row, or (3) the designated
1484      * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
1485      * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, <b>CHAR</b>,
1486      * <b>VARCHAR</b></code> or <code>LONGVARCHAR<</code> value. The bold SQL type
1487      * designates the recommended return type.
1488      */
1489     public String getString(String columnName) throws SQLException {
1490         throw new UnsupportedOperationException();
1491     }
1492 
1493     /**
1494      * Retrieves the value stored in the designated column
1495      * of the current row as a <code>boolean</code> value.
1496      *
1497      * @param columnName a <code>String</code> object giving the SQL name of
1498      *        a column in this <code>CachedRowSetImpl</code> object
1499      * @return the column value as a <code>boolean</code> in the Java programming
1500      *        language; if the value is SQL <code>NULL</code>,
1501      *        the result is <code>false</code>
1502      * @throws SQLException if (1) the given column name is not the name of
1503      *            a column in this rowset, (2) the cursor is not on one of
1504      *            this rowset's rows or its insert row, or (3) the designated
1505      *            column does not store an SQL <code>BOOLEAN</code> value
1506      * @see #getBoolean(int)
1507      */
1508     public boolean getBoolean(String columnName) throws SQLException {
1509         throw new UnsupportedOperationException();
1510     }
1511 
1512     /**
1513      * Retrieves the value stored in the designated column
1514      * of the current row as a <code>byte</code> value.
1515      *
1516      * @param columnName a <code>String</code> object giving the SQL name of
1517      *        a column in this <code>CachedRowSetImpl</code> object
1518      * @return the column value as a <code>byte</code> in the Java programming
1519      * language; if the value is SQL <code>NULL</code>, the result is <code>0</code>
1520      * @throws SQLException if (1) the given column name is not the name of
1521      * a column in this rowset, (2) the cursor is not on one of
1522      * this rowset's rows or its insert row, or (3) the designated
1523      * column does not store an SQL <code><B>TINYINT</B>, SMALLINT, INTEGER,
1524      * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
1525      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The
1526      * bold type designates the recommended return type
1527      */
1528     public byte getByte(String columnName) throws SQLException {
1529         throw new UnsupportedOperationException();
1530     }
1531 
1532     /**
1533      * Retrieves the value stored in the designated column
1534      * of the current row as a <code>short</code> value.
1535      *
1536      * @param columnName a <code>String</code> object giving the SQL name of
1537      *        a column in this <code>CachedRowSetImpl</code> object
1538      * @return the column value; if the value is SQL <code>NULL</code>,
1539      *         the result is <code>0</code>
1540      * @throws SQLException if (1) the given column name is not the name of
1541      * a column in this rowset, (2) the cursor is not on one of
1542      * this rowset's rows or its insert row, or (3) the designated
1543      * column does not store an SQL <code>TINYINT, <b>SMALLINT</b>, INTEGER

1544      * BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
1545      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
1546      * designates the recommended return type.
1547      * @see #getShort(int)
1548      */
1549     public short getShort(String columnName) throws SQLException {
1550        throw new UnsupportedOperationException();
1551     }
1552 
1553     /**
1554      * Retrieves the value stored in the designated column
1555      * of the current row as an <code>int</code> value.
1556      *
1557      * @param columnName a <code>String</code> object giving the SQL name of
1558      *        a column in this <code>CachedRowSetImpl</code> object
1559      * @return the column value; if the value is SQL <code>NULL</code>,
1560      *         the result is <code>0</code>
1561      * @throws SQLException if (1) the given column name is not the name
1562      * of a column in this rowset,
1563      * (2) the cursor is not on one of this rowset's rows or its
1564      * insert row, or (3) the designated column does not store an
1565      * SQL <code>TINYINT, SMALLINT, <b>INTEGER</b>, BIGINT, REAL
1566      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR, VARCHAR</code>
1567      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the

1568      * recommended return type.
1569      */
1570     public int getInt(String columnName) throws SQLException {
1571         throw new UnsupportedOperationException();
1572     }
1573 
1574     /**
1575      * Retrieves the value stored in the designated column
1576      * of the current row as a <code>long</code> value.
1577      *
1578      * @param columnName a <code>String</code> object giving the SQL name of
1579      *        a column in this <code>CachedRowSetImpl</code> object
1580      * @return the column value; if the value is SQL <code>NULL</code>,
1581      *         the result is <code>0</code>
1582      * @throws SQLException if (1) the given column name is not the name of
1583      * a column in this rowset, (2) the cursor is not on one of
1584      * this rowset's rows or its insert row, or (3) the designated
1585      * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
1586      * <b>BIGINT</b>, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
1587      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
1588      * designates the recommended return type.
1589      * @see #getLong(int)
1590      */
1591     public long getLong(String columnName) throws SQLException {
1592         throw new UnsupportedOperationException();
1593     }
1594 
1595     /**
1596      * Retrieves the value stored in the designated column
1597      * of the current row as a <code>float</code> value.
1598      *
1599      * @param columnName a <code>String</code> object giving the SQL name of
1600      *        a column in this <code>CachedRowSetImpl</code> object
1601      * @return the column value; if the value is SQL <code>NULL</code>,
1602      *         the result is <code>0</code>
1603      * @throws SQLException if (1) the given column name is not the name of
1604      * a column in this rowset, (2) the cursor is not on one of
1605      * this rowset's rows or its insert row, or (3) the designated
1606      * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
1607      * BIGINT, <b>REAL</b>, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
1608      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
1609      * designates the recommended return type.
1610      * @see #getFloat(String)
1611      */
1612     public float getFloat(String columnName) throws SQLException {
1613        throw new UnsupportedOperationException();
1614     }
1615 
1616     /**
1617      * Retrieves the value stored in the designated column
1618      * of the current row of this <code>CachedRowSetImpl</code> object
1619      * as a <code>double</code> value.
1620      *
1621      * @param columnName a <code>String</code> object giving the SQL name of
1622      *        a column in this <code>CachedRowSetImpl</code> object
1623      * @return the column value; if the value is SQL <code>NULL</code>,
1624      *         the result is <code>0</code>
1625      * @throws SQLException if (1) the given column name is not the name of
1626      * a column in this rowset, (2) the cursor is not on one of
1627      * this rowset's rows or its insert row, or (3) the designated
1628      * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
1629      * BIGINT, REAL, <b>FLOAT</b>, <b>DOUBLE</b>, DECIMAL, NUMERIC, BIT, CHAR,
1630      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
1631      * designates the recommended return types.
1632      * @see #getDouble(int)
1633      */
1634     public double getDouble(String columnName) throws SQLException {
1635         throw new UnsupportedOperationException();
1636     }
1637 
1638     /**
1639      * Retrieves the value stored in the designated column
1640      * of the current row as a <code>java.math.BigDecimal</code> object.
1641      *
1642      * @param columnName a <code>String</code> object giving the SQL name of
1643      *        a column in this <code>CachedRowSetImpl</code> object
1644      * @param scale the number of digits to the right of the decimal point
1645      * @return a java.math.BugDecimal object with <code><i>scale</i></code>
1646      * number of digits to the right of the decimal point.
1647      * @throws SQLException if (1) the given column name is not the name of
1648      * a column in this rowset, (2) the cursor is not on one of
1649      * this rowset's rows or its insert row, or (3) the designated
1650      * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
1651      * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
1652      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
1653      * designates the recommended return type that this method is used to
1654      * retrieve.
1655      * @deprecated Use the <code>getBigDecimal(String columnName)</code>
1656      *             method instead
1657      */
1658     @Deprecated
1659     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
1660         throw new UnsupportedOperationException();
1661     }
1662 
1663     /**
1664      * Retrieves the value stored in the designated column
1665      * of the current row as a <code>byte</code> array.
1666      * The bytes represent the raw values returned by the driver.
1667      *
1668      * @param columnName a <code>String</code> object giving the SQL name of
1669      *        a column in this <code>CachedRowSetImpl</code> object
1670      * @return the column value as a <code>byte</code> array in the Java programming
1671      * language; if the value is SQL <code>NULL</code>, the result is <code>null</code>
1672      * @throws SQLException if (1) the given column name is not the name of
1673      * a column in this rowset, (2) the cursor is not on one of
1674      * this rowset's rows or its insert row, or (3) the designated
1675      * column does not store an SQL <code><b>BINARY</b>, <b>VARBINARY</b>
1676      * </code> or <code>LONGVARBINARY</code> values
1677      * The bold SQL type designates the recommended return type.
1678      * @see #getBytes(int)
1679      */
1680     public byte[] getBytes(String columnName) throws SQLException {
1681         throw new UnsupportedOperationException();
1682     }
1683 
1684     /**
1685      * Retrieves the value stored in the designated column
1686      * of the current row as a <code>java.sql.Date</code> object.
1687      *
1688      * @param columnName a <code>String</code> object giving the SQL name of
1689      *        a column in this <code>CachedRowSetImpl</code> object
1690      * @return the column value; if the value is SQL <code>NULL</code>,
1691      *         the result is <code>null</code>
1692      * @throws SQLException if (1) the given column name is not the name of
1693      *            a column in this rowset, (2) the cursor is not on one of
1694      *            this rowset's rows or its insert row, or (3) the designated
1695      *            column does not store an SQL <code>DATE</code> or
1696      *            <code>TIMESTAMP</code> value
1697      */
1698     public java.sql.Date getDate(String columnName) throws SQLException {
1699         throw new UnsupportedOperationException();
1700     }
1701 
1702     /**
1703      * Retrieves the value stored in the designated column
1704      * of the current row as a <code>java.sql.Time</code> object.
1705      *
1706      * @param columnName a <code>String</code> object giving the SQL name of
1707      *        a column in this <code>CachedRowSetImpl</code> object
1708      * @return the column value; if the value is SQL <code>NULL</code>,
1709      *         the result is <code>null</code>
1710      * @throws SQLException if the given column name does not match one of
1711      *            this rowset's column names or the cursor is not on one of
1712      *            this rowset's rows or its insert row
1713      */
1714     public java.sql.Time getTime(String columnName) throws SQLException {
1715         throw new UnsupportedOperationException();
1716     }
1717 
1718     /**
1719      * Retrieves the value stored in the designated column
1720      * of the current row as a <code>java.sql.Timestamp</code> object.
1721      *
1722      * @param columnName a <code>String</code> object giving the SQL name of
1723      *        a column in this <code>CachedRowSetImpl</code> object
1724      * @return the column value; if the value is SQL <code>NULL</code>,
1725      *         the result is <code>null</code>
1726      * @throws SQLException if the given column name does not match one of
1727      *            this rowset's column names or the cursor is not on one of
1728      *            this rowset's rows or its insert row
1729      */
1730     public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
1731         throw new UnsupportedOperationException();
1732     }
1733 
1734     /**
1735      * Retrieves the value of the designated column in the current row of this
1736      * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
1737      * object.
1738      *
1739      * A column value can be retrieved as a stream of ASCII characters
1740      * and then read in chunks from the stream. This method is particularly
1741      * suitable for retrieving large <code>LONGVARCHAR</code> values. The
1742      * <code>SyncProvider</code> will rely on the JDBC driver to do any necessary
1743      * conversion from the database format into ASCII format.
1744      *
1745      * <P><B>Note:</B> All the data in the returned stream must
1746      * be read prior to getting the value of any other column. The
1747      * next call to a <code>getXXX</code> method implicitly closes the stream.
1748      *
1749      * @param columnName a <code>String</code> object giving the SQL name of
1750      *        a column in this <code>CachedRowSetImpl</code> object
1751      * @return a Java input stream that delivers the database column value
1752      *         as a stream of one-byte ASCII characters.  If the value is SQL
1753      *         <code>NULL</code>, the result is <code>null</code>.
1754      * @throws SQLException if (1) the given column name is not the name of
1755      * a column in this rowset
1756      * (2) the cursor is not on one of this rowset's rows or its
1757      * insert row, or (3) the designated column does not store an
1758      * SQL <code>CHAR, VARCHAR</code>, <code><b>LONGVARCHAR</b></code>
1759      * <code>BINARY, VARBINARY</code> or <code>LONGVARBINARY</code> value. The
1760      * bold SQL type designates the recommended return types that this method is
1761      * used to retrieve.
1762      * @see #getAsciiStream(int)
1763      */
1764     public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
1765         throw new UnsupportedOperationException();
1766 
1767     }
1768 
1769     /**
1770      * A column value can be retrieved as a stream of Unicode characters
1771      * and then read in chunks from the stream.  This method is particularly
1772      * suitable for retrieving large <code>LONGVARCHAR</code> values.
1773      * The JDBC driver will do any necessary conversion from the database
1774      * format into Unicode.
1775      *
1776      * <P><B>Note:</B> All the data in the returned stream must
1777      * be read prior to getting the value of any other column. The
1778      * next call to a <code>getXXX</code> method implicitly closes the stream.
1779      *
1780      * @param columnName a <code>String</code> object giving the SQL name of
1781      *        a column in this <code>CachedRowSetImpl</code> object
1782      * @return a Java input stream that delivers the database column value
1783      *         as a stream of two-byte Unicode characters.  If the value is
1784      *         SQL <code>NULL</code>, the result is <code>null</code>.
1785      * @throws SQLException if the given column name does not match one of
1786      *            this rowset's column names or the cursor is not on one of
1787      *            this rowset's rows or its insert row
1788      * @deprecated use the method <code>getCharacterStream</code> instead
1789      */
1790     @Deprecated
1791     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
1792         throw new UnsupportedOperationException();
1793     }
1794 
1795     /**
1796      * Retrieves the value of the designated column in the current row of this
1797      * <code>CachedRowSetImpl</code> object as a <code>java.io.InputStream</code>
1798      * object.
1799      * <P>
1800      * A column value can be retrieved as a stream of uninterpreted bytes
1801      * and then read in chunks from the stream.  This method is particularly
1802      * suitable for retrieving large <code>LONGVARBINARY</code> values.
1803      *
1804      * <P><B>Note:</B> All the data in the returned stream must be
1805      * read prior to getting the value of any other column. The next
1806      * call to a get method implicitly closes the stream. Also, a
1807      * stream may return <code>0</code> for <code>CachedRowSetImpl.available()</code>
1808      * whether there is data available or not.
1809      *
1810      * @param columnName a <code>String</code> object giving the SQL name of
1811      *        a column in this <code>CachedRowSetImpl</code> object
1812      * @return a Java input stream that delivers the database column value
1813      *         as a stream of uninterpreted bytes.  If the value is SQL
1814      *         <code>NULL</code>, the result is <code>null</code>.
1815      * @throws SQLException if (1) the given column name is unknown,
1816      * (2) the cursor is not on one of this rowset's rows or its
1817      * insert row, or (3) the designated column does not store an
1818      * SQL <code>BINARY, VARBINARY</code> or <code><b>LONGVARBINARY</b></code>
1819      * The bold type indicates the SQL type that this method is recommened
1820      * to retrieve.
1821      * @see #getBinaryStream(int)
1822      *
1823      */
1824     public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
1825         throw new UnsupportedOperationException();
1826     }
1827 
1828 
1829     //=====================================================================
1830     // Advanced features:
1831     //=====================================================================
1832 
1833     /**
1834      * The first warning reported by calls on this <code>CachedRowSetImpl</code>
1835      * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
1836      * be chained to this <code>SQLWarning</code>.
1837      *
1838      * <P>The warning chain is automatically cleared each time a new
1839      * row is read.
1840      *
1841      * <P><B>Note:</B> This warning chain only covers warnings caused
1842      * by <code>ResultSet</code> methods.  Any warning caused by statement
1843      * methods (such as reading OUT parameters) will be chained on the
1844      * <code>Statement</code> object.
1845      *
1846      * @return the first SQLWarning or null
1847      */
1848     public SQLWarning getWarnings() {
1849         throw new UnsupportedOperationException();
1850     }
1851 
1852     /**
1853      * Clears all the warnings reporeted for the <code>CachedRowSetImpl</code>
1854      * object. After a call to this method, the <code>getWarnings</code> method
1855      * returns <code>null</code> until a new warning is reported for this
1856      * <code>CachedRowSetImpl</code> object.
1857      */
1858     public void clearWarnings() {
1859        throw new UnsupportedOperationException();
1860     }
1861 
1862     /**
1863      * Retrieves the name of the SQL cursor used by this
1864      * <code>CachedRowSetImpl</code> object.
1865      *
1866      * <P>In SQL, a result table is retrieved through a cursor that is
1867      * named. The current row of a <code>ResultSet</code> can be updated or deleted
1868      * using a positioned update/delete statement that references the
1869      * cursor name. To ensure that the cursor has the proper isolation
1870      * level to support an update operation, the cursor's <code>SELECT</code>
1871      * statement should be of the form <code>select for update</code>.
1872      * If the <code>for update</code> clause
1873      * is omitted, positioned updates may fail.
1874      *
1875      * <P>JDBC supports this SQL feature by providing the name of the
1876      * SQL cursor used by a <code>ResultSet</code> object. The current row
1877      * of a result set is also the current row of this SQL cursor.
1878      *
1879      * <P><B>Note:</B> If positioned updates are not supported, an
1880      * <code>SQLException</code> is thrown.
1881      *
1882      * @return the SQL cursor name for this <code>CachedRowSetImpl</code> object's
1883      *         cursor
1884      * @throws SQLException if an error occurs
1885      */
1886     public String getCursorName() throws SQLException {
1887         throw new UnsupportedOperationException();
1888     }
1889 
1890     /**
1891      * Retrieves a <code>ResultSetMetaData</code> object instance that
1892      * contains information about the <code>CachedRowSet</code> object.
1893      * However, applications should cast the returned object to a
1894      * <code>RowSetMetaData</code> interface implementation. In the
1895      * reference implementation, this cast can be done on the
1896      * <code>RowSetMetaDataImpl</code> class.
1897      * <P>
1898      * For example:
1899      * <pre>
1900      * CachedRowSet crs = new CachedRowSetImpl();
1901      * RowSetMetaDataImpl metaData =
1902      *     (RowSetMetaDataImpl)crs.getMetaData();
1903      * // Set the number of columns in the RowSet object for
1904      * // which this RowSetMetaDataImpl object was created to the
1905      * // given number.
1906      * metaData.setColumnCount(3);
1907      * crs.setMetaData(metaData);
1908      * </pre>
1909      *
1910      * @return the <code>ResultSetMetaData</code> object that describes this
1911      *         <code>CachedRowSetImpl</code> object's columns
1912      * @throws SQLException if an error occurs in generating the RowSet
1913      * meta data; or if the <code>CachedRowSetImpl</code> is empty.
1914      * @see javax.sql.RowSetMetaData
1915      */
1916     public ResultSetMetaData getMetaData() throws SQLException {
1917         throw new UnsupportedOperationException();
1918     }
1919 
1920 
1921     /**
1922      * Retrieves the value of the designated column in the current row
1923      * of this <code>CachedRowSetImpl</code> object as an
1924      * <code>Object</code> value.
1925      * <P>
1926      * The type of the <code>Object</code> will be the default
1927      * Java object type corresponding to the column's SQL type,
1928      * following the mapping for built-in types specified in the JDBC 3.0
1929      * specification.
1930      * <P>
1931      * This method may also be used to read datatabase-specific
1932      * abstract data types.
1933      * <P>
1934      * This implementation of the method <code>getObject</code> extends its
1935      * behavior so that it gets the attributes of an SQL structured type
1936      * as an array of <code>Object</code> values.  This method also custom
1937      * maps SQL user-defined types to classes in the Java programming language.
1938      * When the specified column contains
1939      * a structured or distinct value, the behavior of this method is as
1940      * if it were a call to the method <code>getObject(columnIndex,
1941      * this.getStatement().getConnection().getTypeMap())</code>.
1942      *
1943      * @param columnIndex the first column is <code>1</code>, the second
1944      *        is <code>2</code>, and so on; must be <code>1</code> or larger
1945      *        and equal to or less than the number of columns in the rowset
1946      * @return a <code>java.lang.Object</code> holding the column value;
1947      *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
1948      * @throws SQLException if the given column index is out of bounds,
1949      *            the cursor is not on a valid row, or there is a problem getting
1950      *            the <code>Class</code> object for a custom mapping
1951      * @see #getObject(String)
1952      */
1953     public Object getObject(int columnIndex) throws SQLException {
1954         throw new UnsupportedOperationException();
1955     }
1956 
1957     /**
1958      * Retrieves the value of the designated column in the current row
1959      * of this <code>CachedRowSetImpl</code> object as an
1960      * <code>Object</code> value.
1961      * <P>
1962      * The type of the <code>Object</code> will be the default
1963      * Java object type corresponding to the column's SQL type,
1964      * following the mapping for built-in types specified in the JDBC 3.0
1965      * specification.
1966      * <P>
1967      * This method may also be used to read datatabase-specific
1968      * abstract data types.
1969      * <P>
1970      * This implementation of the method <code>getObject</code> extends its
1971      * behavior so that it gets the attributes of an SQL structured type
1972      * as an array of <code>Object</code> values.  This method also custom
1973      * maps SQL user-defined types to classes
1974      * in the Java programming language. When the specified column contains
1975      * a structured or distinct value, the behavior of this method is as
1976      * if it were a call to the method <code>getObject(columnIndex,
1977      * this.getStatement().getConnection().getTypeMap())</code>.
1978      *
1979      * @param columnName a <code>String</code> object that must match the
1980      *        SQL name of a column in this rowset, ignoring case
1981      * @return a <code>java.lang.Object</code> holding the column value;
1982      *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
1983      * @throws SQLException if (1) the given column name does not match one of
1984      *            this rowset's column names, (2) the cursor is not
1985      *            on a valid row, or (3) there is a problem getting
1986      *            the <code>Class</code> object for a custom mapping
1987      * @see #getObject(int)
1988      */
1989     public Object getObject(String columnName) throws SQLException {
1990        throw new UnsupportedOperationException();
1991     }
1992 
1993     //----------------------------------------------------------------
1994 
1995     /**
1996      * Maps the given column name for one of this <code>CachedRowSetImpl</code>
1997      * object's columns to its column number.
1998      *
1999      * @param columnName a <code>String</code> object that must match the
2000      *        SQL name of a column in this rowset, ignoring case
2001      * @return the column index of the given column name
2002      * @throws SQLException if the given column name does not match one
2003      *            of this rowset's column names
2004      */
2005     public int findColumn(String columnName) throws SQLException {
2006        throw new UnsupportedOperationException();
2007     }
2008 
2009     //--------------------------JDBC 2.0-----------------------------------
2010 
2011     //---------------------------------------------------------------------
2012     // Getter's and Setter's
2013     //---------------------------------------------------------------------
2014 
2015     /**
2016      * Retrieves the value stored in the designated column
2017      * of the current row as a <code>java.io.Reader</code> object.
2018      *
2019      * <P><B>Note:</B> All the data in the returned stream must
2020      * be read prior to getting the value of any other column. The
2021      * next call to a <code>getXXX</code> method implicitly closes the stream.
2022      *
2023      * @param columnIndex the first column is <code>1</code>, the second
2024      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2025      *        and equal to or less than the number of columns in the rowset
2026      * @return a Java character stream that delivers the database column value
2027      * as a stream of two-byte unicode characters in a
2028      * <code>java.io.Reader</code> object.  If the value is
2029      * SQL <code>NULL</code>, the result is <code>null</code>.
2030      * @throws SQLException if (1) the given column index is out of bounds,
2031      * (2) the cursor is not on one of this rowset's rows or its
2032      * insert row, or (3) the designated column does not store an
2033      * SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>, BINARY, VARBINARY</code> or
2034      * <code>LONGVARBINARY</code> value.
2035      * The bold SQL type designates the recommended return type.
2036      * @see #getCharacterStream(String)
2037      */
2038     public java.io.Reader getCharacterStream(int columnIndex) throws SQLException{
2039         throw new UnsupportedOperationException();
2040     }
2041 
2042     /**
2043      * Retrieves the value stored in the designated column
2044      * of the current row as a <code>java.io.Reader</code> object.
2045      *
2046      * <P><B>Note:</B> All the data in the returned stream must
2047      * be read prior to getting the value of any other column. The
2048      * next call to a <code>getXXX</code> method implicitly closes the stream.
2049      *
2050      * @param columnName a <code>String</code> object giving the SQL name of
2051      *        a column in this <code>CachedRowSetImpl</code> object
2052      * @return a Java input stream that delivers the database column value
2053      *         as a stream of two-byte Unicode characters.  If the value is
2054      *         SQL <code>NULL</code>, the result is <code>null</code>.
2055      * @throws SQLException if (1) the given column name is not the name of
2056      * a column in this rowset, (2) the cursor is not on one of
2057      * this rowset's rows or its insert row, or (3) the designated
2058      * column does not store an SQL <code>CHAR, VARCHAR, <b>LONGVARCHAR</b>,
2059      * BINARY, VARYBINARY</code> or <code>LONGVARBINARY</code> value.

2060      * The bold SQL type designates the recommended return type.
2061      */
2062     public java.io.Reader getCharacterStream(String columnName) throws SQLException {
2063         throw new UnsupportedOperationException();
2064     }
2065 
2066     /**
2067      * Retrieves the value of the designated column in the current row
2068      * of this <code>CachedRowSetImpl</code> object as a
2069      * <code>java.math.BigDecimal</code> object.
2070      *
2071      * @param columnIndex the first column is <code>1</code>, the second
2072      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2073      *        and equal to or less than the number of columns in the rowset
2074      * @return a <code>java.math.BigDecimal</code> value with full precision;
2075      *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
2076      * @throws SQLException if (1) the given column index is out of bounds,
2077      * (2) the cursor is not on one of this rowset's rows or its
2078      * insert row, or (3) the designated column does not store an
2079      * SQL <code>TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
2080      * FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT, CHAR, VARCHAR</code>
2081      * or <code>LONGVARCHAR</code> value. The bold SQL type designates the

2082      * recommended return types that this method is used to retrieve.
2083      * @see #getBigDecimal(String)
2084      */
2085     public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
2086         throw new UnsupportedOperationException();
2087     }
2088 
2089     /**
2090      * Retrieves the value of the designated column in the current row
2091      * of this <code>CachedRowSetImpl</code> object as a
2092      * <code>java.math.BigDecimal</code> object.
2093      *
2094      * @param columnName a <code>String</code> object that must match the
2095      *        SQL name of a column in this rowset, ignoring case
2096      * @return a <code>java.math.BigDecimal</code> value with full precision;
2097      *         if the value is SQL <code>NULL</code>, the result is <code>null</code>
2098      * @throws SQLException if (1) the given column name is not the name of
2099      * a column in this rowset, (2) the cursor is not on one of
2100      * this rowset's rows or its insert row, or (3) the designated
2101      * column does not store an SQL <code>TINYINT, SMALLINT, INTEGER
2102      * BIGINT, REAL, FLOAT, DOUBLE, <b>DECIMAL</b>, <b>NUMERIC</b>, BIT CHAR,
2103      * VARCHAR</code> or <code>LONGVARCHAR</code> value. The bold SQL type
2104      * designates the recommended return type that this method is used to
2105      * retrieve
2106      * @see #getBigDecimal(int)
2107      */
2108     public BigDecimal getBigDecimal(String columnName) throws SQLException {
2109         throw new UnsupportedOperationException();
2110     }
2111 
2112     //---------------------------------------------------------------------
2113     // Traversal/Positioning
2114     //---------------------------------------------------------------------
2115 
2116     /**
2117      * Returns the number of rows in this <code>CachedRowSetImpl</code> object.
2118      *
2119      * @return number of rows in the rowset
2120      */
2121     public int size() {
2122         throw new UnsupportedOperationException();
2123     }
2124 
2125     /**
2126      * Indicates whether the cursor is before the first row in this
2127      * <code>CachedRowSetImpl</code> object.
2128      *
2129      * @return <code>true</code> if the cursor is before the first row;
2130      *         <code>false</code> otherwise or if the rowset contains no rows
2131      * @throws SQLException if an error occurs
2132      */
2133     public boolean isBeforeFirst() throws SQLException {
2134         throw new UnsupportedOperationException();
2135     }
2136 
2137     /**
2138      * Indicates whether the cursor is after the last row in this
2139      * <code>CachedRowSetImpl</code> object.
2140      *
2141      * @return <code>true</code> if the cursor is after the last row;
2142      *         <code>false</code> otherwise or if the rowset contains no rows
2143      * @throws SQLException if an error occurs
2144      */
2145     public boolean isAfterLast() throws SQLException {
2146         throw new UnsupportedOperationException();
2147     }
2148 
2149     /**
2150      * Indicates whether the cursor is on the first row in this
2151      * <code>CachedRowSetImpl</code> object.
2152      *
2153      * @return <code>true</code> if the cursor is on the first row;
2154      *         <code>false</code> otherwise or if the rowset contains no rows
2155      * @throws SQLException if an error occurs
2156      */
2157     public boolean isFirst() throws SQLException {
2158         throw new UnsupportedOperationException();
2159     }
2160 
2161     /**
2162      * Indicates whether the cursor is on the last row in this
2163      * <code>CachedRowSetImpl</code> object.
2164      * <P>
2165      * Note: Calling the method <code>isLast</code> may be expensive
2166      * because the JDBC driver might need to fetch ahead one row in order
2167      * to determine whether the current row is the last row in this rowset.
2168      *
2169      * @return <code>true</code> if the cursor is on the last row;
2170      *         <code>false</code> otherwise or if this rowset contains no rows
2171      * @throws SQLException if an error occurs
2172      */
2173     public boolean isLast() throws SQLException {
2174         throw new UnsupportedOperationException();
2175     }
2176 
2177     /**
2178      * Moves this <code>CachedRowSetImpl</code> object's cursor to the front of
2179      * the rowset, just before the first row. This method has no effect if
2180      * this rowset contains no rows.
2181      *
2182      * @throws SQLException if an error occurs or the type of this rowset
2183      *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
2184      */
2185     public void beforeFirst() throws SQLException {
2186         throw new UnsupportedOperationException();
2187     }
2188 
2189     /**
2190      * Moves this <code>CachedRowSetImpl</code> object's cursor to the end of
2191      * the rowset, just after the last row. This method has no effect if
2192      * this rowset contains no rows.
2193      *
2194      * @throws SQLException if an error occurs
2195      */
2196     public void afterLast() throws SQLException {
2197         throw new UnsupportedOperationException();
2198     }
2199 
2200     /**
2201      * Moves this <code>CachedRowSetImpl</code> object's cursor to the first row
2202      * and returns <code>true</code> if the operation was successful.  This
2203      * method also notifies registered listeners that the cursor has moved.
2204      *
2205      * @return <code>true</code> if the cursor is on a valid row;
2206      *         <code>false</code> otherwise or if there are no rows in this
2207      *         <code>CachedRowSetImpl</code> object
2208      * @throws SQLException if the type of this rowset
2209      *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
2210      */
2211     public boolean first() throws SQLException {
2212         throw new UnsupportedOperationException();
2213     }
2214 
2215     /**
2216      * Moves this <code>CachedRowSetImpl</code> object's cursor to the first
2217      * row and returns <code>true</code> if the operation is successful.
2218      * <P>
2219      * This method is called internally by the methods <code>first</code>,
2220      * <code>isFirst</code>, and <code>absolute</code>.
2221      * It in turn calls the method <code>internalNext</code> in order to
2222      * handle the case where the first row is a deleted row that is not visible.
2223      * <p>
2224      * This is a implementation only method and is not required as a standard
2225      * implementation of the <code>CachedRowSet</code> interface.
2226      *
2227      * @return <code>true</code> if the cursor moved to the first row;
2228      *         <code>false</code> otherwise
2229      * @throws SQLException if an error occurs
2230      */
2231     protected boolean internalFirst() throws SQLException {
2232         throw new UnsupportedOperationException();
2233     }
2234 
2235     /**
2236      * Moves this <code>CachedRowSetImpl</code> object's cursor to the last row
2237      * and returns <code>true</code> if the operation was successful.  This
2238      * method also notifies registered listeners that the cursor has moved.
2239      *
2240      * @return <code>true</code> if the cursor is on a valid row;
2241      *         <code>false</code> otherwise or if there are no rows in this
2242      *         <code>CachedRowSetImpl</code> object
2243      * @throws SQLException if the type of this rowset
2244      *            is <code>ResultSet.TYPE_FORWARD_ONLY</code>
2245      */
2246     public boolean last() throws SQLException {
2247         throw new UnsupportedOperationException();
2248     }
2249 
2250     /**
2251      * Moves this <code>CachedRowSetImpl</code> object's cursor to the last
2252      * row and returns <code>true</code> if the operation is successful.
2253      * <P>
2254      * This method is called internally by the method <code>last</code>
2255      * when rows have been deleted and the deletions are not visible.
2256      * The method <code>internalLast</code> handles the case where the
2257      * last row is a deleted row that is not visible by in turn calling
2258      * the method <code>internalPrevious</code>.
2259      * <p>
2260      * This is a implementation only method and is not required as a standard
2261      * implementation of the <code>CachedRowSet</code> interface.
2262      *
2263      * @return <code>true</code> if the cursor moved to the last row;
2264      *         <code>false</code> otherwise
2265      * @throws SQLException if an error occurs
2266      */
2267     protected boolean internalLast() throws SQLException {
2268         throw new UnsupportedOperationException();
2269     }
2270 
2271     /**
2272      * Returns the number of the current row in this <code>CachedRowSetImpl</code>
2273      * object. The first row is number 1, the second number 2, and so on.
2274      *
2275      * @return the number of the current row;  <code>0</code> if there is no
2276      *         current row
2277      * @throws SQLException if an error occurs; or if the <code>CacheRowSetImpl</code>
2278      *         is empty
2279      */
2280     public int getRow() throws SQLException {
2281         return crsSync.getRow();
2282     }
2283 
2284     /**
2285      * Moves this <code>CachedRowSetImpl</code> object's cursor to the row number
2286      * specified.
2287      *
2288      * <p>If the number is positive, the cursor moves to an absolute row with
2289      * respect to the beginning of the rowset.  The first row is row 1, the second
2290      * is row 2, and so on.  For example, the following command, in which
2291      * <code>crs</code> is a <code>CachedRowSetImpl</code> object, moves the cursor
2292      * to the fourth row, starting from the beginning of the rowset.
2293      * <PRE><code>
2294      *
2295      *    crs.absolute(4);
2296      *
2297      * </code> </PRE>
2298      * <P>
2299      * If the number is negative, the cursor moves to an absolute row position
2300      * with respect to the end of the rowset.  For example, calling
2301      * <code>absolute(-1)</code> positions the cursor on the last row,
2302      * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
2303      * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
2304      * the following command moves the cursor to the fourth-to-last row, which
2305      * in the case of a  rowset with five rows, is also the second row, counting
2306      * from the beginning.
2307      * <PRE><code>
2308      *
2309      *    crs.absolute(-4);
2310      *
2311      * </code> </PRE>
2312      *
2313      * If the number specified is larger than the number of rows, the cursor
2314      * will move to the position after the last row. If the number specified
2315      * would move the cursor one or more rows before the first row, the cursor
2316      * moves to the position before the first row.
2317      * <P>
2318      * Note: Calling <code>absolute(1)</code> is the same as calling the
2319      * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
2320      * same as calling <code>last()</code>.
2321      *
2322      * @param row a positive number to indicate the row, starting row numbering from
2323      *        the first row, which is <code>1</code>; a negative number to indicate
2324      *        the row, starting row numbering from the last row, which is
2325      *        <code>-1</code>; it must not be <code>0</code>
2326      * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
2327      *         otherwise
2328      * @throws SQLException if the given cursor position is <code>0</code> or the
2329      *            type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
2330      */
2331     public boolean absolute( int row ) throws SQLException {
2332         throw new UnsupportedOperationException();
2333     }
2334 
2335     /**
2336      * Moves the cursor the specified number of rows from the current
2337      * position, with a positive number moving it forward and a
2338      * negative number moving it backward.
2339      * <P>
2340      * If the number is positive, the cursor moves the specified number of
2341      * rows toward the end of the rowset, starting at the current row.
2342      * For example, the following command, in which
2343      * <code>crs</code> is a <code>CachedRowSetImpl</code> object with 100 rows,
2344      * moves the cursor forward four rows from the current row.  If the
2345      * current row is 50, the cursor would move to row 54.
2346      * <PRE><code>
2347      *
2348      *    crs.relative(4);
2349      *
2350      * </code> </PRE>
2351      * <P>
2352      * If the number is negative, the cursor moves back toward the beginning
2353      * the specified number of rows, starting at the current row.
2354      * For example, calling the method
2355      * <code>absolute(-1)</code> positions the cursor on the last row,
2356      * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
2357      * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
2358      * the following command moves the cursor to the fourth-to-last row, which
2359      * in the case of a  rowset with five rows, is also the second row
2360      * from the beginning.
2361      * <PRE><code>
2362      *
2363      *    crs.absolute(-4);
2364      *
2365      * </code> </PRE>
2366      *
2367      * If the number specified is larger than the number of rows, the cursor
2368      * will move to the position after the last row. If the number specified
2369      * would move the cursor one or more rows before the first row, the cursor
2370      * moves to the position before the first row. In both cases, this method
2371      * throws an <code>SQLException</code>.
2372      * <P>
2373      * Note: Calling <code>absolute(1)</code> is the same as calling the
2374      * method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
2375      * same as calling <code>last()</code>.  Calling <code>relative(0)</code>
2376      * is valid, but it does not change the cursor position.
2377      *
2378      * @param rows an <code>int</code> indicating the number of rows to move
2379      *             the cursor, starting at the current row; a positive number
2380      *             moves the cursor forward; a negative number moves the cursor
2381      *             backward; must not move the cursor past the valid
2382      *             rows
2383      * @return <code>true</code> if the cursor is on a row in this
2384      *         <code>CachedRowSetImpl</code> object; <code>false</code>
2385      *         otherwise
2386      * @throws SQLException if there are no rows in this rowset, the cursor is
2387      *         positioned either before the first row or after the last row, or
2388      *         the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
2389      */
2390     public boolean relative(int rows) throws SQLException {
2391         throw new UnsupportedOperationException();
2392     }
2393 
2394     /**
2395      * Moves this <code>CachedRowSetImpl</code> object's cursor to the
2396      * previous row and returns <code>true</code> if the cursor is on
2397      * a valid row or <code>false</code> if it is not.
2398      * This method also notifies all listeners registered with this
2399      * <code>CachedRowSetImpl</code> object that its cursor has moved.
2400      * <P>
2401      * Note: calling the method <code>previous()</code> is not the same
2402      * as calling the method <code>relative(-1)</code>.  This is true
2403      * because it is possible to call <code>previous()</code> from the insert
2404      * row, from after the last row, or from the current row, whereas
2405      * <code>relative</code> may only be called from the current row.
2406      * <P>
2407      * The method <code>previous</code> may used in a <code>while</code>
2408      * loop to iterate through a rowset starting after the last row
2409      * and moving toward the beginning. The loop ends when <code>previous</code>
2410      * returns <code>false</code>, meaning that there are no more rows.
2411      * For example, the following code fragment retrieves all the data in
2412      * the <code>CachedRowSetImpl</code> object <code>crs</code>, which has
2413      * three columns.  Note that the cursor must initially be positioned
2414      * after the last row so that the first call to the method
2415      * <code>previous</code> places the cursor on the last line.
2416      * <PRE> <code>
2417      *
2418      *     crs.afterLast();
2419      *     while (previous()) {
2420      *         String name = crs.getString(1);
2421      *         int age = crs.getInt(2);
2422      *         short ssn = crs.getShort(3);
2423      *         System.out.println(name + "   " + age + "   " + ssn);
2424      *     }
2425      *
2426      * </code> </PRE>
2427      * This method throws an <code>SQLException</code> if the cursor is not
2428      * on a row in the rowset, before the first row, or after the last row.
2429      *
2430      * @return <code>true</code> if the cursor is on a valid row;
2431      *         <code>false</code> if it is before the first row or after the
2432      *         last row
2433      * @throws SQLException if the cursor is not on a valid position or the
2434      *           type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
2435      */
2436     public boolean previous() throws SQLException {
2437         throw new UnsupportedOperationException();
2438     }
2439 
2440     /**
2441      * Moves the cursor to the previous row in this <code>CachedRowSetImpl</code>
2442      * object, skipping past deleted rows that are not visible; returns
2443      * <code>true</code> if the cursor is on a row in this rowset and
2444      * <code>false</code> when the cursor goes before the first row.
2445      * <P>
2446      * This method is called internally by the method <code>previous</code>.
2447      * <P>
2448      * This is a implementation only method and is not required as a standard
2449      * implementation of the <code>CachedRowSet</code> interface.
2450      *
2451      * @return <code>true</code> if the cursor is on a row in this rowset;
2452      *         <code>false</code> when the cursor reaches the position before
2453      *         the first row
2454      * @throws SQLException if an error occurs
2455      */
2456     protected boolean internalPrevious() throws SQLException {
2457         throw new UnsupportedOperationException();
2458     }
2459 
2460 
2461     //---------------------------------------------------------------------
2462     // Updates
2463     //---------------------------------------------------------------------
2464 
2465     /**
2466      * Indicates whether the current row of this <code>CachedRowSetImpl</code>
2467      * object has been updated.  The value returned
2468      * depends on whether this rowset can detect updates: <code>false</code>
2469      * will always be returned if it does not detect updates.
2470      *
2471      * @return <code>true</code> if the row has been visibly updated
2472      *         by the owner or another and updates are detected;
2473      *         <code>false</code> otherwise
2474      * @throws SQLException if the cursor is on the insert row or not
2475      *            not on a valid row
2476      *
2477      * @see DatabaseMetaData#updatesAreDetected
2478      */
2479     public boolean rowUpdated() throws SQLException {
2480         throw new UnsupportedOperationException();
2481     }
2482 
2483     /**
2484      * Indicates whether the designated column of the current row of
2485      * this <code>CachedRowSetImpl</code> object has been updated. The
2486      * value returned depends on whether this rowset can detcted updates:
2487      * <code>false</code> will always be returned if it does not detect updates.
2488      *
2489      * @param idx the index identifier of the column that may be have been updated.
2490      * @return <code>true</code> is the designated column has been updated
2491      * and the rowset detects updates; <code>false</code> if the rowset has not
2492      * been updated or the rowset does not detect updates
2493      * @throws SQLException if the cursor is on the insert row or not
2494      *          on a valid row
2495      * @see DatabaseMetaData#updatesAreDetected
2496      */
2497     public boolean columnUpdated(int idx) throws SQLException {
2498         throw new UnsupportedOperationException();
2499     }
2500 
2501     /**
2502      * Indicates whether the designated column of the current row of
2503      * this <code>CachedRowSetImpl</code> object has been updated. The
2504      * value returned depends on whether this rowset can detcted updates:
2505      * <code>false</code> will always be returned if it does not detect updates.
2506      *
2507      * @param columnName the <code>String</code> column name column that may be have
2508      * been updated.
2509      * @return <code>true</code> is the designated column has been updated
2510      * and the rowset detects updates; <code>false</code> if the rowset has not
2511      * been updated or the rowset does not detect updates
2512      * @throws SQLException if the cursor is on the insert row or not
2513      *          on a valid row
2514      * @see DatabaseMetaData#updatesAreDetected
2515      */
2516     public boolean columnUpdated(String columnName) throws SQLException {
2517         throw new UnsupportedOperationException();
2518     }
2519 
2520     /**
2521      * Indicates whether the current row has been inserted.  The value returned
2522      * depends on whether or not the rowset can detect visible inserts.
2523      *
2524      * @return <code>true</code> if a row has been inserted and inserts are detected;
2525      *         <code>false</code> otherwise
2526      * @throws SQLException if the cursor is on the insert row or not
2527      *            not on a valid row
2528      *
2529      * @see DatabaseMetaData#insertsAreDetected
2530      */
2531     public boolean rowInserted() throws SQLException {
2532         throw new UnsupportedOperationException();
2533     }
2534 
2535     /**
2536      * Indicates whether the current row has been deleted.  A deleted row
2537      * may leave a visible "hole" in a rowset.  This method can be used to
2538      * detect such holes if the rowset can detect deletions. This method
2539      * will always return <code>false</code> if this rowset cannot detect
2540      * deletions.
2541      *
2542      * @return <code>true</code> if (1)the current row is blank, indicating that
2543      *         the row has been deleted, and (2)deletions are detected;
2544      *         <code>false</code> otherwise
2545      * @throws SQLException if the cursor is on a valid row in this rowset
2546      * @see DatabaseMetaData#deletesAreDetected
2547      */
2548     public boolean rowDeleted() throws SQLException {
2549         throw new UnsupportedOperationException();
2550     }
2551 
2552     /**
2553      * Sets the designated nullable column in the current row or the
2554      * insert row of this <code>CachedRowSetImpl</code> object with
2555      * <code>null</code> value.
2556      * <P>
2557      * This method updates a column value in the current row or the insert
2558      * row of this rowset; however, another method must be called to complete
2559      * the update process. If the cursor is on a row in the rowset, the
2560      * method {@link #updateRow} must be called to mark the row as updated
2561      * and to notify listeners that the row has changed.
2562      * If the cursor is on the insert row, the method {@link #insertRow}
2563      * must be called to insert the new row into this rowset and to notify
2564      * listeners that a row has changed.
2565      * <P>
2566      * In order to propagate updates in this rowset to the underlying
2567      * data source, an application must call the method {@link #acceptChanges}
2568      * after it calls either <code>updateRow</code> or <code>insertRow</code>.
2569      *
2570      * @param columnIndex the first column is <code>1</code>, the second
2571      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2572      *        and equal to or less than the number of columns in this rowset
2573      * @throws SQLException if (1) the given column index is out of bounds,
2574      *            (2) the cursor is not on one of this rowset's rows or its
2575      *            insert row, or (3) this rowset is
2576      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2577      */
2578     public void updateNull(int columnIndex) throws SQLException {
2579         throw new UnsupportedOperationException();
2580     }
2581 
2582     /**
2583      * Sets the designated column in either the current row or the insert
2584      * row of this <code>CachedRowSetImpl</code> object with the given
2585      * <code>boolean</code> value.
2586      * <P>
2587      * This method updates a column value in the current row or the insert
2588      * row of this rowset, but it does not update the database.
2589      * If the cursor is on a row in the rowset, the
2590      * method {@link #updateRow} must be called to update the database.
2591      * If the cursor is on the insert row, the method {@link #insertRow}
2592      * must be called, which will insert the new row into both this rowset
2593      * and the database. Both of these methods must be called before the
2594      * cursor moves to another row.
2595      *
2596      * @param columnIndex the first column is <code>1</code>, the second
2597      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2598      *        and equal to or less than the number of columns in this rowset
2599      * @param x the new column value
2600      * @throws SQLException if (1) the given column index is out of bounds,
2601      *            (2) the cursor is not on one of this rowset's rows or its
2602      *            insert row, or (3) this rowset is
2603      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2604      */
2605     public void updateBoolean(int columnIndex, boolean x) throws SQLException {
2606         throw new UnsupportedOperationException();
2607     }
2608 
2609     /**
2610      * Sets the designated column in either the current row or the insert
2611      * row of this <code>CachedRowSetImpl</code> object with the given
2612      * <code>byte</code> value.
2613      * <P>
2614      * This method updates a column value in the current row or the insert
2615      * row of this rowset, but it does not update the database.
2616      * If the cursor is on a row in the rowset, the
2617      * method {@link #updateRow} must be called to update the database.
2618      * If the cursor is on the insert row, the method {@link #insertRow}
2619      * must be called, which will insert the new row into both this rowset
2620      * and the database. Both of these methods must be called before the
2621      * cursor moves to another row.
2622      *
2623      * @param columnIndex the first column is <code>1</code>, the second
2624      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2625      *        and equal to or less than the number of columns in this rowset
2626      * @param x the new column value
2627      * @throws SQLException if (1) the given column index is out of bounds,
2628      *            (2) the cursor is not on one of this rowset's rows or its
2629      *            insert row, or (3) this rowset is
2630      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2631      */
2632     public void updateByte(int columnIndex, byte x) throws SQLException {
2633         throw new UnsupportedOperationException();
2634     }
2635 
2636     /**
2637      * Sets the designated column in either the current row or the insert
2638      * row of this <code>CachedRowSetImpl</code> object with the given
2639      * <code>short</code> value.
2640      * <P>
2641      * This method updates a column value in the current row or the insert
2642      * row of this rowset, but it does not update the database.
2643      * If the cursor is on a row in the rowset, the
2644      * method {@link #updateRow} must be called to update the database.
2645      * If the cursor is on the insert row, the method {@link #insertRow}
2646      * must be called, which will insert the new row into both this rowset
2647      * and the database. Both of these methods must be called before the
2648      * cursor moves to another row.
2649      *
2650      * @param columnIndex the first column is <code>1</code>, the second
2651      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2652      *        and equal to or less than the number of columns in this rowset
2653      * @param x the new column value
2654      * @throws SQLException if (1) the given column index is out of bounds,
2655      *            (2) the cursor is not on one of this rowset's rows or its
2656      *            insert row, or (3) this rowset is
2657      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2658      */
2659     public void updateShort(int columnIndex, short x) throws SQLException {
2660         throw new UnsupportedOperationException();
2661     }
2662 
2663     /**
2664      * Sets the designated column in either the current row or the insert
2665      * row of this <code>CachedRowSetImpl</code> object with the given
2666      * <code>int</code> value.
2667      * <P>
2668      * This method updates a column value in the current row or the insert
2669      * row of this rowset, but it does not update the database.
2670      * If the cursor is on a row in the rowset, the
2671      * method {@link #updateRow} must be called to update the database.
2672      * If the cursor is on the insert row, the method {@link #insertRow}
2673      * must be called, which will insert the new row into both this rowset
2674      * and the database. Both of these methods must be called before the
2675      * cursor moves to another row.
2676      *
2677      * @param columnIndex the first column is <code>1</code>, the second
2678      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2679      *        and equal to or less than the number of columns in this rowset
2680      * @param x the new column value
2681      * @throws SQLException if (1) the given column index is out of bounds,
2682      *            (2) the cursor is not on one of this rowset's rows or its
2683      *            insert row, or (3) this rowset is
2684      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2685      */
2686     public void updateInt(int columnIndex, int x) throws SQLException {
2687         throw new UnsupportedOperationException();
2688     }
2689 
2690     /**
2691      * Sets the designated column in either the current row or the insert
2692      * row of this <code>CachedRowSetImpl</code> object with the given
2693      * <code>long</code> value.
2694      * <P>
2695      * This method updates a column value in the current row or the insert
2696      * row of this rowset, but it does not update the database.
2697      * If the cursor is on a row in the rowset, the
2698      * method {@link #updateRow} must be called to update the database.
2699      * If the cursor is on the insert row, the method {@link #insertRow}
2700      * must be called, which will insert the new row into both this rowset
2701      * and the database. Both of these methods must be called before the
2702      * cursor moves to another row.
2703      *
2704      * @param columnIndex the first column is <code>1</code>, the second
2705      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2706      *        and equal to or less than the number of columns in this rowset
2707      * @param x the new column value
2708      * @throws SQLException if (1) the given column index is out of bounds,
2709      *            (2) the cursor is not on one of this rowset's rows or its
2710      *            insert row, or (3) this rowset is
2711      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2712      */
2713     public void updateLong(int columnIndex, long x) throws SQLException {
2714        throw new UnsupportedOperationException();
2715 
2716     }
2717 
2718     /**
2719      * Sets the designated column in either the current row or the insert
2720      * row of this <code>CachedRowSetImpl</code> object with the given
2721      * <code>float</code> value.
2722      * <P>
2723      * This method updates a column value in the current row or the insert
2724      * row of this rowset, but it does not update the database.
2725      * If the cursor is on a row in the rowset, the
2726      * method {@link #updateRow} must be called to update the database.
2727      * If the cursor is on the insert row, the method {@link #insertRow}
2728      * must be called, which will insert the new row into both this rowset
2729      * and the database. Both of these methods must be called before the
2730      * cursor moves to another row.
2731      *
2732      * @param columnIndex the first column is <code>1</code>, the second
2733      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2734      *        and equal to or less than the number of columns in this rowset
2735      * @param x the new column value
2736      * @throws SQLException if (1) the given column index is out of bounds,
2737      *            (2) the cursor is not on one of this rowset's rows or its
2738      *            insert row, or (3) this rowset is
2739      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2740      */
2741     public void updateFloat(int columnIndex, float x) throws SQLException {
2742         throw new UnsupportedOperationException();
2743     }
2744 
2745     /**
2746      * Sets the designated column in either the current row or the insert
2747      * row of this <code>CachedRowSetImpl</code> object with the given
2748      * <code>double</code> value.
2749      *
2750      * This method updates a column value in either the current row or
2751      * the insert row of this rowset, but it does not update the
2752      * database.  If the cursor is on a row in the rowset, the
2753      * method {@link #updateRow} must be called to update the database.
2754      * If the cursor is on the insert row, the method {@link #insertRow}
2755      * must be called, which will insert the new row into both this rowset
2756      * and the database. Both of these methods must be called before the
2757      * cursor moves to another row.
2758      *
2759      * @param columnIndex the first column is <code>1</code>, the second
2760      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2761      *        and equal to or less than the number of columns in this rowset
2762      * @param x the new column value
2763      * @throws SQLException if (1) the given column index is out of bounds,
2764      *            (2) the cursor is not on one of this rowset's rows or its
2765      *            insert row, or (3) this rowset is
2766      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2767      */
2768     public void updateDouble(int columnIndex, double x) throws SQLException {
2769         throw new UnsupportedOperationException();
2770     }
2771 
2772     /**
2773      * Sets the designated column in either the current row or the insert
2774      * row of this <code>CachedRowSetImpl</code> object with the given
2775      * <code>java.math.BigDecimal</code> object.
2776      * <P>
2777      * This method updates a column value in the current row or the insert
2778      * row of this rowset, but it does not update the database.
2779      * If the cursor is on a row in the rowset, the
2780      * method {@link #updateRow} must be called to update the database.
2781      * If the cursor is on the insert row, the method {@link #insertRow}
2782      * must be called, which will insert the new row into both this rowset
2783      * and the database. Both of these methods must be called before the
2784      * cursor moves to another row.
2785      *
2786      * @param columnIndex the first column is <code>1</code>, the second
2787      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2788      *        and equal to or less than the number of columns in this rowset
2789      * @param x the new column value
2790      * @throws SQLException if (1) the given column index is out of bounds,
2791      *            (2) the cursor is not on one of this rowset's rows or its
2792      *            insert row, or (3) this rowset is
2793      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2794      */
2795     public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
2796         throw new UnsupportedOperationException();
2797     }
2798 
2799     /**
2800      * Sets the designated column in either the current row or the insert
2801      * row of this <code>CachedRowSetImpl</code> object with the given
2802      * <code>String</code> object.
2803      * <P>
2804      * This method updates a column value in either the current row or
2805      * the insert row of this rowset, but it does not update the
2806      * database.  If the cursor is on a row in the rowset, the
2807      * method {@link #updateRow} must be called to mark the row as updated.
2808      * If the cursor is on the insert row, the method {@link #insertRow}
2809      * must be called to insert the new row into this rowset and mark it
2810      * as inserted. Both of these methods must be called before the
2811      * cursor moves to another row.
2812      * <P>
2813      * The method <code>acceptChanges</code> must be called if the
2814      * updated values are to be written back to the underlying database.
2815      *
2816      * @param columnIndex the first column is <code>1</code>, the second
2817      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2818      *        and equal to or less than the number of columns in this rowset
2819      * @param x the new column value
2820      * @throws SQLException if (1) the given column index is out of bounds,
2821      *            (2) the cursor is not on one of this rowset's rows or its
2822      *            insert row, or (3) this rowset is
2823      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2824      */
2825     public void updateString(int columnIndex, String x) throws SQLException {
2826         throw new UnsupportedOperationException();
2827     }
2828 
2829     /**
2830      * Sets the designated column in either the current row or the insert
2831      * row of this <code>CachedRowSetImpl</code> object with the given
2832      * <code>byte</code> array.
2833      *
2834      * This method updates a column value in either the current row or
2835      * the insert row of this rowset, but it does not update the
2836      * database.  If the cursor is on a row in the rowset, the
2837      * method {@link #updateRow} must be called to update the database.
2838      * If the cursor is on the insert row, the method {@link #insertRow}
2839      * must be called, which will insert the new row into both this rowset
2840      * and the database. Both of these methods must be called before the
2841      * cursor moves to another row.
2842      *
2843      * @param columnIndex the first column is <code>1</code>, the second
2844      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2845      *        and equal to or less than the number of columns in this rowset
2846      * @param x the new column value
2847      * @throws SQLException if (1) the given column index is out of bounds,
2848      *            (2) the cursor is not on one of this rowset's rows or its
2849      *            insert row, or (3) this rowset is
2850      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2851      */
2852     public void updateBytes(int columnIndex, byte x[]) throws SQLException {
2853         throw new UnsupportedOperationException();
2854     }
2855 
2856     /**
2857      * Sets the designated column in either the current row or the insert
2858      * row of this <code>CachedRowSetImpl</code> object with the given
2859      * <code>Date</code> object.
2860      *
2861      * This method updates a column value in either the current row or
2862      * the insert row of this rowset, but it does not update the
2863      * database.  If the cursor is on a row in the rowset, the
2864      * method {@link #updateRow} must be called to update the database.
2865      * If the cursor is on the insert row, the method {@link #insertRow}
2866      * must be called, which will insert the new row into both this rowset
2867      * and the database. Both of these methods must be called before the
2868      * cursor moves to another row.
2869      *
2870      * @param columnIndex the first column is <code>1</code>, the second
2871      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2872      *        and equal to or less than the number of columns in this rowset
2873      * @param x the new column value
2874      * @throws SQLException if (1) the given column index is out of bounds,
2875      *            (2) the cursor is not on one of this rowset's rows or its
2876      *            insert row, (3) the type of the designated column is not
2877      *            an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
2878      *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
2879      */
2880     public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
2881         throw new UnsupportedOperationException();
2882     }
2883 
2884     /**
2885      * Sets the designated column in either the current row or the insert
2886      * row of this <code>CachedRowSetImpl</code> object with the given
2887      * <code>Time</code> object.
2888      *
2889      * This method updates a column value in either the current row or
2890      * the insert row of this rowset, but it does not update the
2891      * database.  If the cursor is on a row in the rowset, the
2892      * method {@link #updateRow} must be called to update the database.
2893      * If the cursor is on the insert row, the method {@link #insertRow}
2894      * must be called, which will insert the new row into both this rowset
2895      * and the database. Both of these methods must be called before the
2896      * cursor moves to another row.
2897      *
2898      * @param columnIndex the first column is <code>1</code>, the second
2899      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2900      *        and equal to or less than the number of columns in this rowset
2901      * @param x the new column value
2902      * @throws SQLException if (1) the given column index is out of bounds,
2903      *            (2) the cursor is not on one of this rowset's rows or its
2904      *            insert row, (3) the type of the designated column is not
2905      *            an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
2906      *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
2907      */
2908     public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
2909        throw new UnsupportedOperationException();
2910     }
2911 
2912     /**
2913      * Sets the designated column in either the current row or the insert
2914      * row of this <code>CachedRowSetImpl</code> object with the given
2915      * <code>Timestamp</code> object.
2916      *
2917      * This method updates a column value in either the current row or
2918      * the insert row of this rowset, but it does not update the
2919      * database.  If the cursor is on a row in the rowset, the
2920      * method {@link #updateRow} must be called to update the database.
2921      * If the cursor is on the insert row, the method {@link #insertRow}
2922      * must be called, which will insert the new row into both this rowset
2923      * and the database. Both of these methods must be called before the
2924      * cursor moves to another row.
2925      *
2926      * @param columnIndex the first column is <code>1</code>, the second
2927      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2928      *        and equal to or less than the number of columns in this rowset
2929      * @param x the new column value
2930      * @throws SQLException if (1) the given column index is out of bounds,
2931      *            (2) the cursor is not on one of this rowset's rows or its
2932      *            insert row, (3) the type of the designated column is not
2933      *            an SQL <code>DATE</code>, <code>TIME</code>, or
2934      *            <code>TIMESTAMP</code>, or (4) this rowset is
2935      *            <code>ResultSet.CONCUR_READ_ONLY</code>
2936      */
2937     public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
2938         throw new UnsupportedOperationException();
2939     }
2940 
2941     /**
2942      * Sets the designated column in either the current row or the insert
2943      * row of this <code>CachedRowSetImpl</code> object with the given
2944      * ASCII stream value.
2945      * <P>
2946      * This method updates a column value in either the current row or
2947      * the insert row of this rowset, but it does not update the
2948      * database.  If the cursor is on a row in the rowset, the
2949      * method {@link #updateRow} must be called to update the database.
2950      * If the cursor is on the insert row, the method {@link #insertRow}
2951      * must be called, which will insert the new row into both this rowset
2952      * and the database. Both of these methods must be called before the
2953      * cursor moves to another row.
2954      *
2955      * @param columnIndex the first column is <code>1</code>, the second
2956      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2957      *        and equal to or less than the number of columns in this rowset
2958      * @param x the new column value
2959      * @param length the number of one-byte ASCII characters in the stream
2960      * @throws SQLException if this method is invoked
2961      */
2962     public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
2963         throw new UnsupportedOperationException();
2964     }
2965 
2966     /**
2967      * Sets the designated column in either the current row or the insert
2968      * row of this <code>CachedRowSetImpl</code> object with the given
2969      * <code>java.io.InputStream</code> object.
2970      * <P>
2971      * This method updates a column value in either the current row or
2972      * the insert row of this rowset, but it does not update the
2973      * database.  If the cursor is on a row in the rowset, the
2974      * method {@link #updateRow} must be called to update the database.
2975      * If the cursor is on the insert row, the method {@link #insertRow}
2976      * must be called, which will insert the new row into both this rowset
2977      * and the database. Both of these methods must be called before the
2978      * cursor moves to another row.
2979      *
2980      * @param columnIndex the first column is <code>1</code>, the second
2981      *        is <code>2</code>, and so on; must be <code>1</code> or larger
2982      *        and equal to or less than the number of columns in this rowset
2983      * @param x the new column value; must be a <code>java.io.InputStream</code>
2984      *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
2985      *          <code>LONGVARBINARY</code> data
2986      * @param length the length of the stream in bytes
2987      * @throws SQLException if (1) the given column index is out of bounds,
2988      *            (2) the cursor is not on one of this rowset's rows or its
2989      *            insert row, (3) the data in the stream is not binary, or
2990      *            (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
2991      */
2992     public void updateBinaryStream(int columnIndex, java.io.InputStream x,int length) throws SQLException {
2993         throw new UnsupportedOperationException();
2994     }
2995 
2996     /**
2997      * Sets the designated column in either the current row or the insert
2998      * row of this <code>CachedRowSetImpl</code> object with the given
2999      * <code>java.io.Reader</code> object.
3000      * <P>
3001      * This method updates a column value in either the current row or
3002      * the insert row of this rowset, but it does not update the
3003      * database.  If the cursor is on a row in the rowset, the
3004      * method {@link #updateRow} must be called to update the database.
3005      * If the cursor is on the insert row, the method {@link #insertRow}
3006      * must be called, which will insert the new row into both this rowset
3007      * and the database. Both of these methods must be called before the
3008      * cursor moves to another row.
3009      *
3010      * @param columnIndex the first column is <code>1</code>, the second
3011      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3012      *        and equal to or less than the number of columns in this rowset
3013      * @param x the new column value; must be a <code>java.io.Reader</code>
3014      *          containing <code>BINARY</code>, <code>VARBINARY</code>,
3015      *          <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
3016      *          or <code>LONGVARCHAR</code> data
3017      * @param length the length of the stream in characters
3018      * @throws SQLException if (1) the given column index is out of bounds,
3019      *            (2) the cursor is not on one of this rowset's rows or its
3020      *            insert row, (3) the data in the stream is not a binary or
3021      *            character type, or (4) this rowset is
3022      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3023      */
3024     public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
3025         throw new UnsupportedOperationException();
3026     }
3027 
3028     /**
3029      * Sets the designated column in either the current row or the insert
3030      * row of this <code>CachedRowSetImpl</code> object with the given
3031      * <code>Object</code> value.  The <code>scale</code> parameter indicates
3032      * the number of digits to the right of the decimal point and is ignored
3033      * if the new column value is not a type that will be mapped to an SQL
3034      * <code>DECIMAL</code> or <code>NUMERIC</code> value.
3035      * <P>
3036      * This method updates a column value in either the current row or
3037      * the insert row of this rowset, but it does not update the
3038      * database.  If the cursor is on a row in the rowset, the
3039      * method {@link #updateRow} must be called to update the database.
3040      * If the cursor is on the insert row, the method {@link #insertRow}
3041      * must be called, which will insert the new row into both this rowset
3042      * and the database. Both of these methods must be called before the
3043      * cursor moves to another row.
3044      *
3045      * @param columnIndex the first column is <code>1</code>, the second
3046      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3047      *        and equal to or less than the number of columns in this rowset
3048      * @param x the new column value
3049      * @param scale the number of digits to the right of the decimal point (for
3050      *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
3051      * @throws SQLException if (1) the given column index is out of bounds,
3052      *            (2) the cursor is not on one of this rowset's rows or its
3053      *            insert row, or (3) this rowset is
3054      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3055      */
3056     public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
3057        throw new UnsupportedOperationException();
3058     }
3059 
3060     /**
3061      * Sets the designated column in either the current row or the insert
3062      * row of this <code>CachedRowSetImpl</code> object with the given
3063      * <code>Object</code> value.
3064      * <P>
3065      * This method updates a column value in either the current row or
3066      * the insert row of this rowset, but it does not update the
3067      * database.  If the cursor is on a row in the rowset, the
3068      * method {@link #updateRow} must be called to update the database.
3069      * If the cursor is on the insert row, the method {@link #insertRow}
3070      * must be called, which will insert the new row into both this rowset
3071      * and the database. Both of these methods must be called before the
3072      * cursor moves to another row.
3073      *
3074      * @param columnIndex the first column is <code>1</code>, the second
3075      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3076      *        and equal to or less than the number of columns in this rowset
3077      * @param x the new column value
3078      * @throws SQLException if (1) the given column index is out of bounds,
3079      *            (2) the cursor is not on one of this rowset's rows or its
3080      *            insert row, or (3) this rowset is
3081      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3082      */
3083     public void updateObject(int columnIndex, Object x) throws SQLException {
3084         throw new UnsupportedOperationException();
3085     }
3086 
3087 
3088     /**
3089      * Sets the designated nullable column in the current row or the
3090      * insert row of this <code>CachedRowSetImpl</code> object with
3091      * <code>null</code> value.
3092      * <P>
3093      * This method updates a column value in the current row or the insert
3094      * row of this rowset, but it does not update the database.
3095      * If the cursor is on a row in the rowset, the
3096      * method {@link #updateRow} must be called to update the database.
3097      * If the cursor is on the insert row, the method {@link #insertRow}
3098      * must be called, which will insert the new row into both this rowset
3099      * and the database.
3100      *
3101      * @param columnName a <code>String</code> object that must match the
3102      *        SQL name of a column in this rowset, ignoring case
3103      * @throws SQLException if (1) the given column name does not match the
3104      *            name of a column in this rowset, (2) the cursor is not on
3105      *            one of this rowset's rows or its insert row, or (3) this
3106      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3107      */
3108     public void updateNull(String columnName) throws SQLException {
3109         throw new UnsupportedOperationException();
3110     }
3111 
3112     /**
3113      * Sets the designated column in either the current row or the insert
3114      * row of this <code>CachedRowSetImpl</code> object with the given
3115      * <code>boolean</code> value.
3116      * <P>
3117      * This method updates a column value in the current row or the insert
3118      * row of this rowset, but it does not update the database.
3119      * If the cursor is on a row in the rowset, the
3120      * method {@link #updateRow} must be called to update the database.
3121      * If the cursor is on the insert row, the method {@link #insertRow}
3122      * must be called, which will insert the new row into both this rowset
3123      * and the database. Both of these methods must be called before the
3124      * cursor moves to another row.
3125      *
3126      * @param columnName a <code>String</code> object that must match the
3127      *        SQL name of a column in this rowset, ignoring case
3128      * @param x the new column value
3129      * @throws SQLException if (1) the given column name does not match the
3130      *            name of a column in this rowset, (2) the cursor is not on
3131      *            one of this rowset's rows or its insert row, or (3) this
3132      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3133      */
3134     public void updateBoolean(String columnName, boolean x) throws SQLException {
3135        throw new UnsupportedOperationException();
3136     }
3137 
3138     /**
3139      * Sets the designated column in either the current row or the insert
3140      * row of this <code>CachedRowSetImpl</code> object with the given
3141      * <code>byte</code> value.
3142      * <P>
3143      * This method updates a column value in the current row or the insert
3144      * row of this rowset, but it does not update the database.
3145      * If the cursor is on a row in the rowset, the
3146      * method {@link #updateRow} must be called to update the database.
3147      * If the cursor is on the insert row, the method {@link #insertRow}
3148      * must be called, which will insert the new row into both this rowset
3149      * and the database. Both of these methods must be called before the
3150      * cursor moves to another row.
3151      *
3152      * @param columnName a <code>String</code> object that must match the
3153      *        SQL name of a column in this rowset, ignoring case
3154      * @param x the new column value
3155      * @throws SQLException if (1) the given column name does not match the
3156      *            name of a column in this rowset, (2) the cursor is not on
3157      *            one of this rowset's rows or its insert row, or (3) this
3158      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3159      */
3160     public void updateByte(String columnName, byte x) throws SQLException {
3161         throw new UnsupportedOperationException();
3162     }
3163 
3164     /**
3165      * Sets the designated column in either the current row or the insert
3166      * row of this <code>CachedRowSetImpl</code> object with the given
3167      * <code>short</code> value.
3168      * <P>
3169      * This method updates a column value in the current row or the insert
3170      * row of this rowset, but it does not update the database.
3171      * If the cursor is on a row in the rowset, the
3172      * method {@link #updateRow} must be called to update the database.
3173      * If the cursor is on the insert row, the method {@link #insertRow}
3174      * must be called, which will insert the new row into both this rowset
3175      * and the database. Both of these methods must be called before the
3176      * cursor moves to another row.
3177      *
3178      * @param columnName a <code>String</code> object that must match the
3179      *        SQL name of a column in this rowset, ignoring case
3180      * @param x the new column value
3181      * @throws SQLException if (1) the given column name does not match the
3182      *            name of a column in this rowset, (2) the cursor is not on
3183      *            one of this rowset's rows or its insert row, or (3) this
3184      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3185      */
3186     public void updateShort(String columnName, short x) throws SQLException {
3187         throw new UnsupportedOperationException();
3188     }
3189 
3190     /**
3191      * Sets the designated column in either the current row or the insert
3192      * row of this <code>CachedRowSetImpl</code> object with the given
3193      * <code>int</code> value.
3194      * <P>
3195      * This method updates a column value in the current row or the insert
3196      * row of this rowset, but it does not update the database.
3197      * If the cursor is on a row in the rowset, the
3198      * method {@link #updateRow} must be called to update the database.
3199      * If the cursor is on the insert row, the method {@link #insertRow}
3200      * must be called, which will insert the new row into both this rowset
3201      * and the database. Both of these methods must be called before the
3202      * cursor moves to another row.
3203      *
3204      * @param columnName a <code>String</code> object that must match the
3205      *        SQL name of a column in this rowset, ignoring case
3206      * @param x the new column value
3207      * @throws SQLException if (1) the given column name does not match the
3208      *            name of a column in this rowset, (2) the cursor is not on
3209      *            one of this rowset's rows or its insert row, or (3) this
3210      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3211      */
3212     public void updateInt(String columnName, int x) throws SQLException {
3213         throw new UnsupportedOperationException();
3214     }
3215 
3216     /**
3217      * Sets the designated column in either the current row or the insert
3218      * row of this <code>CachedRowSetImpl</code> object with the given
3219      * <code>long</code> value.
3220      * <P>
3221      * This method updates a column value in the current row or the insert
3222      * row of this rowset, but it does not update the database.
3223      * If the cursor is on a row in the rowset, the
3224      * method {@link #updateRow} must be called to update the database.
3225      * If the cursor is on the insert row, the method {@link #insertRow}
3226      * must be called, which will insert the new row into both this rowset
3227      * and the database. Both of these methods must be called before the
3228      * cursor moves to another row.
3229      *
3230      * @param columnName a <code>String</code> object that must match the
3231      *        SQL name of a column in this rowset, ignoring case
3232      * @param x the new column value
3233      * @throws SQLException if (1) the given column name does not match the
3234      *            name of a column in this rowset, (2) the cursor is not on
3235      *            one of this rowset's rows or its insert row, or (3) this
3236      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3237      */
3238     public void updateLong(String columnName, long x) throws SQLException {
3239         throw new UnsupportedOperationException();
3240     }
3241 
3242     /**
3243      * Sets the designated column in either the current row or the insert
3244      * row of this <code>CachedRowSetImpl</code> object with the given
3245      * <code>float</code> value.
3246      * <P>
3247      * This method updates a column value in the current row or the insert
3248      * row of this rowset, but it does not update the database.
3249      * If the cursor is on a row in the rowset, the
3250      * method {@link #updateRow} must be called to update the database.
3251      * If the cursor is on the insert row, the method {@link #insertRow}
3252      * must be called, which will insert the new row into both this rowset
3253      * and the database. Both of these methods must be called before the
3254      * cursor moves to another row.
3255      *
3256      * @param columnName a <code>String</code> object that must match the
3257      *        SQL name of a column in this rowset, ignoring case
3258      * @param x the new column value
3259      * @throws SQLException if (1) the given column name does not match the
3260      *            name of a column in this rowset, (2) the cursor is not on
3261      *            one of this rowset's rows or its insert row, or (3) this
3262      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3263      */
3264     public void updateFloat(String columnName, float x) throws SQLException {
3265         throw new UnsupportedOperationException();
3266     }
3267 
3268     /**
3269      * Sets the designated column in either the current row or the insert
3270      * row of this <code>CachedRowSetImpl</code> object with the given
3271      * <code>double</code> value.
3272      *
3273      * This method updates a column value in either the current row or
3274      * the insert row of this rowset, but it does not update the
3275      * database.  If the cursor is on a row in the rowset, the
3276      * method {@link #updateRow} must be called to update the database.
3277      * If the cursor is on the insert row, the method {@link #insertRow}
3278      * must be called, which will insert the new row into both this rowset
3279      * and the database. Both of these methods must be called before the
3280      * cursor moves to another row.
3281      *
3282      * @param columnName a <code>String</code> object that must match the
3283      *        SQL name of a column in this rowset, ignoring case
3284      * @param x the new column value
3285      * @throws SQLException if (1) the given column name does not match the
3286      *            name of a column in this rowset, (2) the cursor is not on
3287      *            one of this rowset's rows or its insert row, or (3) this
3288      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3289      */
3290     public void updateDouble(String columnName, double x) throws SQLException {
3291         throw new UnsupportedOperationException();
3292     }
3293 
3294     /**
3295      * Sets the designated column in either the current row or the insert
3296      * row of this <code>CachedRowSetImpl</code> object with the given
3297      * <code>java.math.BigDecimal</code> object.
3298      * <P>
3299      * This method updates a column value in the current row or the insert
3300      * row of this rowset, but it does not update the database.
3301      * If the cursor is on a row in the rowset, the
3302      * method {@link #updateRow} must be called to update the database.
3303      * If the cursor is on the insert row, the method {@link #insertRow}
3304      * must be called, which will insert the new row into both this rowset
3305      * and the database. Both of these methods must be called before the
3306      * cursor moves to another row.
3307      *
3308      * @param columnName a <code>String</code> object that must match the
3309      *        SQL name of a column in this rowset, ignoring case
3310      * @param x the new column value
3311      * @throws SQLException if (1) the given column name does not match the
3312      *            name of a column in this rowset, (2) the cursor is not on
3313      *            one of this rowset's rows or its insert row, or (3) this
3314      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3315      */
3316     public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
3317         throw new UnsupportedOperationException();
3318     }
3319 
3320     /**
3321      * Sets the designated column in either the current row or the insert
3322      * row of this <code>CachedRowSetImpl</code> object with the given
3323      * <code>String</code> object.
3324      *
3325      * This method updates a column value in either the current row or
3326      * the insert row of this rowset, but it does not update the
3327      * database.  If the cursor is on a row in the rowset, the
3328      * method {@link #updateRow} must be called to update the database.
3329      * If the cursor is on the insert row, the method {@link #insertRow}
3330      * must be called, which will insert the new row into both this rowset
3331      * and the database. Both of these methods must be called before the
3332      * cursor moves to another row.
3333      *
3334      * @param columnName a <code>String</code> object that must match the
3335      *        SQL name of a column in this rowset, ignoring case
3336      * @param x the new column value
3337      * @throws SQLException if (1) the given column name does not match the
3338      *            name of a column in this rowset, (2) the cursor is not on
3339      *            one of this rowset's rows or its insert row, or (3) this
3340      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3341      */
3342     public void updateString(String columnName, String x) throws SQLException {
3343         throw new UnsupportedOperationException();
3344     }
3345 
3346     /**
3347      * Sets the designated column in either the current row or the insert
3348      * row of this <code>CachedRowSetImpl</code> object with the given
3349      * <code>byte</code> array.
3350      *
3351      * This method updates a column value in either the current row or
3352      * the insert row of this rowset, but it does not update the
3353      * database.  If the cursor is on a row in the rowset, the
3354      * method {@link #updateRow} must be called to update the database.
3355      * If the cursor is on the insert row, the method {@link #insertRow}
3356      * must be called, which will insert the new row into both this rowset
3357      * and the database. Both of these methods must be called before the
3358      * cursor moves to another row.
3359      *
3360      * @param columnName a <code>String</code> object that must match the
3361      *        SQL name of a column in this rowset, ignoring case
3362      * @param x the new column value
3363      * @throws SQLException if (1) the given column name does not match the
3364      *            name of a column in this rowset, (2) the cursor is not on
3365      *            one of this rowset's rows or its insert row, or (3) this
3366      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3367      */
3368     public void updateBytes(String columnName, byte x[]) throws SQLException {
3369         throw new UnsupportedOperationException();
3370     }
3371 
3372     /**
3373      * Sets the designated column in either the current row or the insert
3374      * row of this <code>CachedRowSetImpl</code> object with the given
3375      * <code>Date</code> object.
3376      *
3377      * This method updates a column value in either the current row or
3378      * the insert row of this rowset, but it does not update the
3379      * database.  If the cursor is on a row in the rowset, the
3380      * method {@link #updateRow} must be called to update the database.
3381      * If the cursor is on the insert row, the method {@link #insertRow}
3382      * must be called, which will insert the new row into both this rowset
3383      * and the database. Both of these methods must be called before the
3384      * cursor moves to another row.
3385      *
3386      * @param columnName a <code>String</code> object that must match the
3387      *        SQL name of a column in this rowset, ignoring case
3388      * @param x the new column value
3389      * @throws SQLException if (1) the given column name does not match the
3390      *            name of a column in this rowset, (2) the cursor is not on
3391      *            one of this rowset's rows or its insert row, (3) the type
3392      *            of the designated column is not an SQL <code>DATE</code> or
3393      *            <code>TIMESTAMP</code>, or (4) this rowset is
3394      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3395      */
3396     public void updateDate(String columnName, java.sql.Date x) throws SQLException {
3397         throw new UnsupportedOperationException();
3398     }
3399 
3400     /**
3401      * Sets the designated column in either the current row or the insert
3402      * row of this <code>CachedRowSetImpl</code> object with the given
3403      * <code>Time</code> object.
3404      *
3405      * This method updates a column value in either the current row or
3406      * the insert row of this rowset, but it does not update the
3407      * database.  If the cursor is on a row in the rowset, the
3408      * method {@link #updateRow} must be called to update the database.
3409      * If the cursor is on the insert row, the method {@link #insertRow}
3410      * must be called, which will insert the new row into both this rowset
3411      * and the database. Both of these methods must be called before the
3412      * cursor moves to another row.
3413      *
3414      * @param columnName a <code>String</code> object that must match the
3415      *        SQL name of a column in this rowset, ignoring case
3416      * @param x the new column value
3417      * @throws SQLException if (1) the given column name does not match the
3418      *            name of a column in this rowset, (2) the cursor is not on
3419      *            one of this rowset's rows or its insert row, (3) the type
3420      *            of the designated column is not an SQL <code>TIME</code> or
3421      *            <code>TIMESTAMP</code>, or (4) this rowset is
3422      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3423      */
3424     public void updateTime(String columnName, java.sql.Time x) throws SQLException {
3425         throw new UnsupportedOperationException();
3426     }
3427 
3428     /**
3429      * Sets the designated column in either the current row or the insert
3430      * row of this <code>CachedRowSetImpl</code> object with the given
3431      * <code>Timestamp</code> object.
3432      *
3433      * This method updates a column value in either the current row or
3434      * the insert row of this rowset, but it does not update the
3435      * database.  If the cursor is on a row in the rowset, the
3436      * method {@link #updateRow} must be called to update the database.
3437      * If the cursor is on the insert row, the method {@link #insertRow}
3438      * must be called, which will insert the new row into both this rowset
3439      * and the database. Both of these methods must be called before the
3440      * cursor moves to another row.
3441      *
3442      * @param columnName a <code>String</code> object that must match the
3443      *        SQL name of a column in this rowset, ignoring case
3444      * @param x the new column value
3445      * @throws SQLException if the given column index is out of bounds or
3446      *            the cursor is not on one of this rowset's rows or its
3447      *            insert row
3448      * @throws SQLException if (1) the given column name does not match the
3449      *            name of a column in this rowset, (2) the cursor is not on
3450      *            one of this rowset's rows or its insert row, (3) the type
3451      *            of the designated column is not an SQL <code>DATE</code>,
3452      *            <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
3453      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3454      */
3455     public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
3456         throw new UnsupportedOperationException();
3457     }
3458 
3459     /**
3460      * Sets the designated column in either the current row or the insert
3461      * row of this <code>CachedRowSetImpl</code> object with the given
3462      * ASCII stream value.
3463      * <P>
3464      * This method updates a column value in either the current row or
3465      * the insert row of this rowset, but it does not update the
3466      * database.  If the cursor is on a row in the rowset, the
3467      * method {@link #updateRow} must be called to update the database.
3468      * If the cursor is on the insert row, the method {@link #insertRow}
3469      * must be called, which will insert the new row into both this rowset
3470      * and the database. Both of these methods must be called before the
3471      * cursor moves to another row.
3472      *
3473      * @param columnName a <code>String</code> object that must match the
3474      *        SQL name of a column in this rowset, ignoring case
3475      * @param x the new column value
3476      * @param length the number of one-byte ASCII characters in the stream
3477      */
3478     public void updateAsciiStream(String columnName,
3479     java.io.InputStream x,
3480     int length) throws SQLException {
3481        throw new UnsupportedOperationException();
3482     }
3483 
3484     /**
3485      * Sets the designated column in either the current row or the insert
3486      * row of this <code>CachedRowSetImpl</code> object with the given
3487      * <code>java.io.InputStream</code> object.
3488      * <P>
3489      * This method updates a column value in either the current row or
3490      * the insert row of this rowset, but it does not update the
3491      * database.  If the cursor is on a row in the rowset, the
3492      * method {@link #updateRow} must be called to update the database.
3493      * If the cursor is on the insert row, the method {@link #insertRow}
3494      * must be called, which will insert the new row into both this rowset
3495      * and the database. Both of these methods must be called before the
3496      * cursor moves to another row.
3497      *
3498      * @param columnName a <code>String</code> object that must match the
3499      *        SQL name of a column in this rowset, ignoring case
3500      * @param x the new column value; must be a <code>java.io.InputStream</code>
3501      *          containing <code>BINARY</code>, <code>VARBINARY</code>, or
3502      *          <code>LONGVARBINARY</code> data
3503      * @param length the length of the stream in bytes
3504      * @throws SQLException if (1) the given column name does not match the
3505      *            name of a column in this rowset, (2) the cursor is not on
3506      *            one of this rowset's rows or its insert row, (3) the data
3507      *            in the stream is not binary, or (4) this rowset is
3508      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3509      */
3510     public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
3511         throw new UnsupportedOperationException();
3512     }
3513 
3514     /**
3515      * Sets the designated column in either the current row or the insert
3516      * row of this <code>CachedRowSetImpl</code> object with the given
3517      * <code>java.io.Reader</code> object.
3518      * <P>
3519      * This method updates a column value in either the current row or
3520      * the insert row of this rowset, but it does not update the
3521      * database.  If the cursor is on a row in the rowset, the
3522      * method {@link #updateRow} must be called to update the database.
3523      * If the cursor is on the insert row, the method {@link #insertRow}
3524      * must be called, which will insert the new row into both this rowset
3525      * and the database. Both of these methods must be called before the
3526      * cursor moves to another row.
3527      *
3528      * @param columnName a <code>String</code> object that must match the
3529      *        SQL name of a column in this rowset, ignoring case
3530      * @param reader the new column value; must be a
3531      * <code>java.io.Reader</code> containing <code>BINARY</code>,
3532      * <code>VARBINARY</code>, <code>LONGVARBINARY</code>, <code>CHAR</code>,
3533      * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> data
3534      * @param length the length of the stream in characters
3535      * @throws SQLException if (1) the given column name does not match the
3536      *            name of a column in this rowset, (2) the cursor is not on
3537      *            one of this rowset's rows or its insert row, (3) the data
3538      *            in the stream is not a binary or character type, or (4) this
3539      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3540      */
3541     public void updateCharacterStream(String columnName,
3542     java.io.Reader reader,
3543     int length) throws SQLException {
3544         throw new UnsupportedOperationException();
3545     }
3546 
3547     /**
3548      * Sets the designated column in either the current row or the insert
3549      * row of this <code>CachedRowSetImpl</code> object with the given
3550      * <code>Object</code> value.  The <code>scale</code> parameter
3551      * indicates the number of digits to the right of the decimal point
3552      * and is ignored if the new column value is not a type that will be
3553      *  mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
3554      * <P>
3555      * This method updates a column value in either the current row or
3556      * the insert row of this rowset, but it does not update the
3557      * database.  If the cursor is on a row in the rowset, the
3558      * method {@link #updateRow} must be called to update the database.
3559      * If the cursor is on the insert row, the method {@link #insertRow}
3560      * must be called, which will insert the new row into both this rowset
3561      * and the database. Both of these methods must be called before the
3562      * cursor moves to another row.
3563      *
3564      * @param columnName a <code>String</code> object that must match the
3565      *        SQL name of a column in this rowset, ignoring case
3566      * @param x the new column value
3567      * @param scale the number of digits to the right of the decimal point (for
3568      *              <code>DECIMAL</code> and <code>NUMERIC</code> types only)
3569      * @throws SQLException if (1) the given column name does not match the
3570      *            name of a column in this rowset, (2) the cursor is not on
3571      *            one of this rowset's rows or its insert row, or (3) this
3572      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3573      */
3574     public void updateObject(String columnName, Object x, int scale) throws SQLException {
3575         throw new UnsupportedOperationException();
3576     }
3577 
3578     /**
3579      * Sets the designated column in either the current row or the insert
3580      * row of this <code>CachedRowSetImpl</code> object with the given
3581      * <code>Object</code> value.
3582      * <P>
3583      * This method updates a column value in either the current row or
3584      * the insert row of this rowset, but it does not update the
3585      * database.  If the cursor is on a row in the rowset, the
3586      * method {@link #updateRow} must be called to update the database.
3587      * If the cursor is on the insert row, the method {@link #insertRow}
3588      * must be called, which will insert the new row into both this rowset
3589      * and the database. Both of these methods must be called before the
3590      * cursor moves to another row.
3591      *
3592      * @param columnName a <code>String</code> object that must match the
3593      *        SQL name of a column in this rowset, ignoring case
3594      * @param x the new column value
3595      * @throws SQLException if (1) the given column name does not match the
3596      *            name of a column in this rowset, (2) the cursor is not on
3597      *            one of this rowset's rows or its insert row, or (3) this
3598      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3599      */
3600     public void updateObject(String columnName, Object x) throws SQLException {
3601         throw new UnsupportedOperationException();
3602     }
3603 
3604     /**
3605      * Inserts the contents of this <code>CachedRowSetImpl</code> object's insert
3606      * row into this rowset immediately following the current row.
3607      * If the current row is the
3608      * position after the last row or before the first row, the new row will
3609      * be inserted at the end of the rowset.  This method also notifies
3610      * listeners registered with this rowset that the row has changed.
3611      * <P>
3612      * The cursor must be on the insert row when this method is called.
3613      *
3614      * @throws SQLException if (1) the cursor is not on the insert row,
3615      *            (2) one or more of the non-nullable columns in the insert
3616      *            row has not been given a value, or (3) this rowset is
3617      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3618      */
3619     public void insertRow() throws SQLException {
3620         throw new UnsupportedOperationException();
3621     }
3622 
3623     /**
3624      * Marks the current row of this <code>CachedRowSetImpl</code> object as
3625      * updated and notifies listeners registered with this rowset that the
3626      * row has changed.
3627      * <P>
3628      * This method  cannot be called when the cursor is on the insert row, and
3629      * it should be called before the cursor moves to another row.  If it is
3630      * called after the cursor moves to another row, this method has no effect,
3631      * and the updates made before the cursor moved will be lost.
3632      *
3633      * @throws SQLException if the cursor is on the insert row or this
3634      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
3635      */
3636     public void updateRow() throws SQLException {
3637         throw new UnsupportedOperationException();
3638     }
3639 
3640     /**
3641      * Deletes the current row from this <code>CachedRowSetImpl</code> object and
3642      * notifies listeners registered with this rowset that a row has changed.
3643      * This method cannot be called when the cursor is on the insert row.
3644      * <P>
3645      * This method marks the current row as deleted, but it does not delete
3646      * the row from the underlying data source.  The method
3647      * <code>acceptChanges</code> must be called to delete the row in
3648      * the data source.
3649      *
3650      * @throws SQLException if (1) this method is called when the cursor
3651      *            is on the insert row, before the first row, or after the
3652      *            last row or (2) this rowset is
3653      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3654      */
3655     public void deleteRow() throws SQLException {
3656         throw new UnsupportedOperationException();
3657     }
3658 
3659     /**
3660      * Sets the current row with its original value and marks the row as
3661      * not updated, thus undoing any changes made to the row since the
3662      * last call to the methods <code>updateRow</code> or <code>deleteRow</code>.
3663      * This method should be called only when the cursor is on a row in
3664      * this rowset.
3665      *
3666      * @throws SQLException if the cursor is on the insert row, before the
3667      *            first row, or after the last row
3668      */
3669     public void refreshRow() throws SQLException {
3670         throw new UnsupportedOperationException();
3671     }
3672 
3673     /**
3674      * Rolls back any updates made to the current row of this
3675      * <code>CachedRowSetImpl</code> object and notifies listeners that
3676      * a row has changed.  To have an effect, this method
3677      * must be called after an <code>updateXXX</code> method has been
3678      * called and before the method <code>updateRow</code> has been called.
3679      * If no updates have been made or the method <code>updateRow</code>
3680      * has already been called, this method has no effect.
3681      *
3682      * @throws SQLException if the cursor is on the insert row, before the
3683      *            first row, or after the last row
3684      */
3685     public void cancelRowUpdates() throws SQLException {
3686         throw new UnsupportedOperationException();
3687     }
3688 
3689     /**
3690      * Moves the cursor for this <code>CachedRowSetImpl</code> object
3691      * to the insert row.  The current row in the rowset is remembered
3692      * while the cursor is on the insert row.
3693      * <P>
3694      * The insert row is a special row associated with an updatable
3695      * rowset.  It is essentially a buffer where a new row may
3696      * be constructed by calling the appropriate <code>updateXXX</code>
3697      * methods to assign a value to each column in the row.  A complete
3698      * row must be constructed; that is, every column that is not nullable
3699      * must be assigned a value.  In order for the new row to become part
3700      * of this rowset, the method <code>insertRow</code> must be called
3701      * before the cursor is moved back to the rowset.
3702      * <P>
3703      * Only certain methods may be invoked while the cursor is on the insert
3704      * row; many methods throw an exception if they are called while the
3705      * cursor is there.  In addition to the <code>updateXXX</code>
3706      * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
3707      * may be called when the cursor is on the insert row.  A <code>getXXX</code>
3708      * method should be called on a column only after an <code>updateXXX</code>
3709      * method has been called on that column; otherwise, the value returned is
3710      * undetermined.
3711      *
3712      * @throws SQLException if this <code>CachedRowSetImpl</code> object is
3713      *            <code>ResultSet.CONCUR_READ_ONLY</code>
3714      */
3715     public void moveToInsertRow() throws SQLException {
3716         throw new UnsupportedOperationException();
3717     }
3718 
3719     /**
3720      * Moves the cursor for this <code>CachedRowSetImpl</code> object to
3721      * the current row.  The current row is the row the cursor was on
3722      * when the method <code>moveToInsertRow</code> was called.
3723      * <P>
3724      * Calling this method has no effect unless it is called while the
3725      * cursor is on the insert row.
3726      *
3727      * @throws SQLException if an error occurs
3728      */
3729     public void moveToCurrentRow() throws SQLException {
3730         throw new UnsupportedOperationException();
3731     }
3732 
3733     /**
3734      * Returns <code>null</code>.
3735      *
3736      * @return <code>null</code>
3737      * @throws SQLException if an error occurs
3738      */
3739     public Statement getStatement() throws SQLException {
3740         throw new UnsupportedOperationException();
3741     }
3742 
3743     /**
3744      * Retrieves the value of the designated column in this
3745      * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
3746      * the Java programming language, using the given
3747      * <code>java.util.Map</code> object to custom map the value if
3748      * appropriate.
3749      *
3750      * @param columnIndex the first column is <code>1</code>, the second
3751      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3752      *        and equal to or less than the number of columns in this rowset
3753      * @param map a <code>java.util.Map</code> object showing the mapping
3754      *            from SQL type names to classes in the Java programming
3755      *            language
3756      * @return an <code>Object</code> representing the SQL value
3757      * @throws SQLException if the given column index is out of bounds or
3758      *            the cursor is not on one of this rowset's rows or its
3759      *            insert row
3760      */
3761     public Object getObject(int columnIndex,
3762                             java.util.Map<String,Class<?>> map)
3763           throws SQLException
3764     {
3765        throw new UnsupportedOperationException();
3766     }
3767 
3768     /**
3769      * Retrieves the value of the designated column in this
3770      * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
3771      * in the Java programming language.
3772      *
3773      * @param columnIndex the first column is <code>1</code>, the second
3774      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3775      *        and equal to or less than the number of columns in this rowset
3776      * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
3777      * @throws SQLException if (1) the given column index is out of bounds,
3778      *            (2) the cursor is not on one of this rowset's rows or its
3779      *            insert row, or (3) the designated column does not store an
3780      *            SQL <code>REF</code> value
3781      * @see #getRef(String)
3782      */
3783     public Ref getRef(int columnIndex) throws SQLException {
3784         throw new UnsupportedOperationException();
3785     }
3786 
3787     /**
3788      * Retrieves the value of the designated column in this
3789      * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
3790      * in the Java programming language.
3791      *
3792      * @param columnIndex the first column is <code>1</code>, the second
3793      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3794      *        and equal to or less than the number of columns in this rowset
3795      * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
3796      * @throws SQLException if (1) the given column index is out of bounds,
3797      *            (2) the cursor is not on one of this rowset's rows or its
3798      *            insert row, or (3) the designated column does not store an
3799      *            SQL <code>BLOB</code> value
3800      * @see #getBlob(String)
3801      */
3802     public Blob getBlob(int columnIndex) throws SQLException {
3803        throw new UnsupportedOperationException();
3804     }
3805 
3806     /**
3807      * Retrieves the value of the designated column in this
3808      * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
3809      * in the Java programming language.
3810      *
3811      * @param columnIndex the first column is <code>1</code>, the second
3812      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3813      *        and equal to or less than the number of columns in this rowset
3814      * @return a <code>Clob</code> object representing an SQL <code>CLOB</code> value
3815      * @throws SQLException if (1) the given column index is out of bounds,
3816      *            (2) the cursor is not on one of this rowset's rows or its
3817      *            insert row, or (3) the designated column does not store an
3818      *            SQL <code>CLOB</code> value
3819      * @see #getClob(String)
3820      */
3821     public Clob getClob(int columnIndex) throws SQLException {
3822         throw new UnsupportedOperationException();
3823     }
3824 
3825     /**
3826      * Retrieves the value of the designated column in this
3827      * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
3828      * in the Java programming language.
3829      *
3830      * @param columnIndex the first column is <code>1</code>, the second
3831      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3832      *        and equal to or less than the number of columns in this rowset
3833      * @return an <code>Array</code> object representing an SQL
3834      *         <code>ARRAY</code> value
3835      * @throws SQLException if (1) the given column index is out of bounds,
3836      *            (2) the cursor is not on one of this rowset's rows or its
3837      *            insert row, or (3) the designated column does not store an
3838      *            SQL <code>ARRAY</code> value
3839      * @see #getArray(String)
3840      */
3841     public Array getArray(int columnIndex) throws SQLException {
3842         throw new UnsupportedOperationException();
3843     }
3844 
3845     /**
3846      * Retrieves the value of the designated column in this
3847      * <code>CachedRowSetImpl</code> object as an <code>Object</code> in
3848      * the Java programming language, using the given
3849      * <code>java.util.Map</code> object to custom map the value if
3850      * appropriate.
3851      *
3852      * @param columnName a <code>String</code> object that must match the
3853      *        SQL name of a column in this rowset, ignoring case
3854      * @param map a <code>java.util.Map</code> object showing the mapping
3855      *        from SQL type names to classes in the Java programming
3856      *        language
3857      * @return an <code>Object</code> representing the SQL value
3858      * @throws SQLException if the given column name is not the name of
3859      *         a column in this rowset or the cursor is not on one of
3860      *         this rowset's rows or its insert row
3861      */
3862     public Object getObject(String columnName,
3863                             java.util.Map<String,Class<?>> map)
3864     throws SQLException {
3865         throw new UnsupportedOperationException();
3866     }
3867 
3868     /**
3869      * Retrieves the value of the designated column in this
3870      * <code>CachedRowSetImpl</code> object as a <code>Ref</code> object
3871      * in the Java programming language.
3872      *
3873      * @param colName a <code>String</code> object that must match the
3874      *        SQL name of a column in this rowset, ignoring case
3875      * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
3876      * @throws SQLException  if (1) the given column name is not the name of
3877      *            a column in this rowset, (2) the cursor is not on one of
3878      *            this rowset's rows or its insert row, or (3) the column value
3879      *            is not an SQL <code>REF</code> value
3880      * @see #getRef(int)
3881      */
3882     public Ref getRef(String colName) throws SQLException {
3883         throw new UnsupportedOperationException();
3884     }
3885 
3886     /**
3887      * Retrieves the value of the designated column in this
3888      * <code>CachedRowSetImpl</code> object as a <code>Blob</code> object
3889      * in the Java programming language.
3890      *
3891      * @param colName a <code>String</code> object that must match the
3892      *        SQL name of a column in this rowset, ignoring case
3893      * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
3894      * @throws SQLException if (1) the given column name is not the name of
3895      *            a column in this rowset, (2) the cursor is not on one of
3896      *            this rowset's rows or its insert row, or (3) the designated
3897      *            column does not store an SQL <code>BLOB</code> value
3898      * @see #getBlob(int)
3899      */
3900     public Blob getBlob(String colName) throws SQLException {
3901        throw new UnsupportedOperationException();
3902     }
3903 
3904     /**
3905      * Retrieves the value of the designated column in this
3906      * <code>CachedRowSetImpl</code> object as a <code>Clob</code> object
3907      * in the Java programming language.
3908      *
3909      * @param colName a <code>String</code> object that must match the
3910      *        SQL name of a column in this rowset, ignoring case
3911      * @return a <code>Clob</code> object representing an SQL
3912      *         <code>CLOB</code> value
3913      * @throws SQLException if (1) the given column name is not the name of
3914      *            a column in this rowset, (2) the cursor is not on one of
3915      *            this rowset's rows or its insert row, or (3) the designated
3916      *            column does not store an SQL <code>CLOB</code> value
3917      * @see #getClob(int)
3918      */
3919     public Clob getClob(String colName) throws SQLException {
3920         throw new UnsupportedOperationException();
3921     }
3922 
3923     /**
3924      * Retrieves the value of the designated column in this
3925      * <code>CachedRowSetImpl</code> object as an <code>Array</code> object
3926      * in the Java programming langugage.
3927      *
3928      * @param colName a <code>String</code> object that must match the
3929      *        SQL name of a column in this rowset, ignoring case
3930      * @return an <code>Array</code> object representing an SQL
3931      *         <code>ARRAY</code> value
3932      * @throws SQLException if (1) the given column name is not the name of
3933      *            a column in this rowset, (2) the cursor is not on one of
3934      *            this rowset's rows or its insert row, or (3) the designated
3935      *            column does not store an SQL <code>ARRAY</code> value
3936      * @see #getArray(int)
3937      */
3938     public Array getArray(String colName) throws SQLException {
3939         throw new UnsupportedOperationException();
3940     }
3941 
3942     /**
3943      * Retrieves the value of the designated column in the current row
3944      * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
3945      * object, using the given <code>Calendar</code> object to construct an
3946      * appropriate millisecond value for the date.
3947      *
3948      * @param columnIndex the first column is <code>1</code>, the second
3949      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3950      *        and equal to or less than the number of columns in the rowset
3951      * @param cal the <code>java.util.Calendar</code> object to use in
3952      *            constructing the date
3953      * @return the column value; if the value is SQL <code>NULL</code>,
3954      *         the result is <code>null</code>
3955      * @throws SQLException if (1) the given column name is not the name of
3956      *            a column in this rowset, (2) the cursor is not on one of
3957      *            this rowset's rows or its insert row, or (3) the designated
3958      *            column does not store an SQL <code>DATE</code> or
3959      *            <code>TIMESTAMP</code> value
3960      */
3961     public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
3962         throw new UnsupportedOperationException();
3963     }
3964 
3965     /**
3966      * Retrieves the value of the designated column in the current row
3967      * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Date</code>
3968      * object, using the given <code>Calendar</code> object to construct an
3969      * appropriate millisecond value for the date.
3970      *
3971      * @param columnName a <code>String</code> object that must match the
3972      *        SQL name of a column in this rowset, ignoring case
3973      * @param cal the <code>java.util.Calendar</code> object to use in
3974      *            constructing the date
3975      * @return the column value; if the value is SQL <code>NULL</code>,
3976      *         the result is <code>null</code>
3977      * @throws SQLException if (1) the given column name is not the name of
3978      *            a column in this rowset, (2) the cursor is not on one of
3979      *            this rowset's rows or its insert row, or (3) the designated
3980      *            column does not store an SQL <code>DATE</code> or
3981      *            <code>TIMESTAMP</code> value
3982      */
3983     public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
3984         throw new UnsupportedOperationException();
3985     }
3986 
3987     /**
3988      * Retrieves the value of the designated column in the current row
3989      * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
3990      * object, using the given <code>Calendar</code> object to construct an
3991      * appropriate millisecond value for the date.
3992      *
3993      * @param columnIndex the first column is <code>1</code>, the second
3994      *        is <code>2</code>, and so on; must be <code>1</code> or larger
3995      *        and equal to or less than the number of columns in the rowset
3996      * @param cal the <code>java.util.Calendar</code> object to use in
3997      *            constructing the date
3998      * @return the column value; if the value is SQL <code>NULL</code>,
3999      *         the result is <code>null</code>
4000      * @throws SQLException if (1) the given column name is not the name of
4001      *            a column in this rowset, (2) the cursor is not on one of
4002      *            this rowset's rows or its insert row, or (3) the designated
4003      *            column does not store an SQL <code>TIME</code> or
4004      *            <code>TIMESTAMP</code> value
4005      */
4006     public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
4007         throw new UnsupportedOperationException();
4008     }
4009 
4010     /**
4011      * Retrieves the value of the designated column in the current row
4012      * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Time</code>
4013      * object, using the given <code>Calendar</code> object to construct an
4014      * appropriate millisecond value for the date.
4015      *
4016      * @param columnName a <code>String</code> object that must match the
4017      *        SQL name of a column in this rowset, ignoring case
4018      * @param cal the <code>java.util.Calendar</code> object to use in
4019      *            constructing the date
4020      * @return the column value; if the value is SQL <code>NULL</code>,
4021      *         the result is <code>null</code>
4022      * @throws SQLException if (1) the given column name is not the name of
4023      *            a column in this rowset, (2) the cursor is not on one of
4024      *            this rowset's rows or its insert row, or (3) the designated
4025      *            column does not store an SQL <code>TIME</code> or
4026      *            <code>TIMESTAMP</code> value
4027      */
4028     public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
4029         throw new UnsupportedOperationException();
4030     }
4031 
4032     /**
4033      * Retrieves the value of the designated column in the current row
4034      * of this <code>CachedRowSetImpl</code> object as a <code>java.sql.Timestamp</code>
4035      * object, using the given <code>Calendar</code> object to construct an
4036      * appropriate millisecond value for the date.
4037      *
4038      * @param columnIndex the first column is <code>1</code>, the second
4039      *        is <code>2</code>, and so on; must be <code>1</code> or larger
4040      *        and equal to or less than the number of columns in the rowset
4041      * @param cal the <code>java.util.Calendar</code> object to use in
4042      *            constructing the date
4043      * @return the column value; if the value is SQL <code>NULL</code>,
4044      *         the result is <code>null</code>
4045      * @throws SQLException if (1) the given column name is not the name of
4046      *            a column in this rowset, (2) the cursor is not on one of
4047      *            this rowset's rows or its insert row, or (3) the designated
4048      *            column does not store an SQL <code>TIME</code> or
4049      *            <code>TIMESTAMP</code> value
4050      */
4051     public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
4052         throw new UnsupportedOperationException();
4053     }
4054 
4055     /**
4056      * Retrieves the value of the designated column in the current row
4057      * of this <code>CachedRowSetImpl</code> object as a
4058      * <code>java.sql.Timestamp</code> object, using the given
4059      * <code>Calendar</code> object to construct an appropriate
4060      * millisecond value for the date.
4061      *
4062      * @param columnName a <code>String</code> object that must match the
4063      *        SQL name of a column in this rowset, ignoring case
4064      * @param cal the <code>java.util.Calendar</code> object to use in
4065      *            constructing the date
4066      * @return the column value; if the value is SQL <code>NULL</code>,
4067      *         the result is <code>null</code>
4068      * @throws SQLException if (1) the given column name is not the name of
4069      *            a column in this rowset, (2) the cursor is not on one of
4070      *            this rowset's rows or its insert row, or (3) the designated
4071      *            column does not store an SQL <code>DATE</code>,
4072      *            <code>TIME</code>, or <code>TIMESTAMP</code> value
4073      */
4074     public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
4075         throw new UnsupportedOperationException();
4076     }
4077 
4078     /*
4079      * RowSetInternal Interface
4080      */
4081 
4082     /**
4083      * Retrieves the <code>Connection</code> object passed to this
4084      * <code>CachedRowSetImpl</code> object.  This connection may be
4085      * used to populate this rowset with data or to write data back
4086      * to its underlying data source.
4087      *
4088      * @return the <code>Connection</code> object passed to this rowset;
4089      *         may be <code>null</code> if there is no connection
4090      * @throws SQLException if an error occurs
4091      */
4092     public Connection getConnection() throws SQLException{
4093         throw new UnsupportedOperationException();
4094     }
4095 
4096     /**
4097      * Sets the metadata for this <code>CachedRowSetImpl</code> object
4098      * with the given <code>RowSetMetaData</code> object.
4099      *
4100      * @param md a <code>RowSetMetaData</code> object instance containing
4101      *            metadata about the columsn in the rowset
4102      * @throws SQLException if invalid meta data is supplied to the
4103      *            rowset
4104      */
4105     public void setMetaData(RowSetMetaData md) throws SQLException {
4106         throw new UnsupportedOperationException();
4107     }
4108 
4109     /**
4110      * Returns a result set containing the original value of the rowset. The
4111      * original value is the state of the <code>CachedRowSetImpl</code> after the
4112      * last population or synchronization (whichever occurred most recently) with
4113      * the data source.
4114      * <p>
4115      * The cursor is positioned before the first row in the result set.
4116      * Only rows contained in the result set returned by <code>getOriginal()</code>
4117      * are said to have an original value.
4118      *
4119      * @return the original result set of the rowset
4120      * @throws SQLException if an error occurs produce the
4121      *           <code>ResultSet</code> object
4122      */
4123     public ResultSet getOriginal() throws SQLException {
4124        throw new UnsupportedOperationException();
4125     }
4126 
4127     /**
4128      * Returns a result set containing the original value of the current
4129      * row only.
4130      * The original value is the state of the <code>CachedRowSetImpl</code> after
4131      * the last population or synchronization (whichever occurred most recently)
4132      * with the data source.
4133      *
4134      * @return the original result set of the row
4135      * @throws SQLException if there is no current row
4136      * @see #setOriginalRow
4137      */
4138     public ResultSet getOriginalRow() throws SQLException {
4139         throw new UnsupportedOperationException();
4140 
4141     }
4142 
4143     /**
4144      * Marks the current row in this rowset as being an original row.
4145      *
4146      * @throws SQLException if there is no current row
4147      * @see #getOriginalRow
4148      */
4149     public void setOriginalRow() throws SQLException {
4150         throw new UnsupportedOperationException();
4151     }
4152 
4153     /**
4154      * Marks all rows in this rowset as being original rows. Any updates
4155      * made to the rows become the original values for the rowset.
4156      * Calls to the method <code>setOriginal</code> connot be reversed.
4157      *
4158      * @throws SQLException if an error occurs
4159      */
4160     public void setOriginal() throws SQLException {
4161         throw new UnsupportedOperationException();
4162     }
4163 
4164     /**
4165      * Returns an identifier for the object (table) that was used to create this
4166      * rowset.
4167      *
4168      * @return a <code>String</code> object that identifies the table from
4169      *         which this <code>CachedRowSetImpl</code> object was derived
4170      * @throws SQLException if an error occurs
4171      */
4172     public String getTableName() throws SQLException {
4173         throw new UnsupportedOperationException();
4174     }
4175 
4176     /**
4177      * Sets the identifier for the table from which this rowset was derived
4178      * to the given table name.
4179      *
4180      * @param tabName a <code>String</code> object that identifies the
4181      *          table from which this <code>CachedRowSetImpl</code> object
4182      *          was derived
4183      * @throws SQLException if an error occurs
4184      */
4185     public void setTableName(String tabName) throws SQLException {
4186         throw new UnsupportedOperationException();
4187     }
4188 
4189     /**
4190      * Returns the columns that make a key to uniquely identify a
4191      * row in this <code>CachedRowSetImpl</code> object.
4192      *
4193      * @return an array of column numbers that constitutes a primary
4194      *           key for this rowset. This array should be empty
4195      *           if no column is representitive of a primary key
4196      * @throws SQLException if the rowset is empty or no columns
4197      *           are designated as primary keys
4198      * @see #setKeyColumns
4199      */
4200     public int[] getKeyColumns() throws SQLException {
4201         throw new UnsupportedOperationException();
4202     }
4203 
4204 
4205     /**
4206      * Sets this <code>CachedRowSetImpl</code> object's
4207      * <code>keyCols</code> field with the given array of column
4208      * numbers, which forms a key for uniquely identifying a row
4209      * in this rowset.
4210      *
4211      * @param keys an array of <code>int</code> indicating the
4212      *        columns that form a primary key for this
4213      *        <code>CachedRowSetImpl</code> object; every
4214      *        element in the array must be greater than
4215      *        <code>0</code> and less than or equal to the number
4216      *        of columns in this rowset
4217      * @throws SQLException if any of the numbers in the
4218      *            given array is not valid for this rowset
4219      * @see #getKeyColumns
4220      */
4221     public void setKeyColumns(int [] keys) throws SQLException {
4222         throw new UnsupportedOperationException();
4223     }
4224 
4225     /**
4226      * Sets the designated column in either the current row or the insert
4227      * row of this <code>CachedRowSetImpl</code> object with the given
4228      * <code>double</code> value.
4229      *
4230      * This method updates a column value in either the current row or
4231      * the insert row of this rowset, but it does not update the
4232      * database.  If the cursor is on a row in the rowset, the
4233      * method {@link #updateRow} must be called to update the database.
4234      * If the cursor is on the insert row, the method {@link #insertRow}
4235      * must be called, which will insert the new row into both this rowset
4236      * and the database. Both of these methods must be called before the
4237      * cursor moves to another row.
4238      *
4239      * @param columnIndex the first column is <code>1</code>, the second
4240      *        is <code>2</code>, and so on; must be <code>1</code> or larger
4241      *        and equal to or less than the number of columns in this rowset
4242      * @param ref the new column <code>java.sql.Ref</code> value
4243      * @throws SQLException if (1) the given column index is out of bounds,
4244      *        (2) the cursor is not on one of this rowset's rows or its
4245      *        insert row, or (3) this rowset is
4246      *        <code>ResultSet.CONCUR_READ_ONLY</code>
4247      */
4248     public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
4249         throw new UnsupportedOperationException();
4250     }
4251 
4252     /**
4253      * Sets the designated column in either the current row or the insert
4254      * row of this <code>CachedRowSetImpl</code> object with the given
4255      * <code>double</code> value.
4256      *
4257      * This method updates a column value in either the current row or
4258      * the insert row of this rowset, but it does not update the
4259      * database.  If the cursor is on a row in the rowset, the
4260      * method {@link #updateRow} must be called to update the database.
4261      * If the cursor is on the insert row, the method {@link #insertRow}
4262      * must be called, which will insert the new row into both this rowset
4263      * and the database. Both of these methods must be called before the
4264      * cursor moves to another row.
4265      *
4266      * @param columnName a <code>String</code> object that must match the
4267      *        SQL name of a column in this rowset, ignoring case
4268      * @param ref the new column <code>java.sql.Ref</code> value
4269      * @throws SQLException if (1) the given column name does not match the
4270      *        name of a column in this rowset, (2) the cursor is not on
4271      *        one of this rowset's rows or its insert row, or (3) this
4272      *        rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
4273      */
4274     public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
4275         throw new UnsupportedOperationException();
4276     }
4277 
4278     /**
4279      * Sets the designated column in either the current row or the insert
4280      * row of this <code>CachedRowSetImpl</code> object with the given
4281      * <code>double</code> value.
4282      *
4283      * This method updates a column value in either the current row or
4284      * the insert row of this rowset, but it does not update the
4285      * database.  If the cursor is on a row in the rowset, the
4286      * method {@link #updateRow} must be called to update the database.
4287      * If the cursor is on the insert row, the method {@link #insertRow}
4288      * must be called, which will insert the new row into both this rowset
4289      * and the database. Both of these methods must be called before the
4290      * cursor moves to another row.
4291      *
4292      * @param columnIndex the first column is <code>1</code>, the second
4293      *        is <code>2</code>, and so on; must be <code>1</code> or larger
4294      *        and equal to or less than the number of columns in this rowset
4295      * @param c the new column <code>Clob value
4296      * @throws SQLException if (1) the given column index is out of bounds,
4297      *        (2) the cursor is not on one of this rowset's rows or its
4298      *        insert row, or (3) this rowset is
4299      *        <code>ResultSet.CONCUR_READ_ONLY</code>
4300      */
4301     public void updateClob(int columnIndex, Clob c) throws SQLException {
4302        throw new UnsupportedOperationException();
4303     }
4304 
4305     /**
4306      * Sets the designated column in either the current row or the insert
4307      * row of this <code>CachedRowSetImpl</code> object with the given
4308      * <code>double</code> value.
4309      *
4310      * This method updates a column value in either the current row or
4311      * the insert row of this rowset, but it does not update the
4312      * database.  If the cursor is on a row in the rowset, the
4313      * method {@link #updateRow} must be called to update the database.
4314      * If the cursor is on the insert row, the method {@link #insertRow}
4315      * must be called, which will insert the new row into both this rowset
4316      * and the database. Both of these methods must be called before the
4317      * cursor moves to another row.
4318      *
4319      * @param columnName a <code>String</code> object that must match the
4320      *        SQL name of a column in this rowset, ignoring case
4321      * @param c the new column <code>Clob</code>value
4322      * @throws SQLException if (1) the given column name does not match the
4323      *            name of a column in this rowset, (2) the cursor is not on
4324      *            one of this rowset's rows or its insert row, or (3) this
4325      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
4326      */
4327     public void updateClob(String columnName, Clob c) throws SQLException {
4328         throw new UnsupportedOperationException();
4329     }
4330 
4331     /**
4332      * Sets the designated column in either the current row or the insert
4333      * row of this <code>CachedRowSetImpl</code> object with the given
4334      * <code>java.sql.Blob</code> value.
4335      *
4336      * This method updates a column value in either the current row or
4337      * the insert row of this rowset, but it does not update the
4338      * database.  If the cursor is on a row in the rowset, the
4339      * method {@link #updateRow} must be called to update the database.
4340      * If the cursor is on the insert row, the method {@link #insertRow}
4341      * must be called, which will insert the new row into both this rowset
4342      * and the database. Both of these methods must be called before the
4343      * cursor moves to another row.
4344      *
4345      * @param columnIndex the first column is <code>1</code>, the second
4346      *        is <code>2</code>, and so on; must be <code>1</code> or larger
4347      *        and equal to or less than the number of columns in this rowset
4348      * @param b the new column <code>Blob</code> value
4349      * @throws SQLException if (1) the given column index is out of bounds,
4350      *            (2) the cursor is not on one of this rowset's rows or its
4351      *            insert row, or (3) this rowset is
4352      *            <code>ResultSet.CONCUR_READ_ONLY</code>
4353      */
4354     public void updateBlob(int columnIndex, Blob b) throws SQLException {
4355        throw new UnsupportedOperationException();
4356     }
4357 
4358     /**
4359      * Sets the designated column in either the current row or the insert
4360      * row of this <code>CachedRowSetImpl</code> object with the given
4361      * <code>java.sql.Blob </code> value.
4362      *
4363      * This method updates a column value in either the current row or
4364      * the insert row of this rowset, but it does not update the
4365      * database.  If the cursor is on a row in the rowset, the
4366      * method {@link #updateRow} must be called to update the database.
4367      * If the cursor is on the insert row, the method {@link #insertRow}
4368      * must be called, which will insert the new row into both this rowset
4369      * and the database. Both of these methods must be called before the
4370      * cursor moves to another row.
4371      *
4372      * @param columnName a <code>String</code> object that must match the
4373      *        SQL name of a column in this rowset, ignoring case
4374      * @param b the new column <code>Blob</code> value
4375      * @throws SQLException if (1) the given column name does not match the
4376      *            name of a column in this rowset, (2) the cursor is not on
4377      *            one of this rowset's rows or its insert row, or (3) this
4378      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
4379      */
4380     public void updateBlob(String columnName, Blob b) throws SQLException {
4381         throw new UnsupportedOperationException();
4382     }
4383 
4384     /**
4385      * Sets the designated column in either the current row or the insert
4386      * row of this <code>CachedRowSetImpl</code> object with the given
4387      * <code>java.sql.Array</code> values.
4388      *
4389      * This method updates a column value in either the current row or
4390      * the insert row of this rowset, but it does not update the
4391      * database.  If the cursor is on a row in the rowset, the
4392      * method {@link #updateRow} must be called to update the database.
4393      * If the cursor is on the insert row, the method {@link #insertRow}
4394      * must be called, which will insert the new row into both this rowset
4395      * and the database. Both of these methods must be called before the
4396      * cursor moves to another row.
4397      *
4398      * @param columnIndex the first column is <code>1</code>, the second
4399      *        is <code>2</code>, and so on; must be <code>1</code> or larger
4400      *        and equal to or less than the number of columns in this rowset
4401      * @param a the new column <code>Array</code> value
4402      * @throws SQLException if (1) the given column index is out of bounds,
4403      *            (2) the cursor is not on one of this rowset's rows or its
4404      *            insert row, or (3) this rowset is
4405      *            <code>ResultSet.CONCUR_READ_ONLY</code>
4406      */
4407     public void updateArray(int columnIndex, Array a) throws SQLException {
4408         throw new UnsupportedOperationException();
4409     }
4410 
4411     /**
4412      * Sets the designated column in either the current row or the insert
4413      * row of this <code>CachedRowSetImpl</code> object with the given
4414      * <code>java.sql.Array</code> value.
4415      *
4416      * This method updates a column value in either the current row or
4417      * the insert row of this rowset, but it does not update the
4418      * database.  If the cursor is on a row in the rowset, the
4419      * method {@link #updateRow} must be called to update the database.
4420      * If the cursor is on the insert row, the method {@link #insertRow}
4421      * must be called, which will insert the new row into both this rowset
4422      * and the database. Both of these methods must be called before the
4423      * cursor moves to another row.
4424      *
4425      * @param columnName a <code>String</code> object that must match the
4426      *        SQL name of a column in this rowset, ignoring case
4427      * @param a the new column <code>Array</code> value
4428      * @throws SQLException if (1) the given column name does not match the
4429      *            name of a column in this rowset, (2) the cursor is not on
4430      *            one of this rowset's rows or its insert row, or (3) this
4431      *            rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
4432      */
4433     public void updateArray(String columnName, Array a) throws SQLException {
4434         throw new UnsupportedOperationException();
4435     }
4436 
4437 
4438     /**
4439      * Retrieves the value of the designated column in this
4440      * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
4441      * in the Java programming language.
4442      *
4443      * @return a java.net.URL object containing the resource reference described by
4444      * the URL
4445      * @throws SQLException if (1) the given column index is out of bounds,
4446      * (2) the cursor is not on one of this rowset's rows or its
4447      * insert row, or (3) the designated column does not store an
4448      * SQL <code>DATALINK</code> value.
4449      * @see #getURL(String)
4450      */
4451     public java.net.URL getURL(int columnIndex) throws SQLException {
4452         throw new UnsupportedOperationException();
4453     }
4454 
4455     /**
4456      * Retrieves the value of the designated column in this
4457      * <code>CachedRowSetImpl</code> object as a <code>java.net.URL</code> object
4458      * in the Java programming language.
4459      *
4460      * @return a java.net.URL object containing the resource reference described by
4461      * the URL
4462      * @throws SQLException if (1) the given column name not the name of a column
4463      * in this rowset, or
4464      * (2) the cursor is not on one of this rowset's rows or its
4465      * insert row, or (3) the designated column does not store an
4466      * SQL <code>DATALINK</code> value.
4467      * @see #getURL(int)
4468      */
4469     public java.net.URL getURL(String columnName) throws SQLException {
4470         throw new UnsupportedOperationException();
4471 
4472     }
4473 
4474     /**
4475      * The first warning reported by calls on this <code>CachedRowSetImpl</code>
4476      * object is returned. Subsequent <code>CachedRowSetImpl</code> warnings will
4477      * be chained to this <code>SQLWarning</code>. All <code>RowSetWarnings</code>
4478      * warnings are generated in the disconnected environment and remain a
4479      * seperate warning chain to that provided by the <code>getWarnings</code>
4480      * method.
4481      *
4482      * <P>The warning chain is automatically cleared each time a new
4483      * row is read.
4484      *
4485      * <P><B>Note:</B> This warning chain only covers warnings caused
4486      * by <code>CachedRowSet</code> (and their child interface)
4487      * methods. All <code>SQLWarnings</code> can be obtained using the
4488      * <code>getWarnings</code> method which tracks warnings generated
4489      * by the underlying JDBC driver.
4490      * @return the first SQLWarning or null
4491      *
4492      */
4493     public RowSetWarning getRowSetWarnings() {
4494         throw new UnsupportedOperationException();
4495     }
4496 
4497      /**
4498      * Commits all changes performed by the <code>acceptChanges()</code>
4499      * methods
4500      *
4501      * @see java.sql.Connection#commit
4502      */
4503     public void commit() throws SQLException {
4504         throw new UnsupportedOperationException();
4505     }
4506 
4507     /**
4508      * Rolls back all changes performed by the <code>acceptChanges()</code>
4509      * methods
4510      *
4511      * @see java.sql.Connection#rollback
4512      */
4513     public void rollback() throws SQLException {
4514         throw new UnsupportedOperationException();
4515     }
4516 
4517     /**
4518      * Rolls back all changes performed by the <code>acceptChanges()</code>
4519      * to the last <code>Savepoint</code> transaction marker.
4520      *
4521      * @see java.sql.Connection#rollback(Savepoint)
4522      */
4523     public void rollback(Savepoint s) throws SQLException {
4524         throw new UnsupportedOperationException();
4525     }
4526 
4527     /**
4528      * Unsets the designated parameter to the given int array.
4529      * This was set using <code>setMatchColumn</code>
4530      * as the column which will form the basis of the join.
4531      * <P>
4532      * The parameter value unset by this method should be same
4533      * as was set.
4534      *
4535      * @param columnIdxes the index into this rowset
4536      *        object's internal representation of parameter values
4537      * @throws SQLException if an error occurs or the
4538      *  parameter index is out of bounds or if the columnIdx is
4539      *  not the same as set using <code>setMatchColumn(int [])</code>
4540      */
4541     public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
4542          throw new UnsupportedOperationException();
4543     }
4544 
4545    /**
4546      * Unsets the designated parameter to the given String array.
4547      * This was set using <code>setMatchColumn</code>
4548      * as the column which will form the basis of the join.
4549      * <P>
4550      * The parameter value unset by this method should be same
4551      * as was set.
4552      *
4553      * @param columnIdxes the index into this rowset
4554      *        object's internal representation of parameter values
4555      * @throws SQLException if an error occurs or the
4556      *  parameter index is out of bounds or if the columnName is
4557      *  not the same as set using <code>setMatchColumn(String [])</code>
4558      */
4559     public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
4560        throw new UnsupportedOperationException();
4561     }
4562 
4563     /**
4564      * Retrieves the column name as <code>String</code> array
4565      * that was set using <code>setMatchColumn(String [])</code>
4566      * for this rowset.
4567      *
4568      * @return a <code>String</code> array object that contains the column names
4569      *         for the rowset which has this the match columns
4570      *
4571      * @throws SQLException if an error occurs or column name is not set
4572      */
4573     public String[] getMatchColumnNames() throws SQLException {
4574         throw new UnsupportedOperationException();
4575     }
4576 
4577     /**
4578      * Retrieves the column id as <code>int</code> array that was set using
4579      * <code>setMatchColumn(int [])</code> for this rowset.
4580      *
4581      * @return a <code>int</code> array object that contains the column ids
4582      *         for the rowset which has this as the match columns.
4583      *
4584      * @throws SQLException if an error occurs or column index is not set
4585      */
4586     public int[] getMatchColumnIndexes() throws SQLException {
4587         throw new UnsupportedOperationException();
4588     }
4589 
4590     /**
4591      * Sets the designated parameter to the given int array.
4592      * This forms the basis of the join for the
4593      * <code>JoinRowSet</code> as the column which will form the basis of the
4594      * join.
4595      * <P>
4596      * The parameter value set by this method is stored internally and
4597      * will be supplied as the appropriate parameter in this rowset's
4598      * command when the method <code>getMatchColumnIndexes</code> is called.
4599      *
4600      * @param columnIdxes the indexes into this rowset
4601      *        object's internal representation of parameter values; the
4602      *        first parameter is 0, the second is 1, and so on; must be
4603      *        <code>0</code> or greater
4604      * @throws SQLException if an error occurs or the
4605      *                         parameter index is out of bounds
4606      */
4607     public void setMatchColumn(int[] columnIdxes) throws SQLException {
4608         throw new UnsupportedOperationException();
4609     }
4610 
4611     /**
4612      * Sets the designated parameter to the given String array.
4613      *  This forms the basis of the join for the
4614      * <code>JoinRowSet</code> as the column which will form the basis of the
4615      * join.
4616      * <P>
4617      * The parameter value set by this method is stored internally and
4618      * will be supplied as the appropriate parameter in this rowset's
4619      * command when the method <code>getMatchColumn</code> is called.
4620      *
4621      * @param columnNames the name of the column into this rowset
4622      *        object's internal representation of parameter values
4623      * @throws SQLException if an error occurs or the
4624      *  parameter index is out of bounds
4625      */
4626     public void setMatchColumn(String[] columnNames) throws SQLException {
4627         throw new UnsupportedOperationException();
4628     }
4629 
4630 
4631     /**
4632      * Sets the designated parameter to the given <code>int</code>
4633      * object.  This forms the basis of the join for the
4634      * <code>JoinRowSet</code> as the column which will form the basis of the
4635      * join.
4636      * <P>
4637      * The parameter value set by this method is stored internally and
4638      * will be supplied as the appropriate parameter in this rowset's
4639      * command when the method <code>getMatchColumn</code> is called.
4640      *
4641      * @param columnIdx the index into this rowset
4642      *        object's internal representation of parameter values; the
4643      *        first parameter is 0, the second is 1, and so on; must be
4644      *        <code>0</code> or greater
4645      * @throws SQLException if an error occurs or the
4646      *                         parameter index is out of bounds
4647      */
4648     public void setMatchColumn(int columnIdx) throws SQLException {
4649         throw new UnsupportedOperationException();
4650     }
4651 
4652     /**
4653      * Sets the designated parameter to the given <code>String</code>
4654      * object.  This forms the basis of the join for the
4655      * <code>JoinRowSet</code> as the column which will form the basis of the
4656      * join.
4657      * <P>
4658      * The parameter value set by this method is stored internally and
4659      * will be supplied as the appropriate parameter in this rowset's
4660      * command when the method <code>getMatchColumn</code> is called.
4661      *
4662      * @param columnName the name of the column into this rowset
4663      *        object's internal representation of parameter values
4664      * @throws SQLException if an error occurs or the
4665      *  parameter index is out of bounds
4666      */
4667     public void setMatchColumn(String columnName) throws SQLException {
4668         throw new UnsupportedOperationException();
4669     }
4670 
4671     /**
4672      * Unsets the designated parameter to the given <code>int</code>
4673      * object.  This was set using <code>setMatchColumn</code>
4674      * as the column which will form the basis of the join.
4675      * <P>
4676      * The parameter value unset by this method should be same
4677      * as was set.
4678      *
4679      * @param columnIdx the index into this rowset
4680      *        object's internal representation of parameter values
4681      * @throws SQLException if an error occurs or the
4682      *  parameter index is out of bounds or if the columnIdx is
4683      *  not the same as set using <code>setMatchColumn(int)</code>
4684      */
4685     public void unsetMatchColumn(int columnIdx) throws SQLException {
4686         throw new UnsupportedOperationException();
4687     }
4688 
4689     /**
4690      * Unsets the designated parameter to the given <code>String</code>
4691      * object.  This was set using <code>setMatchColumn</code>
4692      * as the column which will form the basis of the join.
4693      * <P>
4694      * The parameter value unset by this method should be same
4695      * as was set.
4696      *
4697      * @param columnName the index into this rowset
4698      *        object's internal representation of parameter values
4699      * @throws SQLException if an error occurs or the
4700      *  parameter index is out of bounds or if the columnName is
4701      *  not the same as set using <code>setMatchColumn(String)</code>
4702      */
4703     public void unsetMatchColumn(String columnName) throws SQLException {
4704         throw new UnsupportedOperationException();
4705     }
4706 
4707     /**
4708      * Notifies registered listeners that a RowSet object in the given RowSetEvent
4709      * object has populated a number of additional rows. The <code>numRows</code> parameter
4710      * ensures that this event will only be fired every <code>numRow</code>.
4711      * <p>
4712      * The source of the event can be retrieved with the method event.getSource.
4713      *
4714      * @param event a <code>RowSetEvent</code> object that contains the
4715      *     <code>RowSet</code> object that is the source of the events
4716      * @param numRows when populating, the number of rows interval on which the
4717      *     <code>CachedRowSet</code> populated should fire; the default value
4718      *     is zero; cannot be less than <code>fetchSize</code> or zero
4719      */
4720     public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException {
4721         throw new UnsupportedOperationException();
4722     }
4723 
4724     /**
4725      * Populates this <code>CachedRowSet</code> object with data from
4726      * the given <code>ResultSet</code> object. While related to the <code>populate(ResultSet)</code>
4727      * method, an additional parameter is provided to allow starting position within
4728      * the <code>ResultSet</code> from where to populate the CachedRowSet
4729      * instance.
4730      *
4731      * This method is an alternative to the method <code>execute</code>
4732      * for filling the rowset with data.  The method <code>populate</code>
4733      * does not require that the properties needed by the method
4734      * <code>execute</code>, such as the <code>command</code> property,
4735      * be set. This is true because the method <code>populate</code>
4736      * is given the <code>ResultSet</code> object from
4737      * which to get data and thus does not need to use the properties
4738      * required for setting up a connection and executing this
4739      * <code>CachedRowSetImpl</code> object's command.
4740      * <P>
4741      * After populating this rowset with data, the method
4742      * <code>populate</code> sets the rowset's metadata and
4743      * then sends a <code>RowSetChangedEvent</code> object
4744      * to all registered listeners prior to returning.
4745      *
4746      * @param data the <code>ResultSet</code> object containing the data
4747      *             to be read into this <code>CachedRowSetImpl</code> object
4748      * @param start the integer specifing the position in the
4749      *        <code>ResultSet</code> object to popultate the
4750      *        <code>CachedRowSetImpl</code> object.
4751      * @throws SQLException if an error occurs; or the max row setting is
4752      *          violated while populating the RowSet.Also id the start position
4753      *          is negative.
4754      * @see #execute
4755      */
4756      public void populate(ResultSet data, int start) throws SQLException{
4757         throw new UnsupportedOperationException();
4758 
4759      }
4760 
4761     /**
4762      * The nextPage gets the next page, that is a <code>CachedRowSetImpl</code> object
4763      * containing the number of rows specified by page size.
4764      * @return boolean value true indicating whether there are more pages to come and
4765      *         false indicating that this is the last page.
4766      * @throws SQLException if an error occurs or this called before calling populate.
4767      */
4768      public boolean nextPage() throws SQLException {
4769          throw new UnsupportedOperationException();
4770      }
4771 
4772     /**
4773      * This is the setter function for setting the size of the page, which specifies
4774      * how many rows have to be retrived at a time.
4775      *
4776      * @param size which is the page size
4777      * @throws SQLException if size is less than zero or greater than max rows.
4778      */
4779      public void setPageSize (int size) throws SQLException {
4780         throw new UnsupportedOperationException();
4781      }
4782 
4783     /**
4784      * This is the getter function for the size of the page.
4785      *
4786      * @return an integer that is the page size.
4787      */
4788     public int getPageSize() {
4789         throw new UnsupportedOperationException();
4790     }
4791 
4792 
4793     /**
4794      * Retrieves the data present in the page prior to the page from where it is
4795      * called.
4796      * @return boolean value true if it retrieves the previous page, flase if it
4797      *         is on the first page.
4798      * @throws SQLException if it is called before populate is called or ResultSet
4799      *         is of type <code>ResultSet.TYPE_FORWARD_ONLY</code> or if an error
4800      *         occurs.
4801      */
4802     public boolean previousPage() throws SQLException {
4803        throw new UnsupportedOperationException();
4804     }
4805 
4806     /**
4807        * Updates the designated column with a character stream value, which will
4808        * have the specified number of bytes. The driver does the necessary conversion
4809        * from Java character format to the national character set in the database.
4810        * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
4811        * The updater methods are used to update column values in the current row or
4812        * the insert row. The updater methods do not update the underlying database;
4813        * instead the updateRow or insertRow methods are called to update the database.
4814        *
4815        * @param columnIndex - the first column is 1, the second is 2, ...
4816        * @param x - the new column value
4817        * @param length - the length of the stream
4818        * @exception SQLException if a database access error occurs
4819        * @since 1.6
4820        */
4821        public void updateNCharacterStream(int columnIndex,
4822                             java.io.Reader x,
4823                             int length)
4824                             throws SQLException {
4825           throw new UnsupportedOperationException("Operation not yet supported");
4826        }
4827 
4828      /**
4829        * Updates the designated column with a character stream value, which will
4830        * have the specified number of bytes. The driver does the necessary conversion




  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.rowset.internal;
  27 
  28 import java.sql.*;
  29 import javax.sql.*;
  30 import java.util.*;
  31 import java.math.BigDecimal;
  32 
  33 import javax.sql.rowset.*;
  34 import javax.sql.rowset.spi.*;
  35 
  36 import com.sun.rowset.*;
  37 import java.io.IOException;
  38 import java.io.ObjectInputStream;
  39 
  40 /**
  41  * There will be two sets of data which will be maintained by the rowset at the
  42  * time of synchronization. The {@code SyncProvider} will utilize the
  43  * {@code SyncResolver} to synchronize the changes back to database.
  44  */
  45 public class SyncResolverImpl extends CachedRowSetImpl implements SyncResolver {
  46     /**
  47      * This CachedRowSet object will encapsulate a rowset
  48      * which will be sync'ed with the datasource but will
  49      * contain values in rows where there is conflict.
  50      * For rows other than conflict, it will *not* contain
  51      * any data. For rows containing conflict it will
  52      * return either of the three values set by SyncResolver.*_CONFLICT
  53      * from getStatus()
  54      */
  55     private CachedRowSetImpl crsRes;
  56 
  57     /**
  58      * This is the actual CachedRowSet object
  59      * which is being synchronized back to
  60      * datasource.
  61      */
  62     private CachedRowSetImpl crsSync;
  63 
  64     /**
  65      *  This ArrayList will contain the status of a row
  66      *  from the SyncResolver.* values else it will be null.
  67      */
  68     private ArrayList<?> stats;
  69 
  70     /**
  71      * The RowSetWriter associated with the original
  72      * CachedRowSet object which is being synchronized.
  73      */
  74     private CachedRowSetWriter crw;
  75 
  76     /**
  77      * Row number identifier
  78      */
  79     private int rowStatus;
  80 
  81     /**
  82      * This will contain the size of the {@code CachedRowSet} object
  83      */
  84     private int sz;
  85 
  86     /**
  87      * The {@code Connection} handle used to synchronize the changes
  88      * back to datasource. This is the same connection handle as was passed
  89      * to the CachedRowSet while fetching the data.
  90      */
  91     private transient Connection con;
  92 
  93     /**
  94      * The {@code CachedRowSet} object which will encapsulate
  95      * a row at any time. This will be built from CachedRowSet and
  96      * SyncResolver values. Synchronization takes place on a row by
  97      * row basis encapsulated as a CahedRowSet.
  98      */
  99     private CachedRowSet row;
 100 
 101     private JdbcRowSetResourceBundle resBundle;
 102 
 103     /**
 104      * Public constructor
 105      */
 106     public SyncResolverImpl() throws SQLException {
 107         try {
 108             crsSync = new CachedRowSetImpl();
 109             crsRes = new CachedRowSetImpl();
 110             crw = new CachedRowSetWriter();
 111             row = new CachedRowSetImpl();
 112             rowStatus = 1;
 113             try {
 114                 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
 115             } catch(IOException ioe) {
 116                 throw new RuntimeException(ioe);
 117             }
 118 
 119         } catch(SQLException sqle) {
 120         }
 121      }
 122 
 123 
 124     /**
 125      * Retrieves the conflict status of the current row of this
 126      * {@code SyncResolver}, which indicates the operationthe {@code RowSet}
 127      * object was attempting when the conflict occurred.
 128      *
 129      * @return one of the following constants:
 130      *         {@code SyncResolver.UPDATE_ROW_CONFLICT},
 131      *         {@code SyncResolver.DELETE_ROW_CONFLICT}, or
 132      *         {@code SyncResolver.INSERT_ROW_CONFLICT}
 133      */
 134     public int getStatus() {
 135         return ((Integer)stats.get(rowStatus-1)).intValue();
 136     }
 137 
 138     /**
 139      * Retrieves the value in the designated column in the current row of this
 140      * {@code SyncResolver} object, which is the value that caused a conflict.
 141      *
 142      * @param index {@code int} designating the column in this row of this
 143      *        {@code SyncResolver} object from which to retrieve the value
 144      *        causing a conflict
 145      */
 146     public Object getConflictValue(int index) throws SQLException {
 147         try {
 148              return crsRes.getObject(index);
 149         } catch(SQLException sqle) {
 150             throw new SQLException(sqle.getMessage());
 151         }
 152     }
 153 
 154     /**
 155      * Retrieves the value in the designated column in the current row of this
 156      * {@code SyncResolver} object, which is the value that caused a conflict.
 157      *
 158      * @param columnName a {@code String} object designating the column in this row of this
 159      *        {@code SyncResolver} object from which to retrieve the value
 160      *        causing a conflict
 161      */
 162     public Object getConflictValue(String columnName) throws SQLException {
 163         try {
 164              return crsRes.getObject(columnName);
 165         } catch(SQLException sqle) {
 166              throw new SQLException(sqle.getMessage());
 167         }
 168     }
 169 
 170     /**
 171      * Sets <i>obj</i> as the value in column <i>index</i> in the current row of the
 172      * {@code RowSet} object. This value is the resolved value that is to be
 173      * persisted in the data source.
 174      *
 175      * @param index an {@code int} giving the number of the column into which to
 176      *        set the value to be persisted
 177      * @param obj an {@code Object} that is the value to be set in the data source
 178      */
 179     public void setResolvedValue(int index, Object obj) throws SQLException {
 180         // modify method to throw SQLException in spec
 181 
 182         /**
 183          * When a value is resolved properly make it to null
 184          * inside crsRes for that column.
 185          *
 186          * For more than one conflicts in the row,
 187          * check for the last resolved value of the current row
 188          * (Note: it can be resolved randomly for same row)
 189          * then sync back immediately.
 190          **/
 191         try {
 192             // check whether the index is in range
 193             if(index<=0 || index > crsSync.getMetaData().getColumnCount() ) {
 194                 throw new SQLException(resBundle.handleGetObject("syncrsimpl.indexval").toString()+ index);
 195             }
 196              // check whether index col is in conflict
 197             if(crsRes.getObject(index) == null) {


 274                           * Also will prevent from going into a loop of SPE's
 275                           **/
 276                          throw new SQLException(resBundle.handleGetObject("syncrsimpl.syncnotpos").toString());
 277                      }
 278                   } //end if(bool)
 279 
 280              } else {
 281                  throw new SQLException(resBundle.handleGetObject("syncrsimpl.valtores").toString());
 282              } //end if (crs.getObject ...) block
 283 
 284 
 285         } catch(SQLException sqle) {
 286            throw new SQLException(sqle.getMessage());
 287         }
 288     }
 289 
 290     /**
 291      * This passes a CachedRowSet as a row to the CachedRowSetWriter
 292      * after the values have been resolved, back to the datasource.
 293      *
 294      * @param row a {@code CachedRowSet} object which will hold the
 295      *        values of a particular row after they have been resolved by
 296      *        the user to synchronize back to datasource.
 297      * @throws SQLException if synchronization does not happen properly
 298      *         maybe beacuse {@code Connection} has timed out.
 299      **/
 300      private void writeData(CachedRowSet row) throws SQLException {
 301         crw.updateResolvedConflictToDB(row, crw.getReader().connect((RowSetInternal)crsSync));
 302      }
 303 
 304     /**
 305      * This function builds a row  as a {@code CachedRowSet} object
 306      * which has been resolved and is ready to be synchrinized to the datasource
 307      *
 308      * @throws SQLException if there is problem in building
 309      *         the metadata of the row.
 310      **/
 311      private CachedRowSet buildCachedRow() throws SQLException {
 312        int iColCount;
 313        CachedRowSetImpl crsRow = new CachedRowSetImpl();
 314 
 315        RowSetMetaDataImpl rsmd = new RowSetMetaDataImpl();
 316        RowSetMetaDataImpl rsmdWrite = (RowSetMetaDataImpl)crsSync.getMetaData();
 317        RowSetMetaDataImpl rsmdRow = new RowSetMetaDataImpl();
 318 
 319        iColCount = rsmdWrite.getColumnCount();
 320        rsmdRow.setColumnCount(iColCount);
 321 
 322        for(int i =1;i<=iColCount;i++) {
 323           rsmdRow.setColumnType(i,rsmdWrite.getColumnType(i));
 324           rsmdRow.setColumnName(i,rsmdWrite.getColumnName(i));
 325           rsmdRow.setNullable(i,ResultSetMetaData.columnNullableUnknown);


 368 
 369        try {
 370             if(crsSync.getCommand() != null)
 371                 crsRow.setCommand(crsSync.getCommand());
 372        } catch(SQLException sqle) {
 373 
 374        }
 375 
 376        try {
 377             crsRow.setKeyColumns(crsSync.getKeyColumns());
 378        } catch(SQLException sqle) {
 379 
 380        }
 381        return crsRow;
 382     }
 383 
 384 
 385 
 386     /**
 387      * Sets <i>obj</i> as the value in column <i>columnName</i> in the current row of the
 388      * {@code RowSet} object. This value is the resolved value that is to be
 389      * persisted in the data source.
 390      *
 391      * @param columnName a {@code String} object giving the name of the column
 392      *        into which to set the value to be persisted
 393      * @param obj an {@code Object} that is the value to be set in the data source
 394      */
 395     public void setResolvedValue(String columnName, Object obj) throws SQLException {
 396        // modify method to throw SQLException in spec
 397        // %%% Missing implementation!
 398     }
 399 
 400     /**
 401      * This function is package private,
 402      * i.e. cannot be accesses outside this package.
 403      * This is used to set the actual CachedRowSet
 404      * which is being synchronized to the database
 405      **/
 406    void setCachedRowSet(CachedRowSet crs) {
 407            crsSync = (CachedRowSetImpl)crs;
 408     }
 409 
 410     /**
 411      * This function is package private,
 412      * i.e. cannot be accesses outside this package.
 413      * This is used to set the CachedRowSet formed


 428      * i.e. cannot be accesses outside this package.
 429      * This is used to set the status of each row
 430      * to either of the values SyncResolver.*_CONFLICT
 431      **/
 432     @SuppressWarnings("rawtypes")
 433     void setStatus(ArrayList status){
 434              stats = status;
 435     }
 436 
 437     /**
 438      * This function is package private,
 439      * i.e. cannot be accesses outside this package.
 440      * This is used to set the handle to the writer object
 441      * which will write the resolved values back to datasource
 442      **/
 443     void setCachedRowSetWriter(CachedRowSetWriter CRWriter) {
 444          crw = CRWriter;
 445     }
 446 
 447     /**
 448      * Moves the cursor down one row from its current position. A {@code SyncResolver}
 449      * cursor is initially positioned before the first conflict row; the first call to the
 450      * method {@code nextConflict()} makes the first conflict row the current row;
 451      * the second call makes the second conflict row the current row, and so on.
 452      * <p>
 453      * If an input stream is open for the current row, a call to the method next will
 454      * implicitly close it. A {@code SyncResolver} object's warning chain is cleared
 455      * when a new row
 456      *
 457      * @return true if the new current row is valid; false if there are no more rows
 458      * @throws SQLException if a database access occurs
 459      *
 460      */
 461     public boolean nextConflict() throws SQLException {
 462         /**
 463           * The next() method will hop from
 464           * one conflict to another
 465           *
 466           * Internally do a crs.next() until
 467           * next conflict.
 468           **/
 469       boolean bool = false;
 470 
 471       crsSync.setShowDeleted(true);
 472       while(crsSync.next()) {
 473            crsRes.previous();
 474            rowStatus++;  //sz--;


 478              break;
 479           }
 480 
 481           if(((Integer)stats.get(rowStatus-1)).intValue() == SyncResolver.NO_ROW_CONFLICT) {
 482               // do nothing
 483               // bool remains as false
 484              ;
 485            } else {
 486              bool = true;
 487              break;
 488            } //end if
 489 
 490       } //end while
 491 
 492         crsSync.setShowDeleted(false);
 493         return bool;
 494    } // end next() method
 495 
 496 
 497     /**
 498      * Moves the cursor to the previous conflict row in this {@code SyncResolver} object.
 499      *
 500      * @return {@code true} if the cursor is on a valid row; {@code false}
 501      *     if it is off the result set
 502      * @throws SQLException if a database access error occurs or the result set type
 503      *     is TYPE_FORWARD_ONLY
 504      */
 505    public boolean previousConflict() throws SQLException {
 506        throw new UnsupportedOperationException();
 507    }
 508 
 509     //-----------------------------------------------------------------------
 510     // Properties
 511     //-----------------------------------------------------------------------
 512 
 513     /**
 514      * Sets this {@code CachedRowSetImpl} object's command property
 515      * to the given {@code String} object and clears the parameters,
 516      * if any, that were set for the previous command.
 517      * <P>
 518      * The command property may not be needed
 519      * if the rowset is produced by a data source, such as a spreadsheet,
 520      * that does not support commands. Thus, this property is optional
 521      * and may be {@code null}.
 522      *
 523      * @param cmd a {@code String} object containing an SQL query
 524      *            that will be set as the command; may be {@code null}
 525      * @throws SQLException if an error occurs
 526      */
 527     public void setCommand(String cmd) throws SQLException {
 528          throw new UnsupportedOperationException();
 529     }
 530 
 531 
 532     //---------------------------------------------------------------------
 533     // Reading and writing data
 534     //---------------------------------------------------------------------
 535 
 536     /**
 537      * Populates this {@code CachedRowSetImpl} object with data from
 538      * the given {@code ResultSet} object.  This
 539      * method is an alternative to the method {@code execute}
 540      * for filling the rowset with data.  The method {@code populate}
 541      * does not require that the properties needed by the method
 542      * {@code execute}, such as the {@code command} property,
 543      * be set. This is true because the method {@code populate}
 544      * is given the {@code ResultSet} object from
 545      * which to get data and thus does not need to use the properties
 546      * required for setting up a connection and executing this
 547      * {@code CachedRowSetImpl} object's command.
 548      * <P>
 549      * After populating this rowset with data, the method
 550      * {@code populate} sets the rowset's metadata and
 551      * then sends a {@code RowSetChangedEvent} object
 552      * to all registered listeners prior to returning.
 553      *
 554      * @param data the {@code ResultSet} object containing the data
 555      *             to be read into this {@code CachedRowSetImpl} object
 556      * @throws SQLException if an error occurs; or the max row setting is
 557      *          violated while populating the RowSet
 558      * @see #execute
 559      */
 560     public void populate(ResultSet data) throws SQLException {
 561          throw new UnsupportedOperationException();
 562     }
 563 
 564     /**
 565      * Populates this {@code CachedRowSetImpl} object with data,
 566      * using the given connection to produce the result set from
 567      * which data will be read.  A second form of this method,
 568      * which takes no arguments, uses the values from this rowset's
 569      * user, password, and either url or data source properties to
 570      * create a new database connection. The form of {@code execute}
 571      * that is given a connection ignores these properties.
 572      *
 573      * @param conn A standard JDBC {@code Connection} object that this
 574      * {@code CachedRowSet} object can pass to a synchronization provider
 575      * to establish a connection to the data source
 576      * @throws SQLException if an invalid {@code Connection} is supplied
 577      *           or an error occurs in establishing the connection to the
 578      *           data source
 579      * @see #populate
 580      * @see java.sql.Connection
 581      */
 582     public void execute(Connection conn) throws SQLException {
 583         throw new UnsupportedOperationException();
 584     }
 585 
 586     /**
 587      * Propagates all row update, insert, and delete changes to the
 588      * underlying data source backing this {@code CachedRowSetImpl}
 589      * object.
 590      * <P>
 591      * <b>Note</b>In the reference implementation an optimistic concurrency implementation
 592      * is provided as a sample implementation of a the {@code SyncProvider}
 593      * abstract class.
 594      * <P>
 595      * This method fails if any of the updates cannot be propagated back
 596      * to the data source.  When it fails, the caller can assume that
 597      * none of the updates are reflected in the data source.
 598      * When an exception is thrown, the current row
 599      * is set to the first "updated" row that resulted in an exception
 600      * unless the row that caused the exception is a "deleted" row.
 601      * In that case, when deleted rows are not shown, which is usually true,
 602      * the current row is not affected.
 603      * <P>
 604      * If no {@code SyncProvider} is configured, the reference implementation
 605      * leverages the {@code RIOptimisticProvider} available which provides the
 606      * default and reference synchronization capabilities for disconnected
 607      * {@code RowSets}.
 608      *
 609      * @throws SQLException if the cursor is on the insert row or the underlying
 610      *          reference synchronization provider fails to commit the updates
 611      *          to the datasource
 612      * @throws SyncProviderException if an internal error occurs within the
 613      *          {@code SyncProvider} instance during either during the
 614      *          process or at any time when the {@code SyncProvider}
 615      *          instance touches the data source.
 616      * @see #acceptChanges(java.sql.Connection)
 617      * @see javax.sql.RowSetWriter
 618      * @see javax.sql.rowset.spi.SyncProvider
 619      */
 620     public void acceptChanges() throws SyncProviderException {
 621         throw new UnsupportedOperationException();
 622     }
 623 
 624     /**
 625      * Propagates all row update, insert, and delete changes to the
 626      * data source backing this {@code CachedRowSetImpl} object
 627      * using the given {@code Connection} object.
 628      * <P>
 629      * The reference implementation {@code RIOptimisticProvider}
 630      * modifies its synchronization to a write back function given
 631      * the updated connection
 632      * The reference implementation modifies its synchronization behaviour
 633      * via the {@code SyncProvider} to ensure the synchronization
 634      * occurs according to the updated JDBC {@code Connection}
 635      * properties.
 636      *
 637      * @param con a standard JDBC {@code Connection} object
 638      * @throws SQLException if the cursor is on the insert row or the underlying
 639      *                   synchronization provider fails to commit the updates
 640      *                   back to the data source
 641      * @see #acceptChanges
 642      * @see javax.sql.RowSetWriter
 643      * @see javax.sql.rowset.spi.SyncFactory
 644      * @see javax.sql.rowset.spi.SyncProvider
 645      */
 646     public void acceptChanges(Connection con) throws SyncProviderException{
 647      throw new UnsupportedOperationException();
 648     }
 649 
 650     /**
 651      * Restores this {@code CachedRowSetImpl} object to its original state,
 652      * that is, its state before the last set of changes.
 653      * <P>
 654      * Before returning, this method moves the cursor before the first row
 655      * and sends a {@code rowSetChanged} event to all registered
 656      * listeners.
 657      * @throws SQLException if an error is occurs rolling back the RowSet
 658      *           state to the definied original value.
 659      * @see javax.sql.RowSetListener#rowSetChanged
 660      */
 661     public void restoreOriginal() throws SQLException {
 662         throw new UnsupportedOperationException();
 663     }
 664 
 665     /**
 666      * Releases the current contents of this {@code CachedRowSetImpl}
 667      * object and sends a {@code rowSetChanged} event object to all
 668      * registered listeners.
 669      *
 670      * @throws SQLException if an error occurs flushing the contents of
 671      *           RowSet.
 672      * @see javax.sql.RowSetListener#rowSetChanged
 673      */
 674     public void release() throws SQLException {
 675         throw new UnsupportedOperationException();
 676     }
 677 
 678     /**
 679      * Cancels deletion of the current row and notifies listeners that
 680      * a row has changed.
 681      * <P>
 682      * Note:  This method can be ignored if deleted rows are not being shown,
 683      * which is the normal case.
 684      *
 685      * @throws SQLException if the cursor is not on a valid row
 686      */
 687     public void undoDelete() throws SQLException {
 688         throw new UnsupportedOperationException();
 689     }
 690 
 691     /**
 692      * Immediately removes the current row from this
 693      * {@code CachedRowSetImpl} object if the row has been inserted, and
 694      * also notifies listeners the a row has changed.  An exception is thrown
 695      * if the row is not a row that has been inserted or the cursor is before
 696      * the first row, after the last row, or on the insert row.
 697      * <P>
 698      * This operation cannot be undone.
 699      *
 700      * @throws SQLException if an error occurs,
 701      *                         the cursor is not on a valid row,
 702      *                         or the row has not been inserted
 703      */
 704     public void undoInsert() throws SQLException {
 705         throw new UnsupportedOperationException();
 706     }
 707 
 708     /**
 709      * Immediately reverses the last update operation if the
 710      * row has been modified. This method can be
 711      * called to reverse updates on a all columns until all updates in a row have
 712      * been rolled back to their originating state since the last synchronization
 713      * ({@code acceptChanges}) or population. This method may also be called
 714      * while performing updates to the insert row.
 715      * <P>
 716      * {@code undoUpdate} may be called at any time during the life-time of a
 717      * rowset, however after a synchronization has occurs this method has no
 718      * affect until further modification to the RowSet data occurs.
 719      *
 720      * @throws SQLException if cursor is before the first row, after the last
 721      *     row in rowset.
 722      * @see #undoDelete
 723      * @see #undoInsert
 724      * @see java.sql.ResultSet#cancelRowUpdates
 725      */
 726     public void undoUpdate() throws SQLException {
 727         throw new UnsupportedOperationException();
 728 
 729     }
 730 
 731     //--------------------------------------------------------------------
 732     // Views
 733     //--------------------------------------------------------------------
 734 
 735     /**
 736      * Returns a new {@code RowSet} object backed by the same data as
 737      * that of this {@code CachedRowSetImpl} object and sharing a set of cursors
 738      * with it. This allows cursors to interate over a shared set of rows, providing
 739      * multiple views of the underlying data.
 740      *
 741      * @return a {@code RowSet} object that is a copy of this {@code CachedRowSetImpl}
 742      * object and shares a set of cursors with it
 743      * @throws SQLException if an error occurs or cloning is
 744      *                         not supported
 745      * @see javax.sql.RowSetEvent
 746      * @see javax.sql.RowSetListener
 747      */
 748     public RowSet createShared() throws SQLException {
 749         throw new UnsupportedOperationException();
 750     }
 751 
 752     /**
 753      * Returns a new {@code RowSet} object containing by the same data
 754      * as this {@code CachedRowSetImpl} object.  This method
 755      * differs from the method {@code createCopy} in that it throws a
 756      * {@code CloneNotSupportedException} object instead of an
 757      * {@code SQLException} object, as the method {@code createShared}
 758      * does.  This {@code clone}
 759      * method is called internally by the method {@code createShared},
 760      * which catches the {@code CloneNotSupportedException} object
 761      * and in turn throws a new {@code SQLException} object.
 762      *
 763      * @return a copy of this {@code CachedRowSetImpl} object
 764      * @throws CloneNotSupportedException if an error occurs when
 765      * attempting to clone this {@code CachedRowSetImpl} object
 766      * @see #createShared
 767      */
 768     protected Object clone() throws CloneNotSupportedException  {
 769        throw new UnsupportedOperationException();
 770     }
 771 
 772     /**
 773      * Creates a {@code RowSet} object that is a deep copy of
 774      * this {@code CachedRowSetImpl} object's data, including
 775      * constraints.  Updates made
 776      * on a copy are not visible to the original rowset;
 777      * a copy of a rowset is completely independent from the original.
 778      * <P>
 779      * Making a copy saves the cost of creating an identical rowset
 780      * from first principles, which can be quite expensive.
 781      * For example, it can eliminate the need to query a
 782      * remote database server.
 783      * @return a new {@code CachedRowSet} object that is a deep copy
 784      *           of this {@code CachedRowSet} object and is
 785      *           completely independent from this {@code CachedRowSetImpl}
 786      *           object.
 787      * @throws SQLException if an error occurs in generating the copy of this
 788      *           of the {@code CachedRowSetImpl}
 789      * @see #createShared
 790      * @see javax.sql.RowSetEvent
 791      * @see javax.sql.RowSetListener
 792      */
 793     public CachedRowSet createCopy() throws SQLException {
 794         throw new UnsupportedOperationException();
 795     }
 796 
 797     /**
 798      * Creates a {@code RowSet} object that is a copy of
 799      * this {@code CachedRowSetImpl} object's table structure
 800      * and the constraints only.
 801      * There will be no data in the object being returned.
 802      * Updates made on a copy are not visible to the original rowset.
 803      * <P>
 804      * This helps in getting the underlying XML schema which can
 805      * be used as the basis for populating a {@code WebRowSet}.
 806      *
 807      * @return a new {@code CachedRowSet} object that is a copy
 808      * of this {@code CachedRowSetImpl} object's schema and
 809      * retains all the constraints on the original rowset but contains
 810      * no data
 811      * @throws SQLException if an error occurs in generating the copy
 812      * of the {@code CachedRowSet} object
 813      * @see #createShared
 814      * @see #createCopy
 815      * @see #createCopyNoConstraints
 816      * @see javax.sql.RowSetEvent
 817      * @see javax.sql.RowSetListener
 818      */
 819     public CachedRowSet createCopySchema() throws SQLException {
 820         throw new UnsupportedOperationException();
 821     }
 822 
 823     /**
 824      * Creates a {@code CachedRowSet} object that is a copy of
 825      * this {@code CachedRowSetImpl} object's data only.
 826      * All constraints set in this object will not be there
 827      * in the returning object.  Updates made
 828      * on a copy are not visible to the original rowset.
 829      *
 830      * @return a new {@code CachedRowSet} object that is a deep copy
 831      * of this {@code CachedRowSetImpl} object and is
 832      * completely independent from this {@code CachedRowSetImpl} object
 833      * @throws SQLException if an error occurs in generating the copy of the
 834      * of the {@code CachedRowSet}
 835      * @see #createShared
 836      * @see #createCopy
 837      * @see #createCopySchema
 838      * @see javax.sql.RowSetEvent
 839      * @see javax.sql.RowSetListener
 840      */
 841     public CachedRowSet createCopyNoConstraints() throws SQLException {
 842         throw new UnsupportedOperationException();
 843     }
 844 
 845     /**
 846      * Converts this {@code CachedRowSetImpl} object to a collection
 847      * of tables. The sample implementation utilitizes the {@code TreeMap}
 848      * collection type.
 849      * This class guarantees that the map will be in ascending key order,
 850      * sorted according to the natural order for the key's class.
 851      *
 852      * @return a {@code Collection} object consisting of tables,
 853      *         each of which is a copy of a row in this
 854      *         {@code CachedRowSetImpl} object
 855      * @throws SQLException if an error occurs in generating the collection
 856      * @see #toCollection(int)
 857      * @see #toCollection(String)
 858      * @see java.util.TreeMap
 859      */
 860     @SuppressWarnings("rawtypes")
 861     public Collection toCollection() throws SQLException {
 862        throw new UnsupportedOperationException();
 863     }
 864 
 865     /**
 866      * Returns the specified column of this {@code CachedRowSetImpl} object
 867      * as a {@code Collection} object.  This method makes a copy of the
 868      * column's data and utilitizes the {@code Vector} to establish the
 869      * collection. The {@code Vector} class implements a growable array
 870      * objects allowing the individual components to be accessed using an
 871      * an integer index similar to that of an array.
 872      *
 873      * @return a {@code Collection} object that contains the value(s)
 874      *         stored in the specified column of this
 875      *         {@code CachedRowSetImpl}
 876      *         object
 877      * @throws SQLException if an error occurs generated the collection; or
 878      *          an invalid column is provided.
 879      * @see #toCollection()
 880      * @see #toCollection(String)
 881      * @see java.util.Vector
 882      */
 883     @SuppressWarnings("rawtypes")
 884     public Collection toCollection(int column) throws SQLException {
 885        throw new UnsupportedOperationException();
 886     }
 887 
 888     /**
 889      * Returns the specified column of this {@code CachedRowSetImpl} object
 890      * as a {@code Collection} object.  This method makes a copy of the
 891      * column's data and utilitizes the {@code Vector} to establish the
 892      * collection. The {@code Vector} class implements a growable array
 893      * objects allowing the individual components to be accessed using an
 894      * an integer index similar to that of an array.
 895      *
 896      * @return a {@code Collection} object that contains the value(s)
 897      *         stored in the specified column of this
 898      *         {@code CachedRowSetImpl}
 899      *         object
 900      * @throws SQLException if an error occurs generated the collection; or
 901      *          an invalid column is provided.
 902      * @see #toCollection()
 903      * @see #toCollection(int)
 904      * @see java.util.Vector
 905      */
 906     @SuppressWarnings("rawtypes")
 907     public Collection toCollection(String column) throws SQLException {
 908         throw new UnsupportedOperationException();
 909     }
 910 
 911     //--------------------------------------------------------------------
 912     // Advanced features
 913     //--------------------------------------------------------------------
 914 
 915 
 916     /**
 917      * Returns the {@code SyncProvider} implementation being used
 918      * with this {@code CachedRowSetImpl} implementation rowset.
 919      *
 920      * @return the SyncProvider used by the rowset. If not provider was
 921      *          set when the rowset was instantiated, the reference
 922      *          implementation (default) provider is returned.
 923      * @throws SQLException if error occurs while return the
 924      *          {@code SyncProvider} instance.
 925      */
 926     public SyncProvider getSyncProvider() throws SQLException {
 927       throw new UnsupportedOperationException();
 928     }
 929 
 930     /**
 931      * Sets the active {@code SyncProvider} and attempts to load
 932      * load the new provider using the {@code SyncFactory} SPI.
 933      *
 934      * @throws SQLException if an error occurs while resetting the
 935      *          {@code SyncProvider}.
 936      */
 937     public void setSyncProvider(String providerStr) throws SQLException {
 938         throw new UnsupportedOperationException();
 939     }
 940 
 941 
 942     //-----------------
 943     // methods inherited from RowSet
 944     //-----------------
 945 
 946 
 947 
 948 
 949 
 950 
 951     //---------------------------------------------------------------------
 952     // Reading and writing data
 953     //---------------------------------------------------------------------
 954 
 955     /**
 956      * Populates this {@code CachedRowSetImpl} object with data.
 957      * This form of the method uses the rowset's user, password, and url or
 958      * data source name properties to create a database
 959      * connection.  If properties that are needed
 960      * have not been set, this method will throw an exception.
 961      * <P>
 962      * Another form of this method uses an existing JDBC {@code Connection}
 963      * object instead of creating a new one; therefore, it ignores the
 964      * properties used for establishing a new connection.
 965      * <P>
 966      * The query specified by the command property is executed to create a
 967      * {@code ResultSet} object from which to retrieve data.
 968      * The current contents of the rowset are discarded, and the
 969      * rowset's metadata is also (re)set.  If there are outstanding updates,
 970      * they are also ignored.
 971      * <P>
 972      * The method {@code execute} closes any database connections that it
 973      * creates.
 974      *
 975      * @throws SQLException if an error occurs or the
 976      *                         necessary properties have not been set
 977      */
 978     public void execute() throws SQLException {
 979         throw new UnsupportedOperationException();
 980     }
 981 
 982 
 983 
 984     //-----------------------------------
 985     // Methods inherited from ResultSet
 986     //-----------------------------------
 987 
 988     /**
 989      * Moves the cursor down one row from its current position and
 990      * returns {@code true} if the new cursor position is a
 991      * valid row.
 992      * The cursor for a new {@code ResultSet} object is initially
 993      * positioned before the first row. The first call to the method
 994      * {@code next} moves the cursor to the first row, making it
 995      * the current row; the second call makes the second row the
 996      * current row, and so on.
 997      *
 998      * <P>If an input stream from the previous row is open, it is
 999      * implicitly closed. The {@code ResultSet} object's warning
1000      * chain is cleared when a new row is read.
1001      *
1002      * @return {@code true} if the new current row is valid;
1003      *         {@code false} if there are no more rows
1004      * @throws SQLException if an error occurs or
1005      *            the cursor is not positioned in the rowset, before
1006      *            the first row, or after the last row
1007      */
1008     public boolean next() throws SQLException {
1009        throw new UnsupportedOperationException();
1010     }
1011 
1012     /**
1013      * Moves this {@code CachedRowSetImpl} object's cursor to the next
1014      * row and returns {@code true} if the cursor is still in the rowset;
1015      * returns {@code false} if the cursor has moved to the position after
1016      * the last row.
1017      * <P>
1018      * This method handles the cases where the cursor moves to a row that
1019      * has been deleted.
1020      * If this rowset shows deleted rows and the cursor moves to a row
1021      * that has been deleted, this method moves the cursor to the next
1022      * row until the cursor is on a row that has not been deleted.
1023      * <P>
1024      * The method {@code internalNext} is called by methods such as
1025      * {@code next}, {@code absolute}, and {@code relative},
1026      * and, as its name implies, is only called internally.
1027      * <p>
1028      * This is a implementation only method and is not required as a standard
1029      * implementation of the {@code CachedRowSet} interface.
1030      *
1031      * @return {@code true} if the cursor is on a valid row in this
1032      *         rowset; {@code false} if it is after the last row
1033      * @throws SQLException if an error occurs
1034      */
1035     protected boolean internalNext() throws SQLException {
1036         throw new UnsupportedOperationException();
1037     }
1038 
1039     /**
1040      * Closes this {@code CachedRowSetImpl} objecy and releases any resources
1041      * it was using.
1042      *
1043      * @throws SQLException if an error occurs when releasing any resources in use
1044      * by this {@code CachedRowSetImpl} object
1045      */
1046     public void close() throws SQLException {
1047         throw new UnsupportedOperationException();
1048     }
1049 
1050     /**
1051      * Reports whether the last column read was SQL {@code NULL}.
1052      * Note that you must first call the method {@code getXXX}
1053      * on a column to try to read its value and then call the method
1054      * {@code wasNull} to determine whether the value was
1055      * SQL {@code NULL}.
1056      *
1057      * @return {@code true} if the value in the last column read
1058      *         was SQL {@code NULL}; {@code false} otherwise
1059      * @throws SQLException if an error occurs
1060      */
1061     public boolean wasNull() throws SQLException {
1062         throw new UnsupportedOperationException();
1063     }
1064 
1065     /**
1066      * Returns the insert row or the current row of this
1067      * {@code CachedRowSetImpl}object.
1068      *
1069      * @return the {@code Row} object on which this {@code CachedRowSetImpl}
1070      * objects's cursor is positioned
1071      */
1072     protected BaseRow getCurrentRow() {
1073         throw new UnsupportedOperationException();
1074     }
1075 
1076     /**
1077      * Removes the row on which the cursor is positioned.
1078      * <p>
1079      * This is a implementation only method and is not required as a standard
1080      * implementation of the {@code CachedRowSet} interface.
1081      *
1082      * @throws SQLException if the cursor is positioned on the insert
1083      *            row
1084      */
1085     protected void removeCurrentRow() {
1086         throw new UnsupportedOperationException();
1087     }
1088 
1089 
1090     /**
1091      * Retrieves the value of the designated column in the current row
1092      * of this {@code CachedRowSetImpl} object as a
1093      * {@code String} object.
1094      *
1095      * @param columnIndex the first column is {@code 1}, the second
1096      *        is {@code 2}, and so on; must be {@code 1} or larger
1097      *        and equal to or less than the number of columns in the rowset
1098      * @return the column value; if the value is SQL {@code NULL}, the
1099      *         result is {@code null}
1100      * @throws SQLException if (1) the given column index is out of bounds,
1101      * (2) the cursor is not on one of this rowset's rows or its
1102      * insert row, or (3) the designated column does not store an
1103      * SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
1104      * FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT,} <b>{@code CHAR, VARCHAR}</b>
1105      * or {@code LONGVARCHAR} value. The bold SQL type designates the
1106      * recommended return type.
1107      */
1108     public String getString(int columnIndex) throws SQLException {
1109         throw new UnsupportedOperationException();
1110     }
1111 
1112     /**
1113      * Retrieves the value of the designated column in the current row
1114      * of this {@code CachedRowSetImpl} object as a
1115      * {@code boolean} value.
1116      *
1117      * @param columnIndex the first column is {@code 1}, the second
1118      *        is {@code 2}, and so on; must be {@code 1} or larger
1119      *        and equal to or less than the number of columns in the rowset
1120      * @return the column value as a {@code boolean} in the Java progamming language;
1121      *        if the value is SQL {@code NULL}, the result is {@code false}
1122      * @throws SQLException if (1) the given column index is out of bounds,
1123      *            (2) the cursor is not on one of this rowset's rows or its
1124      *            insert row, or (3) the designated column does not store an
1125      *            SQL {@code BOOLEAN} value
1126      * @see #getBoolean(String)
1127      */
1128     public boolean getBoolean(int columnIndex) throws SQLException {
1129         throw new UnsupportedOperationException();
1130     }
1131 
1132     /**
1133      * Retrieves the value of the designated column in the current row
1134      * of this {@code CachedRowSetImpl} object as a
1135      * {@code byte} value.
1136      *
1137      * @param columnIndex the first column is {@code 1}, the second
1138      *        is {@code 2}, and so on; must be {@code 1} or larger
1139      *        and equal to or less than the number of columns in the rowset
1140      * @return the column value as a {@code byte} in the Java programming
1141      * language; if the value is SQL {@code NULL}, the result is {@code 0}
1142      * @throws SQLException if (1) the given column index is out of bounds,
1143      *            (2) the cursor is not on one of this rowset's rows or its
1144      *            insert row, or (3) the designated column does not store an
1145      *            SQL <b>{@code TINYINT}</b>, {@code SMALLINT, INTEGER,
1146      *            BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
1147      *            VARCHAR} or {@code LONGVARCHAR} value. The bold SQL type
1148      *            designates the recommended return type.
1149      * @see #getByte(String)
1150      */
1151     public byte getByte(int columnIndex) throws SQLException {
1152         throw new UnsupportedOperationException();
1153     }
1154 
1155     /**
1156      * Retrieves the value of the designated column in the current row
1157      * of this {@code CachedRowSetImpl} object as a
1158      * {@code short} value.
1159      *
1160      * @param columnIndex the first column is {@code 1}, the second
1161      *        is {@code 2}, and so on; must be {@code 1} or larger
1162      *        and equal to or less than the number of columns in the rowset
1163      * @return the column value; if the value is SQL {@code NULL}, the
1164      *         result is {@code 0}
1165      * @throws SQLException if (1) the given column index is out of bounds,
1166      *         (2) the cursor is not on one of this rowset's rows or its
1167      *         insert row, or (3) the designated column does not store an
1168      *         SQL {@code TINYINT}, <b>{@code SMALLINT}</b>,
1169      *         {@code INTEGER, BIGINT, REAL, FLOAT, DOUBLE,
1170      *         DECIMAL, NUMERIC, BIT, CHAR, VARCHAR}
1171      *         or {@code LONGVARCHAR} value. The bold SQL type
1172      *         designates the recommended return type.
1173      * @see #getShort(String)
1174      */
1175     public short getShort(int columnIndex) throws SQLException {
1176         throw new UnsupportedOperationException();
1177     }
1178 
1179     /**
1180      * Retrieves the value of the designated column in the current row
1181      * of this {@code CachedRowSetImpl} object as an
1182      * {@code int} value.
1183      *
1184      * @param columnIndex the first column is {@code 1}, the second
1185      *        is {@code 2}, and so on; must be {@code 1} or larger
1186      *        and equal to or less than the number of columns in the rowset
1187      * @return the column value; if the value is SQL {@code NULL}, the
1188      *         result is {@code 0}
1189      * @throws SQLException if (1) the given column index is out of bounds,
1190      *         (2) the cursor is not on one of this rowset's rows or its
1191      *         insert row, or (3) the designated column does not store an
1192      *         SQL {@code TINYINT, SMALLINT,} <b>{@code INTEGER}</b>,
1193      *         {@code BIGINT, REAL, FLOAT, DOUBLE, DECIMAL,
1194      *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1195      *         The bold SQL type designates the
1196      *         recommended return type.
1197      */
1198     public int getInt(int columnIndex) throws SQLException {
1199         throw new UnsupportedOperationException();
1200     }
1201 
1202     /**
1203      * Retrieves the value of the designated column in the current row
1204      * of this {@code CachedRowSetImpl} object as a
1205      * {@code long} value.
1206      *
1207      * @param columnIndex the first column is {@code 1}, the second
1208      *        is {@code 2}, and so on; must be {@code 1} or larger
1209      *        and equal to or less than the number of columns in the rowset
1210      * @return the column value; if the value is SQL {@code NULL}, the
1211      *         result is {@code 0}
1212      * @throws SQLException if (1) the given column index is out of bounds,
1213      *         (2) the cursor is not on one of this rowset's rows or its
1214      *         insert row, or (3) the designated column does not store an
1215      *         SQL {@code TINYINT, SMALLINT, INTEGER,}
1216      *         <b>{@code BIGINT}</b>, {@code REAL, FLOAT, DOUBLE,
1217      *         DECIMAL, NUMERIC, BIT, CHAR, VARCHAR}
1218      *         or {@code LONGVARCHAR} value. The bold SQL type
1219      * designates the recommended return type.
1220      * @see #getLong(String)
1221      */
1222     public long getLong(int columnIndex) throws SQLException {
1223         throw new UnsupportedOperationException();
1224     }
1225 
1226     /**
1227      * Retrieves the value of the designated column in the current row
1228      * of this {@code CachedRowSetImpl} object as a
1229      * {@code float} value.
1230      *
1231      * @param columnIndex the first column is {@code 1}, the second
1232      *        is {@code 2}, and so on; must be {@code 1} or larger
1233      *        and equal to or less than the number of columns in the rowset
1234      * @return the column value; if the value is SQL {@code NULL}, the
1235      *         result is {@code 0}
1236      * @throws SQLException if (1) the given column index is out of bounds,
1237      *         (2) the cursor is not on one of this rowset's rows or its
1238      *         insert row, or (3) the designated column does not store an
1239      *         SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT,}
1240      *         <b>{@code REAL}</b>, {@code FLOAT, DOUBLE, DECIMAL, NUMERIC,
1241      *         BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1242      *         The bold SQL type designates the recommended return type.
1243      * @see #getFloat(String)
1244      */
1245     public float getFloat(int columnIndex) throws SQLException {
1246         throw new UnsupportedOperationException();
1247     }
1248 
1249     /**
1250      * Retrieves the value of the designated column in the current row
1251      * of this {@code CachedRowSetImpl} object as a
1252      * {@code double} value.
1253      *
1254      * @param columnIndex the first column is {@code 1}, the second
1255      *        is {@code 2}, and so on; must be {@code 1} or larger
1256      *        and equal to or less than the number of columns in the rowset
1257      * @return the column value; if the value is SQL {@code NULL}, the
1258      *         result is {@code 0}
1259      * @throws SQLException if (1) the given column index is out of bounds,
1260      *         (2) the cursor is not on one of this rowset's rows or its
1261      *         insert row, or (3) the designated column does not store an
1262      *         SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL,}
1263      *         <b>{@code FLOAT, DOUBLE}</b>,
1264      *         {@code DECIMAL, NUMERIC, BIT, CHAR, VARCHAR}
1265      *         or {@code LONGVARCHAR} value. The bold SQL type
1266      *         designates the recommended return type.
1267      * @see #getDouble(String)
1268      *
1269      */
1270     public double getDouble(int columnIndex) throws SQLException {
1271         throw new UnsupportedOperationException();
1272     }
1273 
1274     /**
1275      * Retrieves the value of the designated column in the current row
1276      * of this {@code CachedRowSetImpl} object as a
1277      * {@code java.math.BigDecimal} object.
1278      * <P>
1279      * This method is deprecated; use the version of {@code getBigDecimal}
1280      * that does not take a scale parameter and returns a value with full
1281      * precision.
1282      *
1283      * @param columnIndex the first column is {@code 1}, the second
1284      *        is {@code 2}, and so on; must be {@code 1} or larger
1285      *        and equal to or less than the number of columns in the rowset
1286      * @param scale the number of digits to the right of the decimal point in the
1287      *        value returned
1288      * @return the column value with the specified number of digits to the right
1289      *         of the decimal point; if the value is SQL {@code NULL}, the
1290      *         result is {@code null}
1291      * @throws SQLException if the given column index is out of bounds,
1292      *            the cursor is not on a valid row, or this method fails
1293      * @deprecated
1294      */
1295     @Deprecated
1296     public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
1297        throw new UnsupportedOperationException();
1298     }
1299 
1300     /**
1301      * Retrieves the value of the designated column in the current row
1302      * of this {@code CachedRowSetImpl} object as a
1303      * {@code byte} array value.
1304      *
1305      * @param columnIndex the first column is {@code 1}, the second
1306      *        is {@code 2}, and so on; must be {@code 1} or larger
1307      *        and equal to or less than the number of columns in the rowset
1308      * @return the column value as a {@code byte} array in the Java programming
1309      * language; if the value is SQL {@code NULL}, the
1310      * result is {@code null}
1311      *
1312      * @throws SQLException if (1) the given column index is out of bounds,
1313      *         (2) the cursor is not on one of this rowset's rows or its
1314      *         insert row, or (3) the designated column does not store an
1315      *         SQL <b>{@code BINARY, VARBINARY}</b> or
1316      *         {@code LONGVARBINARY} value.
1317      *         The bold SQL type designates the recommended return type.
1318      * @see #getBytes(String)
1319      */
1320     public byte[] getBytes(int columnIndex) throws SQLException {
1321         throw new UnsupportedOperationException();
1322     }
1323 
1324     /**
1325      * Retrieves the value of the designated column in the current row
1326      * of this {@code CachedRowSetImpl} object as a
1327      * {@code java.sql.Date} object.
1328      *
1329      * @param columnIndex the first column is {@code 1}, the second
1330      *        is {@code 2}, and so on; must be {@code 1} or larger
1331      *        and equal to or less than the number of columns in the rowset
1332      * @return the column value as a {@code java.sql.Data} object; if
1333      *        the value is SQL {@code NULL}, the
1334      *        result is {@code null}
1335      * @throws SQLException if the given column index is out of bounds,
1336      *         the cursor is not on a valid row, or this method fails
1337      */
1338     public java.sql.Date getDate(int columnIndex) throws SQLException {
1339         throw new UnsupportedOperationException();
1340     }
1341 
1342     /**
1343      * Retrieves the value of the designated column in the current row
1344      * of this {@code CachedRowSetImpl} object as a
1345      * {@code java.sql.Time} object.
1346      *
1347      * @param columnIndex the first column is {@code 1}, the second
1348      *        is {@code 2}, and so on; must be {@code 1} or larger
1349      *        and equal to or less than the number of columns in the rowset
1350      * @return the column value; if the value is SQL {@code NULL}, the
1351      *         result is {@code null}
1352      * @throws SQLException if the given column index is out of bounds,
1353      *         the cursor is not on a valid row, or this method fails
1354      */
1355     public java.sql.Time getTime(int columnIndex) throws SQLException {
1356         throw new UnsupportedOperationException();
1357     }
1358 
1359     /**
1360      * Retrieves the value of the designated column in the current row
1361      * of this {@code CachedRowSetImpl} object as a
1362      * {@code java.sql.Timestamp} object.
1363      *
1364      * @param columnIndex the first column is {@code 1}, the second
1365      *        is {@code 2}, and so on; must be {@code 1} or larger
1366      *        and equal to or less than the number of columns in the rowset
1367      * @return the column value; if the value is SQL {@code NULL}, the
1368      *         result is {@code null}
1369      * @throws SQLException if the given column index is out of bounds,
1370      *            the cursor is not on a valid row, or this method fails
1371      */
1372     public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
1373         throw new UnsupportedOperationException();
1374     }
1375 
1376     /**
1377      * Retrieves the value of the designated column in the current row of this
1378      * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
1379      * object.
1380      *
1381      * A column value can be retrieved as a stream of ASCII characters
1382      * and then read in chunks from the stream.  This method is particularly
1383      * suitable for retrieving large {@code LONGVARCHAR} values.  The JDBC
1384      * driver will do any necessary conversion from the database format into ASCII.
1385      *
1386      * <P><B>Note:</B> All the data in the returned stream must be
1387      * read prior to getting the value of any other column. The next
1388      * call to a get method implicitly closes the stream. . Also, a
1389      * stream may return {@code 0} for {@code CachedRowSetImpl.available()}
1390      * whether there is data available or not.
1391      *
1392      * @param columnIndex the first column is {@code 1}, the second
1393      *        is {@code 2}, and so on; must be {@code 1} or larger
1394      *        and equal to or less than the number of columns in this rowset
1395      * @return a Java input stream that delivers the database column value
1396      *         as a stream of one-byte ASCII characters.  If the value is SQL
1397      *         {@code NULL}, the result is {@code null}.
1398      * @throws SQLException if (1) the given column index is out of bounds,
1399      *         (2) the cursor is not on one of this rowset's rows or its
1400      *         insert row, or (3) the designated column does not store an
1401      *         SQL {@code CHAR, VARCHAR}, <b>{@code LONGVARCHAR}</b>,
1402      *         {@code BINARY, VARBINARY} or {@code LONGVARBINARY} value. The
1403      *         bold SQL type designates the recommended return types
1404      *         that this method is used to retrieve.
1405      * @see #getAsciiStream(String)
1406      */
1407     public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
1408        throw new UnsupportedOperationException();
1409     }
1410 
1411     /**
1412      * A column value can be retrieved as a stream of Unicode characters
1413      * and then read in chunks from the stream.  This method is particularly
1414      * suitable for retrieving large LONGVARCHAR values.  The JDBC driver will
1415      * do any necessary conversion from the database format into Unicode.
1416      *
1417      * <P><B>Note:</B> All the data in the returned stream must be
1418      * read prior to getting the value of any other column. The next
1419      * call to a get method implicitly closes the stream. . Also, a
1420      * stream may return 0 for available() whether there is data
1421      * available or not.
1422      *
1423      * @param columnIndex the first column is {@code 1}, the second
1424      *        is {@code 2}, and so on; must be {@code 1} or larger
1425      *        and equal to or less than the number of columns in this rowset
1426      * @return a Java input stream that delivers the database column value
1427      * as a stream of two byte Unicode characters.  If the value is SQL NULL
1428      * then the result is null.
1429      * @throws SQLException if an error occurs
1430      * @deprecated
1431      */
1432     @Deprecated
1433     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
1434        throw new UnsupportedOperationException();
1435     }
1436 
1437     /**
1438      * Retrieves the value of the designated column in the current row of this
1439      * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
1440      * object.
1441      * <P>
1442      * A column value can be retrieved as a stream of uninterpreted bytes
1443      * and then read in chunks from the stream.  This method is particularly
1444      * suitable for retrieving large {@code LONGVARBINARY} values.
1445      *
1446      * <P><B>Note:</B> All the data in the returned stream must be
1447      * read prior to getting the value of any other column. The next
1448      * call to a get method implicitly closes the stream. Also, a
1449      * stream may return {@code 0} for
1450      * {@code CachedRowSetImpl.available()} whether there is data
1451      * available or not.
1452      *
1453      * @param columnIndex the first column is {@code 1}, the second
1454      * is {@code 2}, and so on; must be {@code 1} or larger
1455      * and equal to or less than the number of columns in the rowset
1456      * @return a Java input stream that delivers the database column value
1457      * as a stream of uninterpreted bytes.  If the value is SQL {@code NULL}
1458      * then the result is {@code null}.
1459      * @throws SQLException if (1) the given column index is out of bounds,
1460      * (2) the cursor is not on one of this rowset's rows or its
1461      * insert row, or (3) the designated column does not store an
1462      * SQL {@code BINARY, VARBINARY} or <b>{@code LONGVARBINARY}</b>.
1463      * The bold type indicates the SQL type that this method is recommened
1464      * to retrieve.
1465      * @see #getBinaryStream(String)
1466      */
1467     public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
1468        throw new UnsupportedOperationException();
1469 
1470     }
1471 
1472 
1473     //======================================================================
1474     // Methods for accessing results by column name
1475     //======================================================================
1476 
1477     /**
1478      * Retrieves the value stored in the designated column
1479      * of the current row as a {@code String} object.
1480      *
1481      * @param columnName a {@code String} object giving the SQL name of
1482      *        a column in this {@code CachedRowSetImpl} object
1483      * @return the column value; if the value is SQL {@code NULL},
1484      *         the result is {@code null}
1485      * @throws SQLException if (1) the given column name is not the name of
1486      *         a column in this rowset, (2) the cursor is not on one of
1487      *         this rowset's rows or its insert row, or (3) the designated
1488      *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
1489      *         BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT,}
1490      *         <b>{@code CHAR, VARCHAR}</b> or {@code LONGVARCHAR} value.
1491      *         The bold SQL type designates the recommended return type.
1492      */
1493     public String getString(String columnName) throws SQLException {
1494         throw new UnsupportedOperationException();
1495     }
1496 
1497     /**
1498      * Retrieves the value stored in the designated column
1499      * of the current row as a {@code boolean} value.
1500      *
1501      * @param columnName a {@code String} object giving the SQL name of
1502      *        a column in this {@code CachedRowSetImpl} object
1503      * @return the column value as a {@code boolean} in the Java programming
1504      *        language; if the value is SQL {@code NULL},
1505      *        the result is {@code false}
1506      * @throws SQLException if (1) the given column name is not the name of
1507      *         a column in this rowset, (2) the cursor is not on one of
1508      *         this rowset's rows or its insert row, or (3) the designated
1509      *         column does not store an SQL {@code BOOLEAN} value
1510      * @see #getBoolean(int)
1511      */
1512     public boolean getBoolean(String columnName) throws SQLException {
1513         throw new UnsupportedOperationException();
1514     }
1515 
1516     /**
1517      * Retrieves the value stored in the designated column
1518      * of the current row as a {@code byte} value.
1519      *
1520      * @param columnName a {@code String} object giving the SQL name of
1521      *        a column in this {@code CachedRowSetImpl} object
1522      * @return the column value as a {@code byte} in the Java programming
1523      * language; if the value is SQL {@code NULL}, the result is {@code 0}
1524      * @throws SQLException if (1) the given column name is not the name of
1525      *         a column in this rowset, (2) the cursor is not on one of
1526      *         this rowset's rows or its insert row, or (3) the designated
1527      *         column does not store an SQL <b>{@code TINYINT}</b>,
1528      *         {@code SMALLINT, INTEGER, BIGINT, REAL, FLOAT, DOUBLE,
1529      *         DECIMAL, NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR}
1530      *         value. The bold type designates the recommended return type.
1531      */
1532     public byte getByte(String columnName) throws SQLException {
1533         throw new UnsupportedOperationException();
1534     }
1535 
1536     /**
1537      * Retrieves the value stored in the designated column
1538      * of the current row as a {@code short} value.
1539      *
1540      * @param columnName a {@code String} object giving the SQL name of
1541      *        a column in this {@code CachedRowSetImpl} object
1542      * @return the column value; if the value is SQL {@code NULL},
1543      *         the result is {@code 0}
1544      * @throws SQLException if (1) the given column name is not the name of
1545      *         a column in this rowset, (2) the cursor is not on one of
1546      *         this rowset's rows or its insert row, or (3) the designated
1547      *         column does not store an SQL {@code TINYINT,}
1548      *         <b>{@code SMALLINT}</b>, {@code INTEGER,
1549      *         BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, CHAR,
1550      *         VARCHAR} or {@code LONGVARCHAR} value. The bold SQL type
1551      *         designates the recommended return type.
1552      * @see #getShort(int)
1553      */
1554     public short getShort(String columnName) throws SQLException {
1555        throw new UnsupportedOperationException();
1556     }
1557 
1558     /**
1559      * Retrieves the value stored in the designated column
1560      * of the current row as an {@code int} value.
1561      *
1562      * @param columnName a {@code String} object giving the SQL name of
1563      *        a column in this {@code CachedRowSetImpl} object
1564      * @return the column value; if the value is SQL {@code NULL},
1565      *         the result is {@code 0}
1566      * @throws SQLException if (1) the given column name is not the name
1567      *         of a column in this rowset,
1568      *         (2) the cursor is not on one of this rowset's rows or its
1569      *         insert row, or (3) the designated column does not store an
1570      *         SQL {@code TINYINT, SMALLINT,} <b>{@code INTEGER}</b>,
1571      *         {@code BIGINT, REAL, FLOAT, DOUBLE, DECIMAL,
1572      *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1573      *         The bold SQL type designates the
1574      *         recommended return type.
1575      */
1576     public int getInt(String columnName) throws SQLException {
1577         throw new UnsupportedOperationException();
1578     }
1579 
1580     /**
1581      * Retrieves the value stored in the designated column
1582      * of the current row as a {@code long} value.
1583      *
1584      * @param columnName a {@code String} object giving the SQL name of
1585      *        a column in this {@code CachedRowSetImpl} object
1586      * @return the column value; if the value is SQL {@code NULL},
1587      *         the result is {@code 0}
1588      * @throws SQLException if (1) the given column name is not the name of
1589      *         a column in this rowset, (2) the cursor is not on one of
1590      *         this rowset's rows or its insert row, or (3) the designated
1591      *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,}
1592      *         <b>{@code BIGINT}</b>, {@code REAL, FLOAT, DOUBLE, DECIMAL,
1593      *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1594      *         The bold SQL type designates the recommended return type.
1595      * @see #getLong(int)
1596      */
1597     public long getLong(String columnName) throws SQLException {
1598         throw new UnsupportedOperationException();
1599     }
1600 
1601     /**
1602      * Retrieves the value stored in the designated column
1603      * of the current row as a {@code float} value.
1604      *
1605      * @param columnName a {@code String} object giving the SQL name of
1606      *        a column in this {@code CachedRowSetImpl} object
1607      * @return the column value; if the value is SQL {@code NULL},
1608      *         the result is {@code 0}
1609      * @throws SQLException if (1) the given column name is not the name of
1610      *         a column in this rowset, (2) the cursor is not on one of
1611      *         this rowset's rows or its insert row, or (3) the designated
1612      *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
1613      *         BIGINT,} <b>{@code REAL}</b>, {@code FLOAT, DOUBLE, DECIMAL,
1614      *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1615      *         The bold SQL type designates the recommended return type.
1616      * @see #getFloat(String)
1617      */
1618     public float getFloat(String columnName) throws SQLException {
1619        throw new UnsupportedOperationException();
1620     }
1621 
1622     /**
1623      * Retrieves the value stored in the designated column
1624      * of the current row of this {@code CachedRowSetImpl} object
1625      * as a {@code double} value.
1626      *
1627      * @param columnName a {@code String} object giving the SQL name of
1628      *        a column in this {@code CachedRowSetImpl} object
1629      * @return the column value; if the value is SQL {@code NULL},
1630      *         the result is {@code 0}
1631      * @throws SQLException if (1) the given column name is not the name of
1632      *         a column in this rowset, (2) the cursor is not on one of
1633      *         this rowset's rows or its insert row, or (3) the designated
1634      *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
1635      *         BIGINT, REAL,} <b>{@code FLOAT, DOUBLE}</b>, {@code DECIMAL,
1636      *         NUMERIC, BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1637      *         The bold SQL type designates the recommended return types.
1638      * @see #getDouble(int)
1639      */
1640     public double getDouble(String columnName) throws SQLException {
1641         throw new UnsupportedOperationException();
1642     }
1643 
1644     /**
1645      * Retrieves the value stored in the designated column
1646      * of the current row as a {@code java.math.BigDecimal} object.
1647      *
1648      * @param columnName a {@code String} object giving the SQL name of
1649      *        a column in this {@code CachedRowSetImpl} object
1650      * @param scale the number of digits to the right of the decimal point
1651      * @return a java.math.BugDecimal object with <i>{@code scale}</i>
1652      *         number of digits to the right of the decimal point.
1653      * @throws SQLException if (1) the given column name is not the name of
1654      *         a column in this rowset, (2) the cursor is not on one of
1655      *         this rowset's rows or its insert row, or (3) the designated
1656      *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
1657      *         BIGINT, REAL, FLOAT, DOUBLE,} <b>{@code DECIMAL, NUMERIC}</b>,
1658      *         {@code BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
1659      *         The bold SQL type designates the recommended return type
1660      *         that this method is used to retrieve.
1661      * @deprecated Use the {@code getBigDecimal(String columnName)}
1662      *             method instead
1663      */
1664     @Deprecated
1665     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
1666         throw new UnsupportedOperationException();
1667     }
1668 
1669     /**
1670      * Retrieves the value stored in the designated column
1671      * of the current row as a {@code byte} array.
1672      * The bytes represent the raw values returned by the driver.
1673      *
1674      * @param columnName a {@code String} object giving the SQL name of
1675      *        a column in this {@code CachedRowSetImpl} object
1676      * @return the column value as a {@code byte} array in the Java programming
1677      *         language; if the value is SQL {@code NULL}, the result is {@code null}
1678      * @throws SQLException if (1) the given column name is not the name of
1679      *         a column in this rowset, (2) the cursor is not on one of
1680      *         this rowset's rows or its insert row, or (3) the designated
1681      *         column does not store an SQL <b>{@code BINARY, VARBINARY}</b>
1682      *         or {@code LONGVARBINARY} values.
1683      *         The bold SQL type designates the recommended return type.
1684      * @see #getBytes(int)
1685      */
1686     public byte[] getBytes(String columnName) throws SQLException {
1687         throw new UnsupportedOperationException();
1688     }
1689 
1690     /**
1691      * Retrieves the value stored in the designated column
1692      * of the current row as a {@code java.sql.Date} object.
1693      *
1694      * @param columnName a {@code String} object giving the SQL name of
1695      *        a column in this {@code CachedRowSetImpl} object
1696      * @return the column value; if the value is SQL {@code NULL},
1697      *         the result is {@code null}
1698      * @throws SQLException if (1) the given column name is not the name of
1699      *            a column in this rowset, (2) the cursor is not on one of
1700      *            this rowset's rows or its insert row, or (3) the designated
1701      *            column does not store an SQL {@code DATE} or
1702      *            {@code TIMESTAMP} value
1703      */
1704     public java.sql.Date getDate(String columnName) throws SQLException {
1705         throw new UnsupportedOperationException();
1706     }
1707 
1708     /**
1709      * Retrieves the value stored in the designated column
1710      * of the current row as a {@code java.sql.Time} object.
1711      *
1712      * @param columnName a {@code String} object giving the SQL name of
1713      *        a column in this {@code CachedRowSetImpl} object
1714      * @return the column value; if the value is SQL {@code NULL},
1715      *         the result is {@code null}
1716      * @throws SQLException if the given column name does not match one of
1717      *            this rowset's column names or the cursor is not on one of
1718      *            this rowset's rows or its insert row
1719      */
1720     public java.sql.Time getTime(String columnName) throws SQLException {
1721         throw new UnsupportedOperationException();
1722     }
1723 
1724     /**
1725      * Retrieves the value stored in the designated column
1726      * of the current row as a {@code java.sql.Timestamp} object.
1727      *
1728      * @param columnName a {@code String} object giving the SQL name of
1729      *        a column in this {@code CachedRowSetImpl} object
1730      * @return the column value; if the value is SQL {@code NULL},
1731      *         the result is {@code null}
1732      * @throws SQLException if the given column name does not match one of
1733      *            this rowset's column names or the cursor is not on one of
1734      *            this rowset's rows or its insert row
1735      */
1736     public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
1737         throw new UnsupportedOperationException();
1738     }
1739 
1740     /**
1741      * Retrieves the value of the designated column in the current row of this
1742      * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
1743      * object.
1744      *
1745      * A column value can be retrieved as a stream of ASCII characters
1746      * and then read in chunks from the stream. This method is particularly
1747      * suitable for retrieving large {@code LONGVARCHAR} values. The
1748      * {@code SyncProvider} will rely on the JDBC driver to do any necessary
1749      * conversion from the database format into ASCII format.
1750      *
1751      * <P><B>Note:</B> All the data in the returned stream must
1752      * be read prior to getting the value of any other column. The
1753      * next call to a {@code getXXX} method implicitly closes the stream.
1754      *
1755      * @param columnName a {@code String} object giving the SQL name of
1756      *        a column in this {@code CachedRowSetImpl} object
1757      * @return a Java input stream that delivers the database column value
1758      *         as a stream of one-byte ASCII characters.  If the value is SQL
1759      *         {@code NULL}, the result is {@code null}.
1760      * @throws SQLException if (1) the given column name is not the name of
1761      *         a column in this rowset
1762      *         (2) the cursor is not on one of this rowset's rows or its
1763      *         insert row, or (3) the designated column does not store an
1764      *         SQL {@code CHAR, VARCHAR}, <b>{@code LONGVARCHAR}</b>,
1765      *         {@code BINARY, VARBINARY} or {@code LONGVARBINARY} value. The
1766      *         bold SQL type designates the recommended return types
1767      *         that this method is used to retrieve.
1768      * @see #getAsciiStream(int)
1769      */
1770     public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
1771         throw new UnsupportedOperationException();
1772 
1773     }
1774 
1775     /**
1776      * A column value can be retrieved as a stream of Unicode characters
1777      * and then read in chunks from the stream.  This method is particularly
1778      * suitable for retrieving large {@code LONGVARCHAR} values.
1779      * The JDBC driver will do any necessary conversion from the database
1780      * format into Unicode.
1781      *
1782      * <P><B>Note:</B> All the data in the returned stream must
1783      * be read prior to getting the value of any other column. The
1784      * next call to a {@code getXXX} method implicitly closes the stream.
1785      *
1786      * @param columnName a {@code String} object giving the SQL name of
1787      *        a column in this {@code CachedRowSetImpl} object
1788      * @return a Java input stream that delivers the database column value
1789      *         as a stream of two-byte Unicode characters.  If the value is
1790      *         SQL {@code NULL}, the result is {@code null}.
1791      * @throws SQLException if the given column name does not match one of
1792      *            this rowset's column names or the cursor is not on one of
1793      *            this rowset's rows or its insert row
1794      * @deprecated use the method {@code getCharacterStream} instead
1795      */
1796     @Deprecated
1797     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
1798         throw new UnsupportedOperationException();
1799     }
1800 
1801     /**
1802      * Retrieves the value of the designated column in the current row of this
1803      * {@code CachedRowSetImpl} object as a {@code java.io.InputStream}
1804      * object.
1805      * <P>
1806      * A column value can be retrieved as a stream of uninterpreted bytes
1807      * and then read in chunks from the stream.  This method is particularly
1808      * suitable for retrieving large {@code LONGVARBINARY} values.
1809      *
1810      * <P><B>Note:</B> All the data in the returned stream must be
1811      * read prior to getting the value of any other column. The next
1812      * call to a get method implicitly closes the stream. Also, a
1813      * stream may return {@code 0} for {@code CachedRowSetImpl.available()}
1814      * whether there is data available or not.
1815      *
1816      * @param columnName a {@code String} object giving the SQL name of
1817      *        a column in this {@code CachedRowSetImpl} object
1818      * @return a Java input stream that delivers the database column value
1819      *         as a stream of uninterpreted bytes.  If the value is SQL
1820      *         {@code NULL}, the result is {@code null}.
1821      * @throws SQLException if (1) the given column name is unknown,
1822      *         (2) the cursor is not on one of this rowset's rows or its
1823      *         insert row, or (3) the designated column does not store an
1824      *         SQL {@code BINARY, VARBINARY} or <b>{@code LONGVARBINARY}</b>
1825      *         The bold type indicates the SQL type that this method is recommened
1826      *         to retrieve.
1827      * @see #getBinaryStream(int)
1828      *
1829      */
1830     public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
1831         throw new UnsupportedOperationException();
1832     }
1833 
1834 
1835     //=====================================================================
1836     // Advanced features:
1837     //=====================================================================
1838 
1839     /**
1840      * The first warning reported by calls on this {@code CachedRowSetImpl}
1841      * object is returned. Subsequent {@code CachedRowSetImpl} warnings will
1842      * be chained to this {@code SQLWarning}.
1843      *
1844      * <P>The warning chain is automatically cleared each time a new
1845      * row is read.
1846      *
1847      * <P><B>Note:</B> This warning chain only covers warnings caused
1848      * by {@code ResultSet} methods.  Any warning caused by statement
1849      * methods (such as reading OUT parameters) will be chained on the
1850      * {@code Statement} object.
1851      *
1852      * @return the first SQLWarning or null
1853      */
1854     public SQLWarning getWarnings() {
1855         throw new UnsupportedOperationException();
1856     }
1857 
1858     /**
1859      * Clears all the warnings reporeted for the {@code CachedRowSetImpl}
1860      * object. After a call to this method, the {@code getWarnings} method
1861      * returns {@code null} until a new warning is reported for this
1862      * {@code CachedRowSetImpl} object.
1863      */
1864     public void clearWarnings() {
1865        throw new UnsupportedOperationException();
1866     }
1867 
1868     /**
1869      * Retrieves the name of the SQL cursor used by this
1870      * {@code CachedRowSetImpl} object.
1871      *
1872      * <P>In SQL, a result table is retrieved through a cursor that is
1873      * named. The current row of a {@code ResultSet} can be updated or deleted
1874      * using a positioned update/delete statement that references the
1875      * cursor name. To ensure that the cursor has the proper isolation
1876      * level to support an update operation, the cursor's {@code SELECT}
1877      * statement should be of the form {@code select for update}.
1878      * If the {@code for update} clause
1879      * is omitted, positioned updates may fail.
1880      *
1881      * <P>JDBC supports this SQL feature by providing the name of the
1882      * SQL cursor used by a {@code ResultSet} object. The current row
1883      * of a result set is also the current row of this SQL cursor.
1884      *
1885      * <P><B>Note:</B> If positioned updates are not supported, an
1886      * {@code SQLException} is thrown.
1887      *
1888      * @return the SQL cursor name for this {@code CachedRowSetImpl} object's
1889      *         cursor
1890      * @throws SQLException if an error occurs
1891      */
1892     public String getCursorName() throws SQLException {
1893         throw new UnsupportedOperationException();
1894     }
1895 
1896     /**
1897      * Retrieves a {@code ResultSetMetaData} object instance that
1898      * contains information about the {@code CachedRowSet} object.
1899      * However, applications should cast the returned object to a
1900      * {@code RowSetMetaData} interface implementation. In the
1901      * reference implementation, this cast can be done on the
1902      * {@code RowSetMetaDataImpl} class.
1903      * <P>
1904      * For example:
1905      * <pre>
1906      * CachedRowSet crs = new CachedRowSetImpl();
1907      * RowSetMetaDataImpl metaData =
1908      *     (RowSetMetaDataImpl)crs.getMetaData();
1909      * // Set the number of columns in the RowSet object for
1910      * // which this RowSetMetaDataImpl object was created to the
1911      * // given number.
1912      * metaData.setColumnCount(3);
1913      * crs.setMetaData(metaData);
1914      * </pre>
1915      *
1916      * @return the {@code ResultSetMetaData} object that describes this
1917      *         {@code CachedRowSetImpl} object's columns
1918      * @throws SQLException if an error occurs in generating the RowSet
1919      * meta data; or if the {@code CachedRowSetImpl} is empty.
1920      * @see javax.sql.RowSetMetaData
1921      */
1922     public ResultSetMetaData getMetaData() throws SQLException {
1923         throw new UnsupportedOperationException();
1924     }
1925 
1926 
1927     /**
1928      * Retrieves the value of the designated column in the current row
1929      * of this {@code CachedRowSetImpl} object as an
1930      * {@code Object} value.
1931      * <P>
1932      * The type of the {@code Object} will be the default
1933      * Java object type corresponding to the column's SQL type,
1934      * following the mapping for built-in types specified in the JDBC 3.0
1935      * specification.
1936      * <P>
1937      * This method may also be used to read datatabase-specific
1938      * abstract data types.
1939      * <P>
1940      * This implementation of the method {@code getObject} extends its
1941      * behavior so that it gets the attributes of an SQL structured type
1942      * as an array of {@code Object} values.  This method also custom
1943      * maps SQL user-defined types to classes in the Java programming language.
1944      * When the specified column contains
1945      * a structured or distinct value, the behavior of this method is as
1946      * if it were a call to the method {@code getObject(columnIndex,
1947      * this.getStatement().getConnection().getTypeMap())}.
1948      *
1949      * @param columnIndex the first column is {@code 1}, the second
1950      *        is {@code 2}, and so on; must be {@code 1} or larger
1951      *        and equal to or less than the number of columns in the rowset
1952      * @return a {@code java.lang.Object} holding the column value;
1953      *         if the value is SQL {@code NULL}, the result is {@code null}
1954      * @throws SQLException if the given column index is out of bounds,
1955      *            the cursor is not on a valid row, or there is a problem getting
1956      *            the {@code Class} object for a custom mapping
1957      * @see #getObject(String)
1958      */
1959     public Object getObject(int columnIndex) throws SQLException {
1960         throw new UnsupportedOperationException();
1961     }
1962 
1963     /**
1964      * Retrieves the value of the designated column in the current row
1965      * of this {@code CachedRowSetImpl} object as an
1966      * {@code Object} value.
1967      * <P>
1968      * The type of the {@code Object} will be the default
1969      * Java object type corresponding to the column's SQL type,
1970      * following the mapping for built-in types specified in the JDBC 3.0
1971      * specification.
1972      * <P>
1973      * This method may also be used to read datatabase-specific
1974      * abstract data types.
1975      * <P>
1976      * This implementation of the method {@code getObject} extends its
1977      * behavior so that it gets the attributes of an SQL structured type
1978      * as an array of {@code Object} values.  This method also custom
1979      * maps SQL user-defined types to classes
1980      * in the Java programming language. When the specified column contains
1981      * a structured or distinct value, the behavior of this method is as
1982      * if it were a call to the method {@code getObject(columnIndex,
1983      * this.getStatement().getConnection().getTypeMap())}.
1984      *
1985      * @param columnName a {@code String} object that must match the
1986      *        SQL name of a column in this rowset, ignoring case
1987      * @return a {@code java.lang.Object} holding the column value;
1988      *         if the value is SQL {@code NULL}, the result is {@code null}
1989      * @throws SQLException if (1) the given column name does not match one of
1990      *            this rowset's column names, (2) the cursor is not
1991      *            on a valid row, or (3) there is a problem getting
1992      *            the {@code Class} object for a custom mapping
1993      * @see #getObject(int)
1994      */
1995     public Object getObject(String columnName) throws SQLException {
1996        throw new UnsupportedOperationException();
1997     }
1998 
1999     //----------------------------------------------------------------
2000 
2001     /**
2002      * Maps the given column name for one of this {@code CachedRowSetImpl}
2003      * object's columns to its column number.
2004      *
2005      * @param columnName a {@code String} object that must match the
2006      *        SQL name of a column in this rowset, ignoring case
2007      * @return the column index of the given column name
2008      * @throws SQLException if the given column name does not match one
2009      *            of this rowset's column names
2010      */
2011     public int findColumn(String columnName) throws SQLException {
2012        throw new UnsupportedOperationException();
2013     }
2014 
2015     //--------------------------JDBC 2.0-----------------------------------
2016 
2017     //---------------------------------------------------------------------
2018     // Getter's and Setter's
2019     //---------------------------------------------------------------------
2020 
2021     /**
2022      * Retrieves the value stored in the designated column
2023      * of the current row as a {@code java.io.Reader} object.
2024      *
2025      * <P><B>Note:</B> All the data in the returned stream must
2026      * be read prior to getting the value of any other column. The
2027      * next call to a {@code getXXX} method implicitly closes the stream.
2028      *
2029      * @param columnIndex the first column is {@code 1}, the second
2030      *        is {@code 2}, and so on; must be {@code 1} or larger
2031      *        and equal to or less than the number of columns in the rowset
2032      * @return a Java character stream that delivers the database column value
2033      * as a stream of two-byte unicode characters in a
2034      * {@code java.io.Reader} object.  If the value is
2035      * SQL {@code NULL}, the result is {@code null}.
2036      * @throws SQLException if (1) the given column index is out of bounds,
2037      *         (2) the cursor is not on one of this rowset's rows or its
2038      *         insert row, or (3) the designated column does not store an
2039      *         SQL {@code CHAR, VARCHAR,} <b>{@code LONGVARCHAR}</b>,
2040      *         {@code BINARY, VARBINARY} or {@code LONGVARBINARY} value.
2041      *         The bold SQL type designates the recommended return type.
2042      * @see #getCharacterStream(String)
2043      */
2044     public java.io.Reader getCharacterStream(int columnIndex) throws SQLException{
2045         throw new UnsupportedOperationException();
2046     }
2047 
2048     /**
2049      * Retrieves the value stored in the designated column
2050      * of the current row as a {@code java.io.Reader} object.
2051      *
2052      * <P><B>Note:</B> All the data in the returned stream must
2053      * be read prior to getting the value of any other column. The
2054      * next call to a {@code getXXX} method implicitly closes the stream.
2055      *
2056      * @param columnName a {@code String} object giving the SQL name of
2057      *        a column in this {@code CachedRowSetImpl} object
2058      * @return a Java input stream that delivers the database column value
2059      *         as a stream of two-byte Unicode characters.  If the value is
2060      *         SQL {@code NULL}, the result is {@code null}.
2061      * @throws SQLException if (1) the given column name is not the name of
2062      *         a column in this rowset, (2) the cursor is not on one of
2063      *         this rowset's rows or its insert row, or (3) the designated
2064      *         column does not store an SQL {@code CHAR, VARCHAR,}
2065      *         <b>{@code LONGVARCHAR}</b>,
2066      *         {@code BINARY, VARYBINARY} or {@code LONGVARBINARY} value.
2067      *         The bold SQL type designates the recommended return type.
2068      */
2069     public java.io.Reader getCharacterStream(String columnName) throws SQLException {
2070         throw new UnsupportedOperationException();
2071     }
2072 
2073     /**
2074      * Retrieves the value of the designated column in the current row
2075      * of this {@code CachedRowSetImpl} object as a
2076      * {@code java.math.BigDecimal} object.
2077      *
2078      * @param columnIndex the first column is {@code 1}, the second
2079      *        is {@code 2}, and so on; must be {@code 1} or larger
2080      *        and equal to or less than the number of columns in the rowset
2081      * @return a {@code java.math.BigDecimal} value with full precision;
2082      *         if the value is SQL {@code NULL}, the result is {@code null}
2083      * @throws SQLException if (1) the given column index is out of bounds,
2084      *         (2) the cursor is not on one of this rowset's rows or its
2085      *         insert row, or (3) the designated column does not store an
2086      *         SQL {@code TINYINT, SMALLINT, INTEGER, BIGINT, REAL,
2087      *         FLOAT, DOUBLE,} <b>{@code DECIMAL, NUMERIC}</b>,
2088      *         {@code BIT, CHAR, VARCHAR} or {@code LONGVARCHAR} value.
2089      *         The bold SQL type designates the
2090      *         recommended return types that this method is used to retrieve.
2091      * @see #getBigDecimal(String)
2092      */
2093     public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
2094         throw new UnsupportedOperationException();
2095     }
2096 
2097     /**
2098      * Retrieves the value of the designated column in the current row
2099      * of this {@code CachedRowSetImpl} object as a
2100      * {@code java.math.BigDecimal} object.
2101      *
2102      * @param columnName a {@code String} object that must match the
2103      *        SQL name of a column in this rowset, ignoring case
2104      * @return a {@code java.math.BigDecimal} value with full precision;
2105      *         if the value is SQL {@code NULL}, the result is {@code null}
2106      * @throws SQLException if (1) the given column name is not the name of
2107      *         a column in this rowset, (2) the cursor is not on one of
2108      *         this rowset's rows or its insert row, or (3) the designated
2109      *         column does not store an SQL {@code TINYINT, SMALLINT, INTEGER,
2110      *         BIGINT, REAL, FLOAT, DOUBLE,} <b>{@code DECIMAL, NUMERIC}</b>,
2111      *         {@code BIT CHAR, VARCHAR} or {@code LONGVARCHAR} value.
2112      *         The bold SQL type designates the recommended return type
2113      *         that this method is used to retrieve.
2114      * @see #getBigDecimal(int)
2115      */
2116     public BigDecimal getBigDecimal(String columnName) throws SQLException {
2117         throw new UnsupportedOperationException();
2118     }
2119 
2120     //---------------------------------------------------------------------
2121     // Traversal/Positioning
2122     //---------------------------------------------------------------------
2123 
2124     /**
2125      * Returns the number of rows in this {@code CachedRowSetImpl} object.
2126      *
2127      * @return number of rows in the rowset
2128      */
2129     public int size() {
2130         throw new UnsupportedOperationException();
2131     }
2132 
2133     /**
2134      * Indicates whether the cursor is before the first row in this
2135      * {@code CachedRowSetImpl} object.
2136      *
2137      * @return {@code true} if the cursor is before the first row;
2138      *         {@code false} otherwise or if the rowset contains no rows
2139      * @throws SQLException if an error occurs
2140      */
2141     public boolean isBeforeFirst() throws SQLException {
2142         throw new UnsupportedOperationException();
2143     }
2144 
2145     /**
2146      * Indicates whether the cursor is after the last row in this
2147      * {@code CachedRowSetImpl} object.
2148      *
2149      * @return {@code true} if the cursor is after the last row;
2150      *         {@code false} otherwise or if the rowset contains no rows
2151      * @throws SQLException if an error occurs
2152      */
2153     public boolean isAfterLast() throws SQLException {
2154         throw new UnsupportedOperationException();
2155     }
2156 
2157     /**
2158      * Indicates whether the cursor is on the first row in this
2159      * {@code CachedRowSetImpl} object.
2160      *
2161      * @return {@code true} if the cursor is on the first row;
2162      *         {@code false} otherwise or if the rowset contains no rows
2163      * @throws SQLException if an error occurs
2164      */
2165     public boolean isFirst() throws SQLException {
2166         throw new UnsupportedOperationException();
2167     }
2168 
2169     /**
2170      * Indicates whether the cursor is on the last row in this
2171      * {@code CachedRowSetImpl} object.
2172      * <P>
2173      * Note: Calling the method {@code isLast} may be expensive
2174      * because the JDBC driver might need to fetch ahead one row in order
2175      * to determine whether the current row is the last row in this rowset.
2176      *
2177      * @return {@code true} if the cursor is on the last row;
2178      *         {@code false} otherwise or if this rowset contains no rows
2179      * @throws SQLException if an error occurs
2180      */
2181     public boolean isLast() throws SQLException {
2182         throw new UnsupportedOperationException();
2183     }
2184 
2185     /**
2186      * Moves this {@code CachedRowSetImpl} object's cursor to the front of
2187      * the rowset, just before the first row. This method has no effect if
2188      * this rowset contains no rows.
2189      *
2190      * @throws SQLException if an error occurs or the type of this rowset
2191      *            is {@code ResultSet.TYPE_FORWARD_ONLY}
2192      */
2193     public void beforeFirst() throws SQLException {
2194         throw new UnsupportedOperationException();
2195     }
2196 
2197     /**
2198      * Moves this {@code CachedRowSetImpl} object's cursor to the end of
2199      * the rowset, just after the last row. This method has no effect if
2200      * this rowset contains no rows.
2201      *
2202      * @throws SQLException if an error occurs
2203      */
2204     public void afterLast() throws SQLException {
2205         throw new UnsupportedOperationException();
2206     }
2207 
2208     /**
2209      * Moves this {@code CachedRowSetImpl} object's cursor to the first row
2210      * and returns {@code true} if the operation was successful.  This
2211      * method also notifies registered listeners that the cursor has moved.
2212      *
2213      * @return {@code true} if the cursor is on a valid row;
2214      *         {@code false} otherwise or if there are no rows in this
2215      *         {@code CachedRowSetImpl} object
2216      * @throws SQLException if the type of this rowset
2217      *            is {@code ResultSet.TYPE_FORWARD_ONLY}
2218      */
2219     public boolean first() throws SQLException {
2220         throw new UnsupportedOperationException();
2221     }
2222 
2223     /**
2224      * Moves this {@code CachedRowSetImpl} object's cursor to the first
2225      * row and returns {@code true} if the operation is successful.
2226      * <P>
2227      * This method is called internally by the methods {@code first},
2228      * {@code isFirst}, and {@code absolute}.
2229      * It in turn calls the method {@code internalNext} in order to
2230      * handle the case where the first row is a deleted row that is not visible.
2231      * <p>
2232      * This is a implementation only method and is not required as a standard
2233      * implementation of the {@code CachedRowSet} interface.
2234      *
2235      * @return {@code true} if the cursor moved to the first row;
2236      *         {@code false} otherwise
2237      * @throws SQLException if an error occurs
2238      */
2239     protected boolean internalFirst() throws SQLException {
2240         throw new UnsupportedOperationException();
2241     }
2242 
2243     /**
2244      * Moves this {@code CachedRowSetImpl} object's cursor to the last row
2245      * and returns {@code true} if the operation was successful.  This
2246      * method also notifies registered listeners that the cursor has moved.
2247      *
2248      * @return {@code true} if the cursor is on a valid row;
2249      *         {@code false} otherwise or if there are no rows in this
2250      *         {@code CachedRowSetImpl} object
2251      * @throws SQLException if the type of this rowset
2252      *            is {@code ResultSet.TYPE_FORWARD_ONLY}
2253      */
2254     public boolean last() throws SQLException {
2255         throw new UnsupportedOperationException();
2256     }
2257 
2258     /**
2259      * Moves this {@code CachedRowSetImpl} object's cursor to the last
2260      * row and returns {@code true} if the operation is successful.
2261      * <P>
2262      * This method is called internally by the method {@code last}
2263      * when rows have been deleted and the deletions are not visible.
2264      * The method {@code internalLast} handles the case where the
2265      * last row is a deleted row that is not visible by in turn calling
2266      * the method {@code internalPrevious}.
2267      * <p>
2268      * This is a implementation only method and is not required as a standard
2269      * implementation of the {@code CachedRowSet} interface.
2270      *
2271      * @return {@code true} if the cursor moved to the last row;
2272      *         {@code false} otherwise
2273      * @throws SQLException if an error occurs
2274      */
2275     protected boolean internalLast() throws SQLException {
2276         throw new UnsupportedOperationException();
2277     }
2278 
2279     /**
2280      * Returns the number of the current row in this {@code CachedRowSetImpl}
2281      * object. The first row is number 1, the second number 2, and so on.
2282      *
2283      * @return the number of the current row;  {@code 0} if there is no
2284      *         current row
2285      * @throws SQLException if an error occurs; or if the {@code CacheRowSetImpl}
2286      *         is empty
2287      */
2288     public int getRow() throws SQLException {
2289         return crsSync.getRow();
2290     }
2291 
2292     /**
2293      * Moves this {@code CachedRowSetImpl} object's cursor to the row number
2294      * specified.
2295      *
2296      * <p>If the number is positive, the cursor moves to an absolute row with
2297      * respect to the beginning of the rowset.  The first row is row 1, the second
2298      * is row 2, and so on.  For example, the following command, in which
2299      * {@code crs} is a {@code CachedRowSetImpl} object, moves the cursor
2300      * to the fourth row, starting from the beginning of the rowset.
2301      * <PRE>{@code
2302      *
2303      *    crs.absolute(4);
2304      *
2305      * }</PRE>
2306      * <P>
2307      * If the number is negative, the cursor moves to an absolute row position
2308      * with respect to the end of the rowset.  For example, calling
2309      * {@code absolute(-1)} positions the cursor on the last row,
2310      * {@code absolute(-2)} moves it on the next-to-last row, and so on.
2311      * If the {@code CachedRowSetImpl} object {@code crs} has five rows,
2312      * the following command moves the cursor to the fourth-to-last row, which
2313      * in the case of a  rowset with five rows, is also the second row, counting
2314      * from the beginning.
2315      * <PRE>{@code
2316      *
2317      *    crs.absolute(-4);
2318      *
2319      * }</PRE>
2320      *
2321      * If the number specified is larger than the number of rows, the cursor
2322      * will move to the position after the last row. If the number specified
2323      * would move the cursor one or more rows before the first row, the cursor
2324      * moves to the position before the first row.
2325      * <P>
2326      * Note: Calling {@code absolute(1)} is the same as calling the
2327      * method {@code first()}.  Calling {@code absolute(-1)} is the
2328      * same as calling {@code last()}.
2329      *
2330      * @param row a positive number to indicate the row, starting row numbering from
2331      *        the first row, which is {@code 1}; a negative number to indicate
2332      *        the row, starting row numbering from the last row, which is
2333      *        {@code -1}; it must not be {@code 0}
2334      * @return {@code true} if the cursor is on the rowset; {@code false}
2335      *         otherwise
2336      * @throws SQLException if the given cursor position is {@code 0} or the
2337      *            type of this rowset is {@code ResultSet.TYPE_FORWARD_ONLY}
2338      */
2339     public boolean absolute( int row ) throws SQLException {
2340         throw new UnsupportedOperationException();
2341     }
2342 
2343     /**
2344      * Moves the cursor the specified number of rows from the current
2345      * position, with a positive number moving it forward and a
2346      * negative number moving it backward.
2347      * <P>
2348      * If the number is positive, the cursor moves the specified number of
2349      * rows toward the end of the rowset, starting at the current row.
2350      * For example, the following command, in which
2351      * {@code crs} is a {@code CachedRowSetImpl} object with 100 rows,
2352      * moves the cursor forward four rows from the current row.  If the
2353      * current row is 50, the cursor would move to row 54.
2354      * <PRE>{@code
2355      *
2356      *    crs.relative(4);
2357      *
2358      * }</PRE>
2359      * <P>
2360      * If the number is negative, the cursor moves back toward the beginning
2361      * the specified number of rows, starting at the current row.
2362      * For example, calling the method
2363      * {@code absolute(-1)} positions the cursor on the last row,
2364      * {@code absolute(-2)} moves it on the next-to-last row, and so on.
2365      * If the {@code CachedRowSetImpl} object {@code crs} has five rows,
2366      * the following command moves the cursor to the fourth-to-last row, which
2367      * in the case of a  rowset with five rows, is also the second row
2368      * from the beginning.
2369      * <PRE>{@code
2370      *
2371      *    crs.absolute(-4);
2372      *
2373      * }</PRE>
2374      *
2375      * If the number specified is larger than the number of rows, the cursor
2376      * will move to the position after the last row. If the number specified
2377      * would move the cursor one or more rows before the first row, the cursor
2378      * moves to the position before the first row. In both cases, this method
2379      * throws an {@code SQLException}.
2380      * <P>
2381      * Note: Calling {@code absolute(1)} is the same as calling the
2382      * method {@code first()}.  Calling {@code absolute(-1)} is the
2383      * same as calling {@code last()}.  Calling {@code relative(0)}
2384      * is valid, but it does not change the cursor position.
2385      *
2386      * @param rows an {@code int} indicating the number of rows to move
2387      *             the cursor, starting at the current row; a positive number
2388      *             moves the cursor forward; a negative number moves the cursor
2389      *             backward; must not move the cursor past the valid
2390      *             rows
2391      * @return {@code true} if the cursor is on a row in this
2392      *         {@code CachedRowSetImpl} object; {@code false}
2393      *         otherwise
2394      * @throws SQLException if there are no rows in this rowset, the cursor is
2395      *         positioned either before the first row or after the last row, or
2396      *         the rowset is type {@code ResultSet.TYPE_FORWARD_ONLY}
2397      */
2398     public boolean relative(int rows) throws SQLException {
2399         throw new UnsupportedOperationException();
2400     }
2401 
2402     /**
2403      * Moves this {@code CachedRowSetImpl} object's cursor to the
2404      * previous row and returns {@code true} if the cursor is on
2405      * a valid row or {@code false} if it is not.
2406      * This method also notifies all listeners registered with this
2407      * {@code CachedRowSetImpl} object that its cursor has moved.
2408      * <P>
2409      * Note: calling the method {@code previous()} is not the same
2410      * as calling the method {@code relative(-1)}.  This is true
2411      * because it is possible to call {@code previous()} from the insert
2412      * row, from after the last row, or from the current row, whereas
2413      * {@code relative} may only be called from the current row.
2414      * <P>
2415      * The method {@code previous} may used in a {@code while}
2416      * loop to iterate through a rowset starting after the last row
2417      * and moving toward the beginning. The loop ends when {@code previous}
2418      * returns {@code false}, meaning that there are no more rows.
2419      * For example, the following code fragment retrieves all the data in
2420      * the {@code CachedRowSetImpl} object {@code crs}, which has
2421      * three columns.  Note that the cursor must initially be positioned
2422      * after the last row so that the first call to the method
2423      * {@code previous} places the cursor on the last line.
2424      * <PRE>{@code
2425      *
2426      *     crs.afterLast();
2427      *     while (previous()) {
2428      *         String name = crs.getString(1);
2429      *         int age = crs.getInt(2);
2430      *         short ssn = crs.getShort(3);
2431      *         System.out.println(name + "   " + age + "   " + ssn);
2432      *     }
2433      *
2434      * }</PRE>
2435      * This method throws an {@code SQLException} if the cursor is not
2436      * on a row in the rowset, before the first row, or after the last row.
2437      *
2438      * @return {@code true} if the cursor is on a valid row;
2439      *         {@code false} if it is before the first row or after the
2440      *         last row
2441      * @throws SQLException if the cursor is not on a valid position or the
2442      *           type of this rowset is {@code ResultSet.TYPE_FORWARD_ONLY}
2443      */
2444     public boolean previous() throws SQLException {
2445         throw new UnsupportedOperationException();
2446     }
2447 
2448     /**
2449      * Moves the cursor to the previous row in this {@code CachedRowSetImpl}
2450      * object, skipping past deleted rows that are not visible; returns
2451      * {@code true} if the cursor is on a row in this rowset and
2452      * {@code false} when the cursor goes before the first row.
2453      * <P>
2454      * This method is called internally by the method {@code previous}.
2455      * <P>
2456      * This is a implementation only method and is not required as a standard
2457      * implementation of the {@code CachedRowSet} interface.
2458      *
2459      * @return {@code true} if the cursor is on a row in this rowset;
2460      *         {@code false} when the cursor reaches the position before
2461      *         the first row
2462      * @throws SQLException if an error occurs
2463      */
2464     protected boolean internalPrevious() throws SQLException {
2465         throw new UnsupportedOperationException();
2466     }
2467 
2468 
2469     //---------------------------------------------------------------------
2470     // Updates
2471     //---------------------------------------------------------------------
2472 
2473     /**
2474      * Indicates whether the current row of this {@code CachedRowSetImpl}
2475      * object has been updated.  The value returned
2476      * depends on whether this rowset can detect updates: {@code false}
2477      * will always be returned if it does not detect updates.
2478      *
2479      * @return {@code true} if the row has been visibly updated
2480      *         by the owner or another and updates are detected;
2481      *         {@code false} otherwise
2482      * @throws SQLException if the cursor is on the insert row or not
2483      *            not on a valid row
2484      *
2485      * @see DatabaseMetaData#updatesAreDetected
2486      */
2487     public boolean rowUpdated() throws SQLException {
2488         throw new UnsupportedOperationException();
2489     }
2490 
2491     /**
2492      * Indicates whether the designated column of the current row of
2493      * this {@code CachedRowSetImpl} object has been updated. The
2494      * value returned depends on whether this rowset can detcted updates:
2495      * {@code false} will always be returned if it does not detect updates.
2496      *
2497      * @param idx the index identifier of the column that may be have been updated.
2498      * @return {@code true} is the designated column has been updated
2499      * and the rowset detects updates; {@code false} if the rowset has not
2500      * been updated or the rowset does not detect updates
2501      * @throws SQLException if the cursor is on the insert row or not
2502      *          on a valid row
2503      * @see DatabaseMetaData#updatesAreDetected
2504      */
2505     public boolean columnUpdated(int idx) throws SQLException {
2506         throw new UnsupportedOperationException();
2507     }
2508 
2509     /**
2510      * Indicates whether the designated column of the current row of
2511      * this {@code CachedRowSetImpl} object has been updated. The
2512      * value returned depends on whether this rowset can detcted updates:
2513      * {@code false} will always be returned if it does not detect updates.
2514      *
2515      * @param columnName the {@code String} column name column that may be have
2516      * been updated.
2517      * @return {@code true} is the designated column has been updated
2518      * and the rowset detects updates; {@code false} if the rowset has not
2519      * been updated or the rowset does not detect updates
2520      * @throws SQLException if the cursor is on the insert row or not
2521      *          on a valid row
2522      * @see DatabaseMetaData#updatesAreDetected
2523      */
2524     public boolean columnUpdated(String columnName) throws SQLException {
2525         throw new UnsupportedOperationException();
2526     }
2527 
2528     /**
2529      * Indicates whether the current row has been inserted.  The value returned
2530      * depends on whether or not the rowset can detect visible inserts.
2531      *
2532      * @return {@code true} if a row has been inserted and inserts are detected;
2533      *         {@code false} otherwise
2534      * @throws SQLException if the cursor is on the insert row or not
2535      *            not on a valid row
2536      *
2537      * @see DatabaseMetaData#insertsAreDetected
2538      */
2539     public boolean rowInserted() throws SQLException {
2540         throw new UnsupportedOperationException();
2541     }
2542 
2543     /**
2544      * Indicates whether the current row has been deleted.  A deleted row
2545      * may leave a visible "hole" in a rowset.  This method can be used to
2546      * detect such holes if the rowset can detect deletions. This method
2547      * will always return {@code false} if this rowset cannot detect
2548      * deletions.
2549      *
2550      * @return {@code true} if (1)the current row is blank, indicating that
2551      *         the row has been deleted, and (2)deletions are detected;
2552      *         {@code false} otherwise
2553      * @throws SQLException if the cursor is on a valid row in this rowset
2554      * @see DatabaseMetaData#deletesAreDetected
2555      */
2556     public boolean rowDeleted() throws SQLException {
2557         throw new UnsupportedOperationException();
2558     }
2559 
2560     /**
2561      * Sets the designated nullable column in the current row or the
2562      * insert row of this {@code CachedRowSetImpl} object with
2563      * {@code null} value.
2564      * <P>
2565      * This method updates a column value in the current row or the insert
2566      * row of this rowset; however, another method must be called to complete
2567      * the update process. If the cursor is on a row in the rowset, the
2568      * method {@link #updateRow} must be called to mark the row as updated
2569      * and to notify listeners that the row has changed.
2570      * If the cursor is on the insert row, the method {@link #insertRow}
2571      * must be called to insert the new row into this rowset and to notify
2572      * listeners that a row has changed.
2573      * <P>
2574      * In order to propagate updates in this rowset to the underlying
2575      * data source, an application must call the method {@link #acceptChanges}
2576      * after it calls either {@code updateRow} or {@code insertRow}.
2577      *
2578      * @param columnIndex the first column is {@code 1}, the second
2579      *        is {@code 2}, and so on; must be {@code 1} or larger
2580      *        and equal to or less than the number of columns in this rowset
2581      * @throws SQLException if (1) the given column index is out of bounds,
2582      *            (2) the cursor is not on one of this rowset's rows or its
2583      *            insert row, or (3) this rowset is
2584      *            {@code ResultSet.CONCUR_READ_ONLY}
2585      */
2586     public void updateNull(int columnIndex) throws SQLException {
2587         throw new UnsupportedOperationException();
2588     }
2589 
2590     /**
2591      * Sets the designated column in either the current row or the insert
2592      * row of this {@code CachedRowSetImpl} object with the given
2593      * {@code boolean} value.
2594      * <P>
2595      * This method updates a column value in the current row or the insert
2596      * row of this rowset, but it does not update the database.
2597      * If the cursor is on a row in the rowset, the
2598      * method {@link #updateRow} must be called to update the database.
2599      * If the cursor is on the insert row, the method {@link #insertRow}
2600      * must be called, which will insert the new row into both this rowset
2601      * and the database. Both of these methods must be called before the
2602      * cursor moves to another row.
2603      *
2604      * @param columnIndex the first column is {@code 1}, the second
2605      *        is {@code 2}, and so on; must be {@code 1} or larger
2606      *        and equal to or less than the number of columns in this rowset
2607      * @param x the new column value
2608      * @throws SQLException if (1) the given column index is out of bounds,
2609      *            (2) the cursor is not on one of this rowset's rows or its
2610      *            insert row, or (3) this rowset is
2611      *            {@code ResultSet.CONCUR_READ_ONLY}
2612      */
2613     public void updateBoolean(int columnIndex, boolean x) throws SQLException {
2614         throw new UnsupportedOperationException();
2615     }
2616 
2617     /**
2618      * Sets the designated column in either the current row or the insert
2619      * row of this {@code CachedRowSetImpl} object with the given
2620      * {@code byte} value.
2621      * <P>
2622      * This method updates a column value in the current row or the insert
2623      * row of this rowset, but it does not update the database.
2624      * If the cursor is on a row in the rowset, the
2625      * method {@link #updateRow} must be called to update the database.
2626      * If the cursor is on the insert row, the method {@link #insertRow}
2627      * must be called, which will insert the new row into both this rowset
2628      * and the database. Both of these methods must be called before the
2629      * cursor moves to another row.
2630      *
2631      * @param columnIndex the first column is {@code 1}, the second
2632      *        is {@code 2}, and so on; must be {@code 1} or larger
2633      *        and equal to or less than the number of columns in this rowset
2634      * @param x the new column value
2635      * @throws SQLException if (1) the given column index is out of bounds,
2636      *            (2) the cursor is not on one of this rowset's rows or its
2637      *            insert row, or (3) this rowset is
2638      *            {@code ResultSet.CONCUR_READ_ONLY}
2639      */
2640     public void updateByte(int columnIndex, byte x) throws SQLException {
2641         throw new UnsupportedOperationException();
2642     }
2643 
2644     /**
2645      * Sets the designated column in either the current row or the insert
2646      * row of this {@code CachedRowSetImpl} object with the given
2647      * {@code short} value.
2648      * <P>
2649      * This method updates a column value in the current row or the insert
2650      * row of this rowset, but it does not update the database.
2651      * If the cursor is on a row in the rowset, the
2652      * method {@link #updateRow} must be called to update the database.
2653      * If the cursor is on the insert row, the method {@link #insertRow}
2654      * must be called, which will insert the new row into both this rowset
2655      * and the database. Both of these methods must be called before the
2656      * cursor moves to another row.
2657      *
2658      * @param columnIndex the first column is {@code 1}, the second
2659      *        is {@code 2}, and so on; must be {@code 1} or larger
2660      *        and equal to or less than the number of columns in this rowset
2661      * @param x the new column value
2662      * @throws SQLException if (1) the given column index is out of bounds,
2663      *            (2) the cursor is not on one of this rowset's rows or its
2664      *            insert row, or (3) this rowset is
2665      *            {@code ResultSet.CONCUR_READ_ONLY}
2666      */
2667     public void updateShort(int columnIndex, short x) throws SQLException {
2668         throw new UnsupportedOperationException();
2669     }
2670 
2671     /**
2672      * Sets the designated column in either the current row or the insert
2673      * row of this {@code CachedRowSetImpl} object with the given
2674      * {@code int} value.
2675      * <P>
2676      * This method updates a column value in the current row or the insert
2677      * row of this rowset, but it does not update the database.
2678      * If the cursor is on a row in the rowset, the
2679      * method {@link #updateRow} must be called to update the database.
2680      * If the cursor is on the insert row, the method {@link #insertRow}
2681      * must be called, which will insert the new row into both this rowset
2682      * and the database. Both of these methods must be called before the
2683      * cursor moves to another row.
2684      *
2685      * @param columnIndex the first column is {@code 1}, the second
2686      *        is {@code 2}, and so on; must be {@code 1} or larger
2687      *        and equal to or less than the number of columns in this rowset
2688      * @param x the new column value
2689      * @throws SQLException if (1) the given column index is out of bounds,
2690      *            (2) the cursor is not on one of this rowset's rows or its
2691      *            insert row, or (3) this rowset is
2692      *            {@code ResultSet.CONCUR_READ_ONLY}
2693      */
2694     public void updateInt(int columnIndex, int x) throws SQLException {
2695         throw new UnsupportedOperationException();
2696     }
2697 
2698     /**
2699      * Sets the designated column in either the current row or the insert
2700      * row of this {@code CachedRowSetImpl} object with the given
2701      * {@code long} value.
2702      * <P>
2703      * This method updates a column value in the current row or the insert
2704      * row of this rowset, but it does not update the database.
2705      * If the cursor is on a row in the rowset, the
2706      * method {@link #updateRow} must be called to update the database.
2707      * If the cursor is on the insert row, the method {@link #insertRow}
2708      * must be called, which will insert the new row into both this rowset
2709      * and the database. Both of these methods must be called before the
2710      * cursor moves to another row.
2711      *
2712      * @param columnIndex the first column is {@code 1}, the second
2713      *        is {@code 2}, and so on; must be {@code 1} or larger
2714      *        and equal to or less than the number of columns in this rowset
2715      * @param x the new column value
2716      * @throws SQLException if (1) the given column index is out of bounds,
2717      *            (2) the cursor is not on one of this rowset's rows or its
2718      *            insert row, or (3) this rowset is
2719      *            {@code ResultSet.CONCUR_READ_ONLY}
2720      */
2721     public void updateLong(int columnIndex, long x) throws SQLException {
2722        throw new UnsupportedOperationException();
2723 
2724     }
2725 
2726     /**
2727      * Sets the designated column in either the current row or the insert
2728      * row of this {@code CachedRowSetImpl} object with the given
2729      * {@code float} value.
2730      * <P>
2731      * This method updates a column value in the current row or the insert
2732      * row of this rowset, but it does not update the database.
2733      * If the cursor is on a row in the rowset, the
2734      * method {@link #updateRow} must be called to update the database.
2735      * If the cursor is on the insert row, the method {@link #insertRow}
2736      * must be called, which will insert the new row into both this rowset
2737      * and the database. Both of these methods must be called before the
2738      * cursor moves to another row.
2739      *
2740      * @param columnIndex the first column is {@code 1}, the second
2741      *        is {@code 2}, and so on; must be {@code 1} or larger
2742      *        and equal to or less than the number of columns in this rowset
2743      * @param x the new column value
2744      * @throws SQLException if (1) the given column index is out of bounds,
2745      *            (2) the cursor is not on one of this rowset's rows or its
2746      *            insert row, or (3) this rowset is
2747      *            {@code ResultSet.CONCUR_READ_ONLY}
2748      */
2749     public void updateFloat(int columnIndex, float x) throws SQLException {
2750         throw new UnsupportedOperationException();
2751     }
2752 
2753     /**
2754      * Sets the designated column in either the current row or the insert
2755      * row of this {@code CachedRowSetImpl} object with the given
2756      * {@code double} value.
2757      *
2758      * This method updates a column value in either the current row or
2759      * the insert row of this rowset, but it does not update the
2760      * database.  If the cursor is on a row in the rowset, the
2761      * method {@link #updateRow} must be called to update the database.
2762      * If the cursor is on the insert row, the method {@link #insertRow}
2763      * must be called, which will insert the new row into both this rowset
2764      * and the database. Both of these methods must be called before the
2765      * cursor moves to another row.
2766      *
2767      * @param columnIndex the first column is {@code 1}, the second
2768      *        is {@code 2}, and so on; must be {@code 1} or larger
2769      *        and equal to or less than the number of columns in this rowset
2770      * @param x the new column value
2771      * @throws SQLException if (1) the given column index is out of bounds,
2772      *            (2) the cursor is not on one of this rowset's rows or its
2773      *            insert row, or (3) this rowset is
2774      *            {@code ResultSet.CONCUR_READ_ONLY}
2775      */
2776     public void updateDouble(int columnIndex, double x) throws SQLException {
2777         throw new UnsupportedOperationException();
2778     }
2779 
2780     /**
2781      * Sets the designated column in either the current row or the insert
2782      * row of this {@code CachedRowSetImpl} object with the given
2783      * {@code java.math.BigDecimal} object.
2784      * <P>
2785      * This method updates a column value in the current row or the insert
2786      * row of this rowset, but it does not update the database.
2787      * If the cursor is on a row in the rowset, the
2788      * method {@link #updateRow} must be called to update the database.
2789      * If the cursor is on the insert row, the method {@link #insertRow}
2790      * must be called, which will insert the new row into both this rowset
2791      * and the database. Both of these methods must be called before the
2792      * cursor moves to another row.
2793      *
2794      * @param columnIndex the first column is {@code 1}, the second
2795      *        is {@code 2}, and so on; must be {@code 1} or larger
2796      *        and equal to or less than the number of columns in this rowset
2797      * @param x the new column value
2798      * @throws SQLException if (1) the given column index is out of bounds,
2799      *            (2) the cursor is not on one of this rowset's rows or its
2800      *            insert row, or (3) this rowset is
2801      *            {@code ResultSet.CONCUR_READ_ONLY}
2802      */
2803     public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
2804         throw new UnsupportedOperationException();
2805     }
2806 
2807     /**
2808      * Sets the designated column in either the current row or the insert
2809      * row of this {@code CachedRowSetImpl} object with the given
2810      * {@code String} object.
2811      * <P>
2812      * This method updates a column value in either the current row or
2813      * the insert row of this rowset, but it does not update the
2814      * database.  If the cursor is on a row in the rowset, the
2815      * method {@link #updateRow} must be called to mark the row as updated.
2816      * If the cursor is on the insert row, the method {@link #insertRow}
2817      * must be called to insert the new row into this rowset and mark it
2818      * as inserted. Both of these methods must be called before the
2819      * cursor moves to another row.
2820      * <P>
2821      * The method {@code acceptChanges} must be called if the
2822      * updated values are to be written back to the underlying database.
2823      *
2824      * @param columnIndex the first column is {@code 1}, the second
2825      *        is {@code 2}, and so on; must be {@code 1} or larger
2826      *        and equal to or less than the number of columns in this rowset
2827      * @param x the new column value
2828      * @throws SQLException if (1) the given column index is out of bounds,
2829      *            (2) the cursor is not on one of this rowset's rows or its
2830      *            insert row, or (3) this rowset is
2831      *            {@code ResultSet.CONCUR_READ_ONLY}
2832      */
2833     public void updateString(int columnIndex, String x) throws SQLException {
2834         throw new UnsupportedOperationException();
2835     }
2836 
2837     /**
2838      * Sets the designated column in either the current row or the insert
2839      * row of this {@code CachedRowSetImpl} object with the given
2840      * {@code byte} array.
2841      *
2842      * This method updates a column value in either the current row or
2843      * the insert row of this rowset, but it does not update the
2844      * database.  If the cursor is on a row in the rowset, the
2845      * method {@link #updateRow} must be called to update the database.
2846      * If the cursor is on the insert row, the method {@link #insertRow}
2847      * must be called, which will insert the new row into both this rowset
2848      * and the database. Both of these methods must be called before the
2849      * cursor moves to another row.
2850      *
2851      * @param columnIndex the first column is {@code 1}, the second
2852      *        is {@code 2}, and so on; must be {@code 1} or larger
2853      *        and equal to or less than the number of columns in this rowset
2854      * @param x the new column value
2855      * @throws SQLException if (1) the given column index is out of bounds,
2856      *            (2) the cursor is not on one of this rowset's rows or its
2857      *            insert row, or (3) this rowset is
2858      *            {@code ResultSet.CONCUR_READ_ONLY}
2859      */
2860     public void updateBytes(int columnIndex, byte x[]) throws SQLException {
2861         throw new UnsupportedOperationException();
2862     }
2863 
2864     /**
2865      * Sets the designated column in either the current row or the insert
2866      * row of this {@code CachedRowSetImpl} object with the given
2867      * {@code Date} object.
2868      *
2869      * This method updates a column value in either the current row or
2870      * the insert row of this rowset, but it does not update the
2871      * database.  If the cursor is on a row in the rowset, the
2872      * method {@link #updateRow} must be called to update the database.
2873      * If the cursor is on the insert row, the method {@link #insertRow}
2874      * must be called, which will insert the new row into both this rowset
2875      * and the database. Both of these methods must be called before the
2876      * cursor moves to another row.
2877      *
2878      * @param columnIndex the first column is {@code 1}, the second
2879      *        is {@code 2}, and so on; must be {@code 1} or larger
2880      *        and equal to or less than the number of columns in this rowset
2881      * @param x the new column value
2882      * @throws SQLException if (1) the given column index is out of bounds,
2883      *            (2) the cursor is not on one of this rowset's rows or its
2884      *            insert row, (3) the type of the designated column is not
2885      *            an SQL {@code DATE} or {@code TIMESTAMP}, or
2886      *            (4) this rowset is {@code ResultSet.CONCUR_READ_ONLY}
2887      */
2888     public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
2889         throw new UnsupportedOperationException();
2890     }
2891 
2892     /**
2893      * Sets the designated column in either the current row or the insert
2894      * row of this {@code CachedRowSetImpl} object with the given
2895      * {@code Time} object.
2896      *
2897      * This method updates a column value in either the current row or
2898      * the insert row of this rowset, but it does not update the
2899      * database.  If the cursor is on a row in the rowset, the
2900      * method {@link #updateRow} must be called to update the database.
2901      * If the cursor is on the insert row, the method {@link #insertRow}
2902      * must be called, which will insert the new row into both this rowset
2903      * and the database. Both of these methods must be called before the
2904      * cursor moves to another row.
2905      *
2906      * @param columnIndex the first column is {@code 1}, the second
2907      *        is {@code 2}, and so on; must be {@code 1} or larger
2908      *        and equal to or less than the number of columns in this rowset
2909      * @param x the new column value
2910      * @throws SQLException if (1) the given column index is out of bounds,
2911      *            (2) the cursor is not on one of this rowset's rows or its
2912      *            insert row, (3) the type of the designated column is not
2913      *            an SQL {@code TIME} or {@code TIMESTAMP}, or
2914      *            (4) this rowset is {@code ResultSet.CONCUR_READ_ONLY}
2915      */
2916     public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
2917        throw new UnsupportedOperationException();
2918     }
2919 
2920     /**
2921      * Sets the designated column in either the current row or the insert
2922      * row of this {@code CachedRowSetImpl} object with the given
2923      * {@code Timestamp} object.
2924      *
2925      * This method updates a column value in either the current row or
2926      * the insert row of this rowset, but it does not update the
2927      * database.  If the cursor is on a row in the rowset, the
2928      * method {@link #updateRow} must be called to update the database.
2929      * If the cursor is on the insert row, the method {@link #insertRow}
2930      * must be called, which will insert the new row into both this rowset
2931      * and the database. Both of these methods must be called before the
2932      * cursor moves to another row.
2933      *
2934      * @param columnIndex the first column is {@code 1}, the second
2935      *        is {@code 2}, and so on; must be {@code 1} or larger
2936      *        and equal to or less than the number of columns in this rowset
2937      * @param x the new column value
2938      * @throws SQLException if (1) the given column index is out of bounds,
2939      *            (2) the cursor is not on one of this rowset's rows or its
2940      *            insert row, (3) the type of the designated column is not
2941      *            an SQL {@code DATE}, {@code TIME}, or
2942      *            {@code TIMESTAMP}, or (4) this rowset is
2943      *            {@code ResultSet.CONCUR_READ_ONLY}
2944      */
2945     public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
2946         throw new UnsupportedOperationException();
2947     }
2948 
2949     /**
2950      * Sets the designated column in either the current row or the insert
2951      * row of this {@code CachedRowSetImpl} object with the given
2952      * ASCII stream value.
2953      * <P>
2954      * This method updates a column value in either the current row or
2955      * the insert row of this rowset, but it does not update the
2956      * database.  If the cursor is on a row in the rowset, the
2957      * method {@link #updateRow} must be called to update the database.
2958      * If the cursor is on the insert row, the method {@link #insertRow}
2959      * must be called, which will insert the new row into both this rowset
2960      * and the database. Both of these methods must be called before the
2961      * cursor moves to another row.
2962      *
2963      * @param columnIndex the first column is {@code 1}, the second
2964      *        is {@code 2}, and so on; must be {@code 1} or larger
2965      *        and equal to or less than the number of columns in this rowset
2966      * @param x the new column value
2967      * @param length the number of one-byte ASCII characters in the stream
2968      * @throws SQLException if this method is invoked
2969      */
2970     public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
2971         throw new UnsupportedOperationException();
2972     }
2973 
2974     /**
2975      * Sets the designated column in either the current row or the insert
2976      * row of this {@code CachedRowSetImpl} object with the given
2977      * {@code java.io.InputStream} object.
2978      * <P>
2979      * This method updates a column value in either the current row or
2980      * the insert row of this rowset, but it does not update the
2981      * database.  If the cursor is on a row in the rowset, the
2982      * method {@link #updateRow} must be called to update the database.
2983      * If the cursor is on the insert row, the method {@link #insertRow}
2984      * must be called, which will insert the new row into both this rowset
2985      * and the database. Both of these methods must be called before the
2986      * cursor moves to another row.
2987      *
2988      * @param columnIndex the first column is {@code 1}, the second
2989      *        is {@code 2}, and so on; must be {@code 1} or larger
2990      *        and equal to or less than the number of columns in this rowset
2991      * @param x the new column value; must be a {@code java.io.InputStream}
2992      *          containing {@code BINARY}, {@code VARBINARY}, or
2993      *          {@code LONGVARBINARY} data
2994      * @param length the length of the stream in bytes
2995      * @throws SQLException if (1) the given column index is out of bounds,
2996      *            (2) the cursor is not on one of this rowset's rows or its
2997      *            insert row, (3) the data in the stream is not binary, or
2998      *            (4) this rowset is {@code ResultSet.CONCUR_READ_ONLY}
2999      */
3000     public void updateBinaryStream(int columnIndex, java.io.InputStream x,int length) throws SQLException {
3001         throw new UnsupportedOperationException();
3002     }
3003 
3004     /**
3005      * Sets the designated column in either the current row or the insert
3006      * row of this {@code CachedRowSetImpl} object with the given
3007      * {@code java.io.Reader} object.
3008      * <P>
3009      * This method updates a column value in either the current row or
3010      * the insert row of this rowset, but it does not update the
3011      * database.  If the cursor is on a row in the rowset, the
3012      * method {@link #updateRow} must be called to update the database.
3013      * If the cursor is on the insert row, the method {@link #insertRow}
3014      * must be called, which will insert the new row into both this rowset
3015      * and the database. Both of these methods must be called before the
3016      * cursor moves to another row.
3017      *
3018      * @param columnIndex the first column is {@code 1}, the second
3019      *        is {@code 2}, and so on; must be {@code 1} or larger
3020      *        and equal to or less than the number of columns in this rowset
3021      * @param x the new column value; must be a {@code java.io.Reader}
3022      *          containing {@code BINARY}, {@code VARBINARY},
3023      *          {@code LONGVARBINARY}, {@code CHAR}, {@code VARCHAR},
3024      *          or {@code LONGVARCHAR} data
3025      * @param length the length of the stream in characters
3026      * @throws SQLException if (1) the given column index is out of bounds,
3027      *            (2) the cursor is not on one of this rowset's rows or its
3028      *            insert row, (3) the data in the stream is not a binary or
3029      *            character type, or (4) this rowset is
3030      *            {@code ResultSet.CONCUR_READ_ONLY}
3031      */
3032     public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
3033         throw new UnsupportedOperationException();
3034     }
3035 
3036     /**
3037      * Sets the designated column in either the current row or the insert
3038      * row of this {@code CachedRowSetImpl} object with the given
3039      * {@code Object} value.  The {@code scale} parameter indicates
3040      * the number of digits to the right of the decimal point and is ignored
3041      * if the new column value is not a type that will be mapped to an SQL
3042      * {@code DECIMAL} or {@code NUMERIC} value.
3043      * <P>
3044      * This method updates a column value in either the current row or
3045      * the insert row of this rowset, but it does not update the
3046      * database.  If the cursor is on a row in the rowset, the
3047      * method {@link #updateRow} must be called to update the database.
3048      * If the cursor is on the insert row, the method {@link #insertRow}
3049      * must be called, which will insert the new row into both this rowset
3050      * and the database. Both of these methods must be called before the
3051      * cursor moves to another row.
3052      *
3053      * @param columnIndex the first column is {@code 1}, the second
3054      *        is {@code 2}, and so on; must be {@code 1} or larger
3055      *        and equal to or less than the number of columns in this rowset
3056      * @param x the new column value
3057      * @param scale the number of digits to the right of the decimal point (for
3058      *              {@code DECIMAL} and {@code NUMERIC} types only)
3059      * @throws SQLException if (1) the given column index is out of bounds,
3060      *            (2) the cursor is not on one of this rowset's rows or its
3061      *            insert row, or (3) this rowset is
3062      *            {@code ResultSet.CONCUR_READ_ONLY}
3063      */
3064     public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
3065        throw new UnsupportedOperationException();
3066     }
3067 
3068     /**
3069      * Sets the designated column in either the current row or the insert
3070      * row of this {@code CachedRowSetImpl} object with the given
3071      * {@code Object} value.
3072      * <P>
3073      * This method updates a column value in either the current row or
3074      * the insert row of this rowset, but it does not update the
3075      * database.  If the cursor is on a row in the rowset, the
3076      * method {@link #updateRow} must be called to update the database.
3077      * If the cursor is on the insert row, the method {@link #insertRow}
3078      * must be called, which will insert the new row into both this rowset
3079      * and the database. Both of these methods must be called before the
3080      * cursor moves to another row.
3081      *
3082      * @param columnIndex the first column is {@code 1}, the second
3083      *        is {@code 2}, and so on; must be {@code 1} or larger
3084      *        and equal to or less than the number of columns in this rowset
3085      * @param x the new column value
3086      * @throws SQLException if (1) the given column index is out of bounds,
3087      *            (2) the cursor is not on one of this rowset's rows or its
3088      *            insert row, or (3) this rowset is
3089      *            {@code ResultSet.CONCUR_READ_ONLY}
3090      */
3091     public void updateObject(int columnIndex, Object x) throws SQLException {
3092         throw new UnsupportedOperationException();
3093     }
3094 
3095 
3096     /**
3097      * Sets the designated nullable column in the current row or the
3098      * insert row of this {@code CachedRowSetImpl} object with
3099      * {@code null} value.
3100      * <P>
3101      * This method updates a column value in the current row or the insert
3102      * row of this rowset, but it does not update the database.
3103      * If the cursor is on a row in the rowset, the
3104      * method {@link #updateRow} must be called to update the database.
3105      * If the cursor is on the insert row, the method {@link #insertRow}
3106      * must be called, which will insert the new row into both this rowset
3107      * and the database.
3108      *
3109      * @param columnName a {@code String} object that must match the
3110      *        SQL name of a column in this rowset, ignoring case
3111      * @throws SQLException if (1) the given column name does not match the
3112      *            name of a column in this rowset, (2) the cursor is not on
3113      *            one of this rowset's rows or its insert row, or (3) this
3114      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3115      */
3116     public void updateNull(String columnName) throws SQLException {
3117         throw new UnsupportedOperationException();
3118     }
3119 
3120     /**
3121      * Sets the designated column in either the current row or the insert
3122      * row of this {@code CachedRowSetImpl} object with the given
3123      * {@code boolean} value.
3124      * <P>
3125      * This method updates a column value in the current row or the insert
3126      * row of this rowset, but it does not update the database.
3127      * If the cursor is on a row in the rowset, the
3128      * method {@link #updateRow} must be called to update the database.
3129      * If the cursor is on the insert row, the method {@link #insertRow}
3130      * must be called, which will insert the new row into both this rowset
3131      * and the database. Both of these methods must be called before the
3132      * cursor moves to another row.
3133      *
3134      * @param columnName a {@code String} object that must match the
3135      *        SQL name of a column in this rowset, ignoring case
3136      * @param x the new column value
3137      * @throws SQLException if (1) the given column name does not match the
3138      *            name of a column in this rowset, (2) the cursor is not on
3139      *            one of this rowset's rows or its insert row, or (3) this
3140      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3141      */
3142     public void updateBoolean(String columnName, boolean x) throws SQLException {
3143        throw new UnsupportedOperationException();
3144     }
3145 
3146     /**
3147      * Sets the designated column in either the current row or the insert
3148      * row of this {@code CachedRowSetImpl} object with the given
3149      * {@code byte} value.
3150      * <P>
3151      * This method updates a column value in the current row or the insert
3152      * row of this rowset, but it does not update the database.
3153      * If the cursor is on a row in the rowset, the
3154      * method {@link #updateRow} must be called to update the database.
3155      * If the cursor is on the insert row, the method {@link #insertRow}
3156      * must be called, which will insert the new row into both this rowset
3157      * and the database. Both of these methods must be called before the
3158      * cursor moves to another row.
3159      *
3160      * @param columnName a {@code String} object that must match the
3161      *        SQL name of a column in this rowset, ignoring case
3162      * @param x the new column value
3163      * @throws SQLException if (1) the given column name does not match the
3164      *            name of a column in this rowset, (2) the cursor is not on
3165      *            one of this rowset's rows or its insert row, or (3) this
3166      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3167      */
3168     public void updateByte(String columnName, byte x) throws SQLException {
3169         throw new UnsupportedOperationException();
3170     }
3171 
3172     /**
3173      * Sets the designated column in either the current row or the insert
3174      * row of this {@code CachedRowSetImpl} object with the given
3175      * {@code short} value.
3176      * <P>
3177      * This method updates a column value in the current row or the insert
3178      * row of this rowset, but it does not update the database.
3179      * If the cursor is on a row in the rowset, the
3180      * method {@link #updateRow} must be called to update the database.
3181      * If the cursor is on the insert row, the method {@link #insertRow}
3182      * must be called, which will insert the new row into both this rowset
3183      * and the database. Both of these methods must be called before the
3184      * cursor moves to another row.
3185      *
3186      * @param columnName a {@code String} object that must match the
3187      *        SQL name of a column in this rowset, ignoring case
3188      * @param x the new column value
3189      * @throws SQLException if (1) the given column name does not match the
3190      *            name of a column in this rowset, (2) the cursor is not on
3191      *            one of this rowset's rows or its insert row, or (3) this
3192      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3193      */
3194     public void updateShort(String columnName, short x) throws SQLException {
3195         throw new UnsupportedOperationException();
3196     }
3197 
3198     /**
3199      * Sets the designated column in either the current row or the insert
3200      * row of this {@code CachedRowSetImpl} object with the given
3201      * {@code int} value.
3202      * <P>
3203      * This method updates a column value in the current row or the insert
3204      * row of this rowset, but it does not update the database.
3205      * If the cursor is on a row in the rowset, the
3206      * method {@link #updateRow} must be called to update the database.
3207      * If the cursor is on the insert row, the method {@link #insertRow}
3208      * must be called, which will insert the new row into both this rowset
3209      * and the database. Both of these methods must be called before the
3210      * cursor moves to another row.
3211      *
3212      * @param columnName a {@code String} object that must match the
3213      *        SQL name of a column in this rowset, ignoring case
3214      * @param x the new column value
3215      * @throws SQLException if (1) the given column name does not match the
3216      *            name of a column in this rowset, (2) the cursor is not on
3217      *            one of this rowset's rows or its insert row, or (3) this
3218      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3219      */
3220     public void updateInt(String columnName, int x) throws SQLException {
3221         throw new UnsupportedOperationException();
3222     }
3223 
3224     /**
3225      * Sets the designated column in either the current row or the insert
3226      * row of this {@code CachedRowSetImpl} object with the given
3227      * {@code long} value.
3228      * <P>
3229      * This method updates a column value in the current row or the insert
3230      * row of this rowset, but it does not update the database.
3231      * If the cursor is on a row in the rowset, the
3232      * method {@link #updateRow} must be called to update the database.
3233      * If the cursor is on the insert row, the method {@link #insertRow}
3234      * must be called, which will insert the new row into both this rowset
3235      * and the database. Both of these methods must be called before the
3236      * cursor moves to another row.
3237      *
3238      * @param columnName a {@code String} object that must match the
3239      *        SQL name of a column in this rowset, ignoring case
3240      * @param x the new column value
3241      * @throws SQLException if (1) the given column name does not match the
3242      *            name of a column in this rowset, (2) the cursor is not on
3243      *            one of this rowset's rows or its insert row, or (3) this
3244      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3245      */
3246     public void updateLong(String columnName, long x) throws SQLException {
3247         throw new UnsupportedOperationException();
3248     }
3249 
3250     /**
3251      * Sets the designated column in either the current row or the insert
3252      * row of this {@code CachedRowSetImpl} object with the given
3253      * {@code float} value.
3254      * <P>
3255      * This method updates a column value in the current row or the insert
3256      * row of this rowset, but it does not update the database.
3257      * If the cursor is on a row in the rowset, the
3258      * method {@link #updateRow} must be called to update the database.
3259      * If the cursor is on the insert row, the method {@link #insertRow}
3260      * must be called, which will insert the new row into both this rowset
3261      * and the database. Both of these methods must be called before the
3262      * cursor moves to another row.
3263      *
3264      * @param columnName a {@code String} object that must match the
3265      *        SQL name of a column in this rowset, ignoring case
3266      * @param x the new column value
3267      * @throws SQLException if (1) the given column name does not match the
3268      *            name of a column in this rowset, (2) the cursor is not on
3269      *            one of this rowset's rows or its insert row, or (3) this
3270      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3271      */
3272     public void updateFloat(String columnName, float x) throws SQLException {
3273         throw new UnsupportedOperationException();
3274     }
3275 
3276     /**
3277      * Sets the designated column in either the current row or the insert
3278      * row of this {@code CachedRowSetImpl} object with the given
3279      * {@code double} value.
3280      *
3281      * This method updates a column value in either the current row or
3282      * the insert row of this rowset, but it does not update the
3283      * database.  If the cursor is on a row in the rowset, the
3284      * method {@link #updateRow} must be called to update the database.
3285      * If the cursor is on the insert row, the method {@link #insertRow}
3286      * must be called, which will insert the new row into both this rowset
3287      * and the database. Both of these methods must be called before the
3288      * cursor moves to another row.
3289      *
3290      * @param columnName a {@code String} object that must match the
3291      *        SQL name of a column in this rowset, ignoring case
3292      * @param x the new column value
3293      * @throws SQLException if (1) the given column name does not match the
3294      *            name of a column in this rowset, (2) the cursor is not on
3295      *            one of this rowset's rows or its insert row, or (3) this
3296      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3297      */
3298     public void updateDouble(String columnName, double x) throws SQLException {
3299         throw new UnsupportedOperationException();
3300     }
3301 
3302     /**
3303      * Sets the designated column in either the current row or the insert
3304      * row of this {@code CachedRowSetImpl} object with the given
3305      * {@code java.math.BigDecimal} object.
3306      * <P>
3307      * This method updates a column value in the current row or the insert
3308      * row of this rowset, but it does not update the database.
3309      * If the cursor is on a row in the rowset, the
3310      * method {@link #updateRow} must be called to update the database.
3311      * If the cursor is on the insert row, the method {@link #insertRow}
3312      * must be called, which will insert the new row into both this rowset
3313      * and the database. Both of these methods must be called before the
3314      * cursor moves to another row.
3315      *
3316      * @param columnName a {@code String} object that must match the
3317      *        SQL name of a column in this rowset, ignoring case
3318      * @param x the new column value
3319      * @throws SQLException if (1) the given column name does not match the
3320      *            name of a column in this rowset, (2) the cursor is not on
3321      *            one of this rowset's rows or its insert row, or (3) this
3322      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3323      */
3324     public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
3325         throw new UnsupportedOperationException();
3326     }
3327 
3328     /**
3329      * Sets the designated column in either the current row or the insert
3330      * row of this {@code CachedRowSetImpl} object with the given
3331      * {@code String} object.
3332      *
3333      * This method updates a column value in either the current row or
3334      * the insert row of this rowset, but it does not update the
3335      * database.  If the cursor is on a row in the rowset, the
3336      * method {@link #updateRow} must be called to update the database.
3337      * If the cursor is on the insert row, the method {@link #insertRow}
3338      * must be called, which will insert the new row into both this rowset
3339      * and the database. Both of these methods must be called before the
3340      * cursor moves to another row.
3341      *
3342      * @param columnName a {@code String} object that must match the
3343      *        SQL name of a column in this rowset, ignoring case
3344      * @param x the new column value
3345      * @throws SQLException if (1) the given column name does not match the
3346      *            name of a column in this rowset, (2) the cursor is not on
3347      *            one of this rowset's rows or its insert row, or (3) this
3348      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3349      */
3350     public void updateString(String columnName, String x) throws SQLException {
3351         throw new UnsupportedOperationException();
3352     }
3353 
3354     /**
3355      * Sets the designated column in either the current row or the insert
3356      * row of this {@code CachedRowSetImpl} object with the given
3357      * {@code byte} array.
3358      *
3359      * This method updates a column value in either the current row or
3360      * the insert row of this rowset, but it does not update the
3361      * database.  If the cursor is on a row in the rowset, the
3362      * method {@link #updateRow} must be called to update the database.
3363      * If the cursor is on the insert row, the method {@link #insertRow}
3364      * must be called, which will insert the new row into both this rowset
3365      * and the database. Both of these methods must be called before the
3366      * cursor moves to another row.
3367      *
3368      * @param columnName a {@code String} object that must match the
3369      *        SQL name of a column in this rowset, ignoring case
3370      * @param x the new column value
3371      * @throws SQLException if (1) the given column name does not match the
3372      *            name of a column in this rowset, (2) the cursor is not on
3373      *            one of this rowset's rows or its insert row, or (3) this
3374      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3375      */
3376     public void updateBytes(String columnName, byte x[]) throws SQLException {
3377         throw new UnsupportedOperationException();
3378     }
3379 
3380     /**
3381      * Sets the designated column in either the current row or the insert
3382      * row of this {@code CachedRowSetImpl} object with the given
3383      * {@code Date} object.
3384      *
3385      * This method updates a column value in either the current row or
3386      * the insert row of this rowset, but it does not update the
3387      * database.  If the cursor is on a row in the rowset, the
3388      * method {@link #updateRow} must be called to update the database.
3389      * If the cursor is on the insert row, the method {@link #insertRow}
3390      * must be called, which will insert the new row into both this rowset
3391      * and the database. Both of these methods must be called before the
3392      * cursor moves to another row.
3393      *
3394      * @param columnName a {@code String} object that must match the
3395      *        SQL name of a column in this rowset, ignoring case
3396      * @param x the new column value
3397      * @throws SQLException if (1) the given column name does not match the
3398      *            name of a column in this rowset, (2) the cursor is not on
3399      *            one of this rowset's rows or its insert row, (3) the type
3400      *            of the designated column is not an SQL {@code DATE} or
3401      *            {@code TIMESTAMP}, or (4) this rowset is
3402      *            {@code ResultSet.CONCUR_READ_ONLY}
3403      */
3404     public void updateDate(String columnName, java.sql.Date x) throws SQLException {
3405         throw new UnsupportedOperationException();
3406     }
3407 
3408     /**
3409      * Sets the designated column in either the current row or the insert
3410      * row of this {@code CachedRowSetImpl} object with the given
3411      * {@code Time} object.
3412      *
3413      * This method updates a column value in either the current row or
3414      * the insert row of this rowset, but it does not update the
3415      * database.  If the cursor is on a row in the rowset, the
3416      * method {@link #updateRow} must be called to update the database.
3417      * If the cursor is on the insert row, the method {@link #insertRow}
3418      * must be called, which will insert the new row into both this rowset
3419      * and the database. Both of these methods must be called before the
3420      * cursor moves to another row.
3421      *
3422      * @param columnName a {@code String} object that must match the
3423      *        SQL name of a column in this rowset, ignoring case
3424      * @param x the new column value
3425      * @throws SQLException if (1) the given column name does not match the
3426      *            name of a column in this rowset, (2) the cursor is not on
3427      *            one of this rowset's rows or its insert row, (3) the type
3428      *            of the designated column is not an SQL {@code TIME} or
3429      *            {@code TIMESTAMP}, or (4) this rowset is
3430      *            {@code ResultSet.CONCUR_READ_ONLY}
3431      */
3432     public void updateTime(String columnName, java.sql.Time x) throws SQLException {
3433         throw new UnsupportedOperationException();
3434     }
3435 
3436     /**
3437      * Sets the designated column in either the current row or the insert
3438      * row of this {@code CachedRowSetImpl} object with the given
3439      * {@code Timestamp} object.
3440      *
3441      * This method updates a column value in either the current row or
3442      * the insert row of this rowset, but it does not update the
3443      * database.  If the cursor is on a row in the rowset, the
3444      * method {@link #updateRow} must be called to update the database.
3445      * If the cursor is on the insert row, the method {@link #insertRow}
3446      * must be called, which will insert the new row into both this rowset
3447      * and the database. Both of these methods must be called before the
3448      * cursor moves to another row.
3449      *
3450      * @param columnName a {@code String} object that must match the
3451      *        SQL name of a column in this rowset, ignoring case
3452      * @param x the new column value
3453      * @throws SQLException if the given column index is out of bounds or
3454      *            the cursor is not on one of this rowset's rows or its
3455      *            insert row
3456      * @throws SQLException if (1) the given column name does not match the
3457      *            name of a column in this rowset, (2) the cursor is not on
3458      *            one of this rowset's rows or its insert row, (3) the type
3459      *            of the designated column is not an SQL {@code DATE},
3460      *            {@code TIME}, or {@code TIMESTAMP}, or (4) this
3461      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3462      */
3463     public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
3464         throw new UnsupportedOperationException();
3465     }
3466 
3467     /**
3468      * Sets the designated column in either the current row or the insert
3469      * row of this {@code CachedRowSetImpl} object with the given
3470      * ASCII stream value.
3471      * <P>
3472      * This method updates a column value in either the current row or
3473      * the insert row of this rowset, but it does not update the
3474      * database.  If the cursor is on a row in the rowset, the
3475      * method {@link #updateRow} must be called to update the database.
3476      * If the cursor is on the insert row, the method {@link #insertRow}
3477      * must be called, which will insert the new row into both this rowset
3478      * and the database. Both of these methods must be called before the
3479      * cursor moves to another row.
3480      *
3481      * @param columnName a {@code String} object that must match the
3482      *        SQL name of a column in this rowset, ignoring case
3483      * @param x the new column value
3484      * @param length the number of one-byte ASCII characters in the stream
3485      */
3486     public void updateAsciiStream(String columnName,
3487     java.io.InputStream x,
3488     int length) throws SQLException {
3489        throw new UnsupportedOperationException();
3490     }
3491 
3492     /**
3493      * Sets the designated column in either the current row or the insert
3494      * row of this {@code CachedRowSetImpl} object with the given
3495      * {@code java.io.InputStream} object.
3496      * <P>
3497      * This method updates a column value in either the current row or
3498      * the insert row of this rowset, but it does not update the
3499      * database.  If the cursor is on a row in the rowset, the
3500      * method {@link #updateRow} must be called to update the database.
3501      * If the cursor is on the insert row, the method {@link #insertRow}
3502      * must be called, which will insert the new row into both this rowset
3503      * and the database. Both of these methods must be called before the
3504      * cursor moves to another row.
3505      *
3506      * @param columnName a {@code String} object that must match the
3507      *        SQL name of a column in this rowset, ignoring case
3508      * @param x the new column value; must be a {@code java.io.InputStream}
3509      *          containing {@code BINARY}, {@code VARBINARY}, or
3510      *          {@code LONGVARBINARY} data
3511      * @param length the length of the stream in bytes
3512      * @throws SQLException if (1) the given column name does not match the
3513      *            name of a column in this rowset, (2) the cursor is not on
3514      *            one of this rowset's rows or its insert row, (3) the data
3515      *            in the stream is not binary, or (4) this rowset is
3516      *            {@code ResultSet.CONCUR_READ_ONLY}
3517      */
3518     public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
3519         throw new UnsupportedOperationException();
3520     }
3521 
3522     /**
3523      * Sets the designated column in either the current row or the insert
3524      * row of this {@code CachedRowSetImpl} object with the given
3525      * {@code java.io.Reader} object.
3526      * <P>
3527      * This method updates a column value in either the current row or
3528      * the insert row of this rowset, but it does not update the
3529      * database.  If the cursor is on a row in the rowset, the
3530      * method {@link #updateRow} must be called to update the database.
3531      * If the cursor is on the insert row, the method {@link #insertRow}
3532      * must be called, which will insert the new row into both this rowset
3533      * and the database. Both of these methods must be called before the
3534      * cursor moves to another row.
3535      *
3536      * @param columnName a {@code String} object that must match the
3537      *        SQL name of a column in this rowset, ignoring case
3538      * @param reader the new column value; must be a
3539      * {@code java.io.Reader} containing {@code BINARY},
3540      * {@code VARBINARY}, {@code LONGVARBINARY}, {@code CHAR},
3541      * {@code VARCHAR}, or {@code LONGVARCHAR} data
3542      * @param length the length of the stream in characters
3543      * @throws SQLException if (1) the given column name does not match the
3544      *            name of a column in this rowset, (2) the cursor is not on
3545      *            one of this rowset's rows or its insert row, (3) the data
3546      *            in the stream is not a binary or character type, or (4) this
3547      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3548      */
3549     public void updateCharacterStream(String columnName,
3550     java.io.Reader reader,
3551     int length) throws SQLException {
3552         throw new UnsupportedOperationException();
3553     }
3554 
3555     /**
3556      * Sets the designated column in either the current row or the insert
3557      * row of this {@code CachedRowSetImpl} object with the given
3558      * {@code Object} value.  The {@code scale} parameter
3559      * indicates the number of digits to the right of the decimal point
3560      * and is ignored if the new column value is not a type that will be
3561      *  mapped to an SQL {@code DECIMAL} or {@code NUMERIC} value.
3562      * <P>
3563      * This method updates a column value in either the current row or
3564      * the insert row of this rowset, but it does not update the
3565      * database.  If the cursor is on a row in the rowset, the
3566      * method {@link #updateRow} must be called to update the database.
3567      * If the cursor is on the insert row, the method {@link #insertRow}
3568      * must be called, which will insert the new row into both this rowset
3569      * and the database. Both of these methods must be called before the
3570      * cursor moves to another row.
3571      *
3572      * @param columnName a {@code String} object that must match the
3573      *        SQL name of a column in this rowset, ignoring case
3574      * @param x the new column value
3575      * @param scale the number of digits to the right of the decimal point (for
3576      *              {@code DECIMAL} and {@code NUMERIC} types only)
3577      * @throws SQLException if (1) the given column name does not match the
3578      *            name of a column in this rowset, (2) the cursor is not on
3579      *            one of this rowset's rows or its insert row, or (3) this
3580      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3581      */
3582     public void updateObject(String columnName, Object x, int scale) throws SQLException {
3583         throw new UnsupportedOperationException();
3584     }
3585 
3586     /**
3587      * Sets the designated column in either the current row or the insert
3588      * row of this {@code CachedRowSetImpl} object with the given
3589      * {@code Object} value.
3590      * <P>
3591      * This method updates a column value in either the current row or
3592      * the insert row of this rowset, but it does not update the
3593      * database.  If the cursor is on a row in the rowset, the
3594      * method {@link #updateRow} must be called to update the database.
3595      * If the cursor is on the insert row, the method {@link #insertRow}
3596      * must be called, which will insert the new row into both this rowset
3597      * and the database. Both of these methods must be called before the
3598      * cursor moves to another row.
3599      *
3600      * @param columnName a {@code String} object that must match the
3601      *        SQL name of a column in this rowset, ignoring case
3602      * @param x the new column value
3603      * @throws SQLException if (1) the given column name does not match the
3604      *            name of a column in this rowset, (2) the cursor is not on
3605      *            one of this rowset's rows or its insert row, or (3) this
3606      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3607      */
3608     public void updateObject(String columnName, Object x) throws SQLException {
3609         throw new UnsupportedOperationException();
3610     }
3611 
3612     /**
3613      * Inserts the contents of this {@code CachedRowSetImpl} object's insert
3614      * row into this rowset immediately following the current row.
3615      * If the current row is the
3616      * position after the last row or before the first row, the new row will
3617      * be inserted at the end of the rowset.  This method also notifies
3618      * listeners registered with this rowset that the row has changed.
3619      * <P>
3620      * The cursor must be on the insert row when this method is called.
3621      *
3622      * @throws SQLException if (1) the cursor is not on the insert row,
3623      *            (2) one or more of the non-nullable columns in the insert
3624      *            row has not been given a value, or (3) this rowset is
3625      *            {@code ResultSet.CONCUR_READ_ONLY}
3626      */
3627     public void insertRow() throws SQLException {
3628         throw new UnsupportedOperationException();
3629     }
3630 
3631     /**
3632      * Marks the current row of this {@code CachedRowSetImpl} object as
3633      * updated and notifies listeners registered with this rowset that the
3634      * row has changed.
3635      * <P>
3636      * This method  cannot be called when the cursor is on the insert row, and
3637      * it should be called before the cursor moves to another row.  If it is
3638      * called after the cursor moves to another row, this method has no effect,
3639      * and the updates made before the cursor moved will be lost.
3640      *
3641      * @throws SQLException if the cursor is on the insert row or this
3642      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
3643      */
3644     public void updateRow() throws SQLException {
3645         throw new UnsupportedOperationException();
3646     }
3647 
3648     /**
3649      * Deletes the current row from this {@code CachedRowSetImpl} object and
3650      * notifies listeners registered with this rowset that a row has changed.
3651      * This method cannot be called when the cursor is on the insert row.
3652      * <P>
3653      * This method marks the current row as deleted, but it does not delete
3654      * the row from the underlying data source.  The method
3655      * {@code acceptChanges} must be called to delete the row in
3656      * the data source.
3657      *
3658      * @throws SQLException if (1) this method is called when the cursor
3659      *            is on the insert row, before the first row, or after the
3660      *            last row or (2) this rowset is
3661      *            {@code ResultSet.CONCUR_READ_ONLY}
3662      */
3663     public void deleteRow() throws SQLException {
3664         throw new UnsupportedOperationException();
3665     }
3666 
3667     /**
3668      * Sets the current row with its original value and marks the row as
3669      * not updated, thus undoing any changes made to the row since the
3670      * last call to the methods {@code updateRow} or {@code deleteRow}.
3671      * This method should be called only when the cursor is on a row in
3672      * this rowset.
3673      *
3674      * @throws SQLException if the cursor is on the insert row, before the
3675      *            first row, or after the last row
3676      */
3677     public void refreshRow() throws SQLException {
3678         throw new UnsupportedOperationException();
3679     }
3680 
3681     /**
3682      * Rolls back any updates made to the current row of this
3683      * {@code CachedRowSetImpl} object and notifies listeners that
3684      * a row has changed.  To have an effect, this method
3685      * must be called after an {@code updateXXX} method has been
3686      * called and before the method {@code updateRow} has been called.
3687      * If no updates have been made or the method {@code updateRow}
3688      * has already been called, this method has no effect.
3689      *
3690      * @throws SQLException if the cursor is on the insert row, before the
3691      *            first row, or after the last row
3692      */
3693     public void cancelRowUpdates() throws SQLException {
3694         throw new UnsupportedOperationException();
3695     }
3696 
3697     /**
3698      * Moves the cursor for this {@code CachedRowSetImpl} object
3699      * to the insert row.  The current row in the rowset is remembered
3700      * while the cursor is on the insert row.
3701      * <P>
3702      * The insert row is a special row associated with an updatable
3703      * rowset.  It is essentially a buffer where a new row may
3704      * be constructed by calling the appropriate {@code updateXXX}
3705      * methods to assign a value to each column in the row.  A complete
3706      * row must be constructed; that is, every column that is not nullable
3707      * must be assigned a value.  In order for the new row to become part
3708      * of this rowset, the method {@code insertRow} must be called
3709      * before the cursor is moved back to the rowset.
3710      * <P>
3711      * Only certain methods may be invoked while the cursor is on the insert
3712      * row; many methods throw an exception if they are called while the
3713      * cursor is there.  In addition to the {@code updateXXX}
3714      * and {@code insertRow} methods, only the {@code getXXX} methods
3715      * may be called when the cursor is on the insert row.  A {@code getXXX}
3716      * method should be called on a column only after an {@code updateXXX}
3717      * method has been called on that column; otherwise, the value returned is
3718      * undetermined.
3719      *
3720      * @throws SQLException if this {@code CachedRowSetImpl} object is
3721      *            {@code ResultSet.CONCUR_READ_ONLY}
3722      */
3723     public void moveToInsertRow() throws SQLException {
3724         throw new UnsupportedOperationException();
3725     }
3726 
3727     /**
3728      * Moves the cursor for this {@code CachedRowSetImpl} object to
3729      * the current row.  The current row is the row the cursor was on
3730      * when the method {@code moveToInsertRow} was called.
3731      * <P>
3732      * Calling this method has no effect unless it is called while the
3733      * cursor is on the insert row.
3734      *
3735      * @throws SQLException if an error occurs
3736      */
3737     public void moveToCurrentRow() throws SQLException {
3738         throw new UnsupportedOperationException();
3739     }
3740 
3741     /**
3742      * Returns {@code null}.
3743      *
3744      * @return {@code null}
3745      * @throws SQLException if an error occurs
3746      */
3747     public Statement getStatement() throws SQLException {
3748         throw new UnsupportedOperationException();
3749     }
3750 
3751     /**
3752      * Retrieves the value of the designated column in this
3753      * {@code CachedRowSetImpl} object as an {@code Object} in
3754      * the Java programming language, using the given
3755      * {@code java.util.Map} object to custom map the value if
3756      * appropriate.
3757      *
3758      * @param columnIndex the first column is {@code 1}, the second
3759      *        is {@code 2}, and so on; must be {@code 1} or larger
3760      *        and equal to or less than the number of columns in this rowset
3761      * @param map a {@code java.util.Map} object showing the mapping
3762      *            from SQL type names to classes in the Java programming
3763      *            language
3764      * @return an {@code Object} representing the SQL value
3765      * @throws SQLException if the given column index is out of bounds or
3766      *            the cursor is not on one of this rowset's rows or its
3767      *            insert row
3768      */
3769     public Object getObject(int columnIndex,
3770                             java.util.Map<String,Class<?>> map)
3771           throws SQLException
3772     {
3773        throw new UnsupportedOperationException();
3774     }
3775 
3776     /**
3777      * Retrieves the value of the designated column in this
3778      * {@code CachedRowSetImpl} object as a {@code Ref} object
3779      * in the Java programming language.
3780      *
3781      * @param columnIndex the first column is {@code 1}, the second
3782      *        is {@code 2}, and so on; must be {@code 1} or larger
3783      *        and equal to or less than the number of columns in this rowset
3784      * @return a {@code Ref} object representing an SQL{@code  REF} value
3785      * @throws SQLException if (1) the given column index is out of bounds,
3786      *            (2) the cursor is not on one of this rowset's rows or its
3787      *            insert row, or (3) the designated column does not store an
3788      *            SQL {@code REF} value
3789      * @see #getRef(String)
3790      */
3791     public Ref getRef(int columnIndex) throws SQLException {
3792         throw new UnsupportedOperationException();
3793     }
3794 
3795     /**
3796      * Retrieves the value of the designated column in this
3797      * {@code CachedRowSetImpl} object as a {@code Blob} object
3798      * in the Java programming language.
3799      *
3800      * @param columnIndex the first column is {@code 1}, the second
3801      *        is {@code 2}, and so on; must be {@code 1} or larger
3802      *        and equal to or less than the number of columns in this rowset
3803      * @return a {@code Blob} object representing an SQL {@code BLOB} value
3804      * @throws SQLException if (1) the given column index is out of bounds,
3805      *            (2) the cursor is not on one of this rowset's rows or its
3806      *            insert row, or (3) the designated column does not store an
3807      *            SQL {@code BLOB} value
3808      * @see #getBlob(String)
3809      */
3810     public Blob getBlob(int columnIndex) throws SQLException {
3811        throw new UnsupportedOperationException();
3812     }
3813 
3814     /**
3815      * Retrieves the value of the designated column in this
3816      * {@code CachedRowSetImpl} object as a {@code Clob} object
3817      * in the Java programming language.
3818      *
3819      * @param columnIndex the first column is {@code 1}, the second
3820      *        is {@code 2}, and so on; must be {@code 1} or larger
3821      *        and equal to or less than the number of columns in this rowset
3822      * @return a {@code Clob} object representing an SQL {@code CLOB} value
3823      * @throws SQLException if (1) the given column index is out of bounds,
3824      *            (2) the cursor is not on one of this rowset's rows or its
3825      *            insert row, or (3) the designated column does not store an
3826      *            SQL {@code CLOB} value
3827      * @see #getClob(String)
3828      */
3829     public Clob getClob(int columnIndex) throws SQLException {
3830         throw new UnsupportedOperationException();
3831     }
3832 
3833     /**
3834      * Retrieves the value of the designated column in this
3835      * {@code CachedRowSetImpl} object as an {@code Array} object
3836      * in the Java programming language.
3837      *
3838      * @param columnIndex the first column is {@code 1}, the second
3839      *        is {@code 2}, and so on; must be {@code 1} or larger
3840      *        and equal to or less than the number of columns in this rowset
3841      * @return an {@code Array} object representing an SQL
3842      *         {@code ARRAY} value
3843      * @throws SQLException if (1) the given column index is out of bounds,
3844      *            (2) the cursor is not on one of this rowset's rows or its
3845      *            insert row, or (3) the designated column does not store an
3846      *            SQL {@code ARRAY} value
3847      * @see #getArray(String)
3848      */
3849     public Array getArray(int columnIndex) throws SQLException {
3850         throw new UnsupportedOperationException();
3851     }
3852 
3853     /**
3854      * Retrieves the value of the designated column in this
3855      * {@code CachedRowSetImpl} object as an {@code Object} in
3856      * the Java programming language, using the given
3857      * {@code java.util.Map} object to custom map the value if
3858      * appropriate.
3859      *
3860      * @param columnName a {@code String} object that must match the
3861      *        SQL name of a column in this rowset, ignoring case
3862      * @param map a {@code java.util.Map} object showing the mapping
3863      *        from SQL type names to classes in the Java programming
3864      *        language
3865      * @return an {@code Object} representing the SQL value
3866      * @throws SQLException if the given column name is not the name of
3867      *         a column in this rowset or the cursor is not on one of
3868      *         this rowset's rows or its insert row
3869      */
3870     public Object getObject(String columnName,
3871                             java.util.Map<String,Class<?>> map)
3872     throws SQLException {
3873         throw new UnsupportedOperationException();
3874     }
3875 
3876     /**
3877      * Retrieves the value of the designated column in this
3878      * {@code CachedRowSetImpl} object as a {@code Ref} object
3879      * in the Java programming language.
3880      *
3881      * @param colName a {@code String} object that must match the
3882      *        SQL name of a column in this rowset, ignoring case
3883      * @return a {@code Ref} object representing an SQL{@code  REF} value
3884      * @throws SQLException  if (1) the given column name is not the name of
3885      *            a column in this rowset, (2) the cursor is not on one of
3886      *            this rowset's rows or its insert row, or (3) the column value
3887      *            is not an SQL {@code REF} value
3888      * @see #getRef(int)
3889      */
3890     public Ref getRef(String colName) throws SQLException {
3891         throw new UnsupportedOperationException();
3892     }
3893 
3894     /**
3895      * Retrieves the value of the designated column in this
3896      * {@code CachedRowSetImpl} object as a {@code Blob} object
3897      * in the Java programming language.
3898      *
3899      * @param colName a {@code String} object that must match the
3900      *        SQL name of a column in this rowset, ignoring case
3901      * @return a {@code Blob} object representing an SQL {@code BLOB} value
3902      * @throws SQLException if (1) the given column name is not the name of
3903      *            a column in this rowset, (2) the cursor is not on one of
3904      *            this rowset's rows or its insert row, or (3) the designated
3905      *            column does not store an SQL {@code BLOB} value
3906      * @see #getBlob(int)
3907      */
3908     public Blob getBlob(String colName) throws SQLException {
3909        throw new UnsupportedOperationException();
3910     }
3911 
3912     /**
3913      * Retrieves the value of the designated column in this
3914      * {@code CachedRowSetImpl} object as a {@code Clob} object
3915      * in the Java programming language.
3916      *
3917      * @param colName a {@code String} object that must match the
3918      *        SQL name of a column in this rowset, ignoring case
3919      * @return a {@code Clob} object representing an SQL
3920      *         {@code CLOB} value
3921      * @throws SQLException if (1) the given column name is not the name of
3922      *            a column in this rowset, (2) the cursor is not on one of
3923      *            this rowset's rows or its insert row, or (3) the designated
3924      *            column does not store an SQL {@code CLOB} value
3925      * @see #getClob(int)
3926      */
3927     public Clob getClob(String colName) throws SQLException {
3928         throw new UnsupportedOperationException();
3929     }
3930 
3931     /**
3932      * Retrieves the value of the designated column in this
3933      * {@code CachedRowSetImpl} object as an {@code Array} object
3934      * in the Java programming langugage.
3935      *
3936      * @param colName a {@code String} object that must match the
3937      *        SQL name of a column in this rowset, ignoring case
3938      * @return an {@code Array} object representing an SQL
3939      *         {@code ARRAY} value
3940      * @throws SQLException if (1) the given column name is not the name of
3941      *            a column in this rowset, (2) the cursor is not on one of
3942      *            this rowset's rows or its insert row, or (3) the designated
3943      *            column does not store an SQL {@code ARRAY} value
3944      * @see #getArray(int)
3945      */
3946     public Array getArray(String colName) throws SQLException {
3947         throw new UnsupportedOperationException();
3948     }
3949 
3950     /**
3951      * Retrieves the value of the designated column in the current row
3952      * of this {@code CachedRowSetImpl} object as a {@code java.sql.Date}
3953      * object, using the given {@code Calendar} object to construct an
3954      * appropriate millisecond value for the date.
3955      *
3956      * @param columnIndex the first column is {@code 1}, the second
3957      *        is {@code 2}, and so on; must be {@code 1} or larger
3958      *        and equal to or less than the number of columns in the rowset
3959      * @param cal the {@code java.util.Calendar} object to use in
3960      *            constructing the date
3961      * @return the column value; if the value is SQL {@code NULL},
3962      *         the result is {@code null}
3963      * @throws SQLException if (1) the given column name is not the name of
3964      *            a column in this rowset, (2) the cursor is not on one of
3965      *            this rowset's rows or its insert row, or (3) the designated
3966      *            column does not store an SQL {@code DATE} or
3967      *            {@code TIMESTAMP} value
3968      */
3969     public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
3970         throw new UnsupportedOperationException();
3971     }
3972 
3973     /**
3974      * Retrieves the value of the designated column in the current row
3975      * of this {@code CachedRowSetImpl} object as a {@code java.sql.Date}
3976      * object, using the given {@code Calendar} object to construct an
3977      * appropriate millisecond value for the date.
3978      *
3979      * @param columnName a {@code String} object that must match the
3980      *        SQL name of a column in this rowset, ignoring case
3981      * @param cal the {@code java.util.Calendar} object to use in
3982      *            constructing the date
3983      * @return the column value; if the value is SQL {@code NULL},
3984      *         the result is {@code null}
3985      * @throws SQLException if (1) the given column name is not the name of
3986      *            a column in this rowset, (2) the cursor is not on one of
3987      *            this rowset's rows or its insert row, or (3) the designated
3988      *            column does not store an SQL {@code DATE} or
3989      *            {@code TIMESTAMP} value
3990      */
3991     public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
3992         throw new UnsupportedOperationException();
3993     }
3994 
3995     /**
3996      * Retrieves the value of the designated column in the current row
3997      * of this {@code CachedRowSetImpl} object as a {@code java.sql.Time}
3998      * object, using the given {@code Calendar} object to construct an
3999      * appropriate millisecond value for the date.
4000      *
4001      * @param columnIndex the first column is {@code 1}, the second
4002      *        is {@code 2}, and so on; must be {@code 1} or larger
4003      *        and equal to or less than the number of columns in the rowset
4004      * @param cal the {@code java.util.Calendar} object to use in
4005      *            constructing the date
4006      * @return the column value; if the value is SQL {@code NULL},
4007      *         the result is {@code null}
4008      * @throws SQLException if (1) the given column name is not the name of
4009      *            a column in this rowset, (2) the cursor is not on one of
4010      *            this rowset's rows or its insert row, or (3) the designated
4011      *            column does not store an SQL {@code TIME} or
4012      *            {@code TIMESTAMP} value
4013      */
4014     public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
4015         throw new UnsupportedOperationException();
4016     }
4017 
4018     /**
4019      * Retrieves the value of the designated column in the current row
4020      * of this {@code CachedRowSetImpl} object as a {@code java.sql.Time}
4021      * object, using the given {@code Calendar} object to construct an
4022      * appropriate millisecond value for the date.
4023      *
4024      * @param columnName a {@code String} object that must match the
4025      *        SQL name of a column in this rowset, ignoring case
4026      * @param cal the {@code java.util.Calendar} object to use in
4027      *            constructing the date
4028      * @return the column value; if the value is SQL {@code NULL},
4029      *         the result is {@code null}
4030      * @throws SQLException if (1) the given column name is not the name of
4031      *            a column in this rowset, (2) the cursor is not on one of
4032      *            this rowset's rows or its insert row, or (3) the designated
4033      *            column does not store an SQL {@code TIME} or
4034      *            {@code TIMESTAMP} value
4035      */
4036     public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
4037         throw new UnsupportedOperationException();
4038     }
4039 
4040     /**
4041      * Retrieves the value of the designated column in the current row
4042      * of this {@code CachedRowSetImpl} object as a {@code java.sql.Timestamp}
4043      * object, using the given {@code Calendar} object to construct an
4044      * appropriate millisecond value for the date.
4045      *
4046      * @param columnIndex the first column is {@code 1}, the second
4047      *        is {@code 2}, and so on; must be {@code 1} or larger
4048      *        and equal to or less than the number of columns in the rowset
4049      * @param cal the {@code java.util.Calendar} object to use in
4050      *            constructing the date
4051      * @return the column value; if the value is SQL {@code NULL},
4052      *         the result is {@code null}
4053      * @throws SQLException if (1) the given column name is not the name of
4054      *            a column in this rowset, (2) the cursor is not on one of
4055      *            this rowset's rows or its insert row, or (3) the designated
4056      *            column does not store an SQL {@code TIME} or
4057      *            {@code TIMESTAMP} value
4058      */
4059     public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
4060         throw new UnsupportedOperationException();
4061     }
4062 
4063     /**
4064      * Retrieves the value of the designated column in the current row
4065      * of this {@code CachedRowSetImpl} object as a
4066      * {@code java.sql.Timestamp} object, using the given
4067      * {@code Calendar} object to construct an appropriate
4068      * millisecond value for the date.
4069      *
4070      * @param columnName a {@code String} object that must match the
4071      *        SQL name of a column in this rowset, ignoring case
4072      * @param cal the {@code java.util.Calendar} object to use in
4073      *            constructing the date
4074      * @return the column value; if the value is SQL {@code NULL},
4075      *         the result is {@code null}
4076      * @throws SQLException if (1) the given column name is not the name of
4077      *            a column in this rowset, (2) the cursor is not on one of
4078      *            this rowset's rows or its insert row, or (3) the designated
4079      *            column does not store an SQL {@code DATE},
4080      *            {@code TIME}, or {@code TIMESTAMP} value
4081      */
4082     public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
4083         throw new UnsupportedOperationException();
4084     }
4085 
4086     /*
4087      * RowSetInternal Interface
4088      */
4089 
4090     /**
4091      * Retrieves the {@code Connection} object passed to this
4092      * {@code CachedRowSetImpl} object.  This connection may be
4093      * used to populate this rowset with data or to write data back
4094      * to its underlying data source.
4095      *
4096      * @return the {@code Connection} object passed to this rowset;
4097      *         may be {@code null} if there is no connection
4098      * @throws SQLException if an error occurs
4099      */
4100     public Connection getConnection() throws SQLException{
4101         throw new UnsupportedOperationException();
4102     }
4103 
4104     /**
4105      * Sets the metadata for this {@code CachedRowSetImpl} object
4106      * with the given {@code RowSetMetaData} object.
4107      *
4108      * @param md a {@code RowSetMetaData} object instance containing
4109      *            metadata about the columsn in the rowset
4110      * @throws SQLException if invalid meta data is supplied to the
4111      *            rowset
4112      */
4113     public void setMetaData(RowSetMetaData md) throws SQLException {
4114         throw new UnsupportedOperationException();
4115     }
4116 
4117     /**
4118      * Returns a result set containing the original value of the rowset. The
4119      * original value is the state of the {@code CachedRowSetImpl} after the
4120      * last population or synchronization (whichever occurred most recently) with
4121      * the data source.
4122      * <p>
4123      * The cursor is positioned before the first row in the result set.
4124      * Only rows contained in the result set returned by {@code getOriginal()}
4125      * are said to have an original value.
4126      *
4127      * @return the original result set of the rowset
4128      * @throws SQLException if an error occurs produce the
4129      *           {@code ResultSet} object
4130      */
4131     public ResultSet getOriginal() throws SQLException {
4132        throw new UnsupportedOperationException();
4133     }
4134 
4135     /**
4136      * Returns a result set containing the original value of the current
4137      * row only.
4138      * The original value is the state of the {@code CachedRowSetImpl} after
4139      * the last population or synchronization (whichever occurred most recently)
4140      * with the data source.
4141      *
4142      * @return the original result set of the row
4143      * @throws SQLException if there is no current row
4144      * @see #setOriginalRow
4145      */
4146     public ResultSet getOriginalRow() throws SQLException {
4147         throw new UnsupportedOperationException();
4148 
4149     }
4150 
4151     /**
4152      * Marks the current row in this rowset as being an original row.
4153      *
4154      * @throws SQLException if there is no current row
4155      * @see #getOriginalRow
4156      */
4157     public void setOriginalRow() throws SQLException {
4158         throw new UnsupportedOperationException();
4159     }
4160 
4161     /**
4162      * Marks all rows in this rowset as being original rows. Any updates
4163      * made to the rows become the original values for the rowset.
4164      * Calls to the method {@code setOriginal} connot be reversed.
4165      *
4166      * @throws SQLException if an error occurs
4167      */
4168     public void setOriginal() throws SQLException {
4169         throw new UnsupportedOperationException();
4170     }
4171 
4172     /**
4173      * Returns an identifier for the object (table) that was used to create this
4174      * rowset.
4175      *
4176      * @return a {@code String} object that identifies the table from
4177      *         which this {@code CachedRowSetImpl} object was derived
4178      * @throws SQLException if an error occurs
4179      */
4180     public String getTableName() throws SQLException {
4181         throw new UnsupportedOperationException();
4182     }
4183 
4184     /**
4185      * Sets the identifier for the table from which this rowset was derived
4186      * to the given table name.
4187      *
4188      * @param tabName a {@code String} object that identifies the
4189      *          table from which this {@code CachedRowSetImpl} object
4190      *          was derived
4191      * @throws SQLException if an error occurs
4192      */
4193     public void setTableName(String tabName) throws SQLException {
4194         throw new UnsupportedOperationException();
4195     }
4196 
4197     /**
4198      * Returns the columns that make a key to uniquely identify a
4199      * row in this {@code CachedRowSetImpl} object.
4200      *
4201      * @return an array of column numbers that constitutes a primary
4202      *           key for this rowset. This array should be empty
4203      *           if no column is representitive of a primary key
4204      * @throws SQLException if the rowset is empty or no columns
4205      *           are designated as primary keys
4206      * @see #setKeyColumns
4207      */
4208     public int[] getKeyColumns() throws SQLException {
4209         throw new UnsupportedOperationException();
4210     }
4211 
4212 
4213     /**
4214      * Sets this {@code CachedRowSetImpl} object's
4215      * {@code keyCols} field with the given array of column
4216      * numbers, which forms a key for uniquely identifying a row
4217      * in this rowset.
4218      *
4219      * @param keys an array of {@code int} indicating the
4220      *        columns that form a primary key for this
4221      *        {@code CachedRowSetImpl} object; every
4222      *        element in the array must be greater than
4223      *        {@code 0} and less than or equal to the number
4224      *        of columns in this rowset
4225      * @throws SQLException if any of the numbers in the
4226      *            given array is not valid for this rowset
4227      * @see #getKeyColumns
4228      */
4229     public void setKeyColumns(int [] keys) throws SQLException {
4230         throw new UnsupportedOperationException();
4231     }
4232 
4233     /**
4234      * Sets the designated column in either the current row or the insert
4235      * row of this {@code CachedRowSetImpl} object with the given
4236      * {@code double} value.
4237      *
4238      * This method updates a column value in either the current row or
4239      * the insert row of this rowset, but it does not update the
4240      * database.  If the cursor is on a row in the rowset, the
4241      * method {@link #updateRow} must be called to update the database.
4242      * If the cursor is on the insert row, the method {@link #insertRow}
4243      * must be called, which will insert the new row into both this rowset
4244      * and the database. Both of these methods must be called before the
4245      * cursor moves to another row.
4246      *
4247      * @param columnIndex the first column is {@code 1}, the second
4248      *        is {@code 2}, and so on; must be {@code 1} or larger
4249      *        and equal to or less than the number of columns in this rowset
4250      * @param ref the new column {@code java.sql.Ref} value
4251      * @throws SQLException if (1) the given column index is out of bounds,
4252      *        (2) the cursor is not on one of this rowset's rows or its
4253      *        insert row, or (3) this rowset is
4254      *        {@code ResultSet.CONCUR_READ_ONLY}
4255      */
4256     public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
4257         throw new UnsupportedOperationException();
4258     }
4259 
4260     /**
4261      * Sets the designated column in either the current row or the insert
4262      * row of this {@code CachedRowSetImpl} object with the given
4263      * {@code double} value.
4264      *
4265      * This method updates a column value in either the current row or
4266      * the insert row of this rowset, but it does not update the
4267      * database.  If the cursor is on a row in the rowset, the
4268      * method {@link #updateRow} must be called to update the database.
4269      * If the cursor is on the insert row, the method {@link #insertRow}
4270      * must be called, which will insert the new row into both this rowset
4271      * and the database. Both of these methods must be called before the
4272      * cursor moves to another row.
4273      *
4274      * @param columnName a {@code String} object that must match the
4275      *        SQL name of a column in this rowset, ignoring case
4276      * @param ref the new column {@code java.sql.Ref} value
4277      * @throws SQLException if (1) the given column name does not match the
4278      *        name of a column in this rowset, (2) the cursor is not on
4279      *        one of this rowset's rows or its insert row, or (3) this
4280      *        rowset is {@code ResultSet.CONCUR_READ_ONLY}
4281      */
4282     public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
4283         throw new UnsupportedOperationException();
4284     }
4285 
4286     /**
4287      * Sets the designated column in either the current row or the insert
4288      * row of this {@code CachedRowSetImpl} object with the given
4289      * {@code double} value.
4290      *
4291      * This method updates a column value in either the current row or
4292      * the insert row of this rowset, but it does not update the
4293      * database.  If the cursor is on a row in the rowset, the
4294      * method {@link #updateRow} must be called to update the database.
4295      * If the cursor is on the insert row, the method {@link #insertRow}
4296      * must be called, which will insert the new row into both this rowset
4297      * and the database. Both of these methods must be called before the
4298      * cursor moves to another row.
4299      *
4300      * @param columnIndex the first column is {@code 1}, the second
4301      *        is {@code 2}, and so on; must be {@code 1} or larger
4302      *        and equal to or less than the number of columns in this rowset
4303      * @param c the new column {@code Clob} value
4304      * @throws SQLException if (1) the given column index is out of bounds,
4305      *        (2) the cursor is not on one of this rowset's rows or its
4306      *        insert row, or (3) this rowset is
4307      *        {@code ResultSet.CONCUR_READ_ONLY}
4308      */
4309     public void updateClob(int columnIndex, Clob c) throws SQLException {
4310        throw new UnsupportedOperationException();
4311     }
4312 
4313     /**
4314      * Sets the designated column in either the current row or the insert
4315      * row of this {@code CachedRowSetImpl} object with the given
4316      * {@code double} value.
4317      *
4318      * This method updates a column value in either the current row or
4319      * the insert row of this rowset, but it does not update the
4320      * database.  If the cursor is on a row in the rowset, the
4321      * method {@link #updateRow} must be called to update the database.
4322      * If the cursor is on the insert row, the method {@link #insertRow}
4323      * must be called, which will insert the new row into both this rowset
4324      * and the database. Both of these methods must be called before the
4325      * cursor moves to another row.
4326      *
4327      * @param columnName a {@code String} object that must match the
4328      *        SQL name of a column in this rowset, ignoring case
4329      * @param c the new column {@code Clob}value
4330      * @throws SQLException if (1) the given column name does not match the
4331      *            name of a column in this rowset, (2) the cursor is not on
4332      *            one of this rowset's rows or its insert row, or (3) this
4333      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
4334      */
4335     public void updateClob(String columnName, Clob c) throws SQLException {
4336         throw new UnsupportedOperationException();
4337     }
4338 
4339     /**
4340      * Sets the designated column in either the current row or the insert
4341      * row of this {@code CachedRowSetImpl} object with the given
4342      * {@code java.sql.Blob} value.
4343      *
4344      * This method updates a column value in either the current row or
4345      * the insert row of this rowset, but it does not update the
4346      * database.  If the cursor is on a row in the rowset, the
4347      * method {@link #updateRow} must be called to update the database.
4348      * If the cursor is on the insert row, the method {@link #insertRow}
4349      * must be called, which will insert the new row into both this rowset
4350      * and the database. Both of these methods must be called before the
4351      * cursor moves to another row.
4352      *
4353      * @param columnIndex the first column is {@code 1}, the second
4354      *        is {@code 2}, and so on; must be {@code 1} or larger
4355      *        and equal to or less than the number of columns in this rowset
4356      * @param b the new column {@code Blob} value
4357      * @throws SQLException if (1) the given column index is out of bounds,
4358      *            (2) the cursor is not on one of this rowset's rows or its
4359      *            insert row, or (3) this rowset is
4360      *            {@code ResultSet.CONCUR_READ_ONLY}
4361      */
4362     public void updateBlob(int columnIndex, Blob b) throws SQLException {
4363        throw new UnsupportedOperationException();
4364     }
4365 
4366     /**
4367      * Sets the designated column in either the current row or the insert
4368      * row of this {@code CachedRowSetImpl} object with the given
4369      * {@code java.sql.Blob } value.
4370      *
4371      * This method updates a column value in either the current row or
4372      * the insert row of this rowset, but it does not update the
4373      * database.  If the cursor is on a row in the rowset, the
4374      * method {@link #updateRow} must be called to update the database.
4375      * If the cursor is on the insert row, the method {@link #insertRow}
4376      * must be called, which will insert the new row into both this rowset
4377      * and the database. Both of these methods must be called before the
4378      * cursor moves to another row.
4379      *
4380      * @param columnName a {@code String} object that must match the
4381      *        SQL name of a column in this rowset, ignoring case
4382      * @param b the new column {@code Blob} value
4383      * @throws SQLException if (1) the given column name does not match the
4384      *            name of a column in this rowset, (2) the cursor is not on
4385      *            one of this rowset's rows or its insert row, or (3) this
4386      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
4387      */
4388     public void updateBlob(String columnName, Blob b) throws SQLException {
4389         throw new UnsupportedOperationException();
4390     }
4391 
4392     /**
4393      * Sets the designated column in either the current row or the insert
4394      * row of this {@code CachedRowSetImpl} object with the given
4395      * {@code java.sql.Array} values.
4396      *
4397      * This method updates a column value in either the current row or
4398      * the insert row of this rowset, but it does not update the
4399      * database.  If the cursor is on a row in the rowset, the
4400      * method {@link #updateRow} must be called to update the database.
4401      * If the cursor is on the insert row, the method {@link #insertRow}
4402      * must be called, which will insert the new row into both this rowset
4403      * and the database. Both of these methods must be called before the
4404      * cursor moves to another row.
4405      *
4406      * @param columnIndex the first column is {@code 1}, the second
4407      *        is {@code 2}, and so on; must be {@code 1} or larger
4408      *        and equal to or less than the number of columns in this rowset
4409      * @param a the new column {@code Array} value
4410      * @throws SQLException if (1) the given column index is out of bounds,
4411      *            (2) the cursor is not on one of this rowset's rows or its
4412      *            insert row, or (3) this rowset is
4413      *            {@code ResultSet.CONCUR_READ_ONLY}
4414      */
4415     public void updateArray(int columnIndex, Array a) throws SQLException {
4416         throw new UnsupportedOperationException();
4417     }
4418 
4419     /**
4420      * Sets the designated column in either the current row or the insert
4421      * row of this {@code CachedRowSetImpl} object with the given
4422      * {@code java.sql.Array} value.
4423      *
4424      * This method updates a column value in either the current row or
4425      * the insert row of this rowset, but it does not update the
4426      * database.  If the cursor is on a row in the rowset, the
4427      * method {@link #updateRow} must be called to update the database.
4428      * If the cursor is on the insert row, the method {@link #insertRow}
4429      * must be called, which will insert the new row into both this rowset
4430      * and the database. Both of these methods must be called before the
4431      * cursor moves to another row.
4432      *
4433      * @param columnName a {@code String} object that must match the
4434      *        SQL name of a column in this rowset, ignoring case
4435      * @param a the new column {@code Array} value
4436      * @throws SQLException if (1) the given column name does not match the
4437      *            name of a column in this rowset, (2) the cursor is not on
4438      *            one of this rowset's rows or its insert row, or (3) this
4439      *            rowset is {@code ResultSet.CONCUR_READ_ONLY}
4440      */
4441     public void updateArray(String columnName, Array a) throws SQLException {
4442         throw new UnsupportedOperationException();
4443     }
4444 
4445 
4446     /**
4447      * Retrieves the value of the designated column in this
4448      * {@code CachedRowSetImpl} object as a {@code java.net.URL} object
4449      * in the Java programming language.
4450      *
4451      * @return a java.net.URL object containing the resource reference described by
4452      * the URL
4453      * @throws SQLException if (1) the given column index is out of bounds,
4454      * (2) the cursor is not on one of this rowset's rows or its
4455      * insert row, or (3) the designated column does not store an
4456      * SQL {@code DATALINK} value.
4457      * @see #getURL(String)
4458      */
4459     public java.net.URL getURL(int columnIndex) throws SQLException {
4460         throw new UnsupportedOperationException();
4461     }
4462 
4463     /**
4464      * Retrieves the value of the designated column in this
4465      * {@code CachedRowSetImpl} object as a {@code java.net.URL} object
4466      * in the Java programming language.
4467      *
4468      * @return a java.net.URL object containing the resource reference described by
4469      * the URL
4470      * @throws SQLException if (1) the given column name not the name of a column
4471      * in this rowset, or
4472      * (2) the cursor is not on one of this rowset's rows or its
4473      * insert row, or (3) the designated column does not store an
4474      * SQL {@code DATALINK} value.
4475      * @see #getURL(int)
4476      */
4477     public java.net.URL getURL(String columnName) throws SQLException {
4478         throw new UnsupportedOperationException();
4479 
4480     }
4481 
4482     /**
4483      * The first warning reported by calls on this {@code CachedRowSetImpl}
4484      * object is returned. Subsequent {@code CachedRowSetImpl} warnings will
4485      * be chained to this {@code SQLWarning}. All {@code RowSetWarnings}
4486      * warnings are generated in the disconnected environment and remain a
4487      * seperate warning chain to that provided by the {@code getWarnings}
4488      * method.
4489      *
4490      * <P>The warning chain is automatically cleared each time a new
4491      * row is read.
4492      *
4493      * <P><B>Note:</B> This warning chain only covers warnings caused
4494      * by {@code CachedRowSet} (and their child interface)
4495      * methods. All {@code SQLWarnings} can be obtained using the
4496      * {@code getWarnings} method which tracks warnings generated
4497      * by the underlying JDBC driver.
4498      * @return the first SQLWarning or null
4499      *
4500      */
4501     public RowSetWarning getRowSetWarnings() {
4502         throw new UnsupportedOperationException();
4503     }
4504 
4505      /**
4506      * Commits all changes performed by the {@code acceptChanges()}
4507      * methods
4508      *
4509      * @see java.sql.Connection#commit
4510      */
4511     public void commit() throws SQLException {
4512         throw new UnsupportedOperationException();
4513     }
4514 
4515     /**
4516      * Rolls back all changes performed by the {@code acceptChanges()}
4517      * methods
4518      *
4519      * @see java.sql.Connection#rollback
4520      */
4521     public void rollback() throws SQLException {
4522         throw new UnsupportedOperationException();
4523     }
4524 
4525     /**
4526      * Rolls back all changes performed by the {@code acceptChanges()}
4527      * to the last {@code Savepoint} transaction marker.
4528      *
4529      * @see java.sql.Connection#rollback(Savepoint)
4530      */
4531     public void rollback(Savepoint s) throws SQLException {
4532         throw new UnsupportedOperationException();
4533     }
4534 
4535     /**
4536      * Unsets the designated parameter to the given int array.
4537      * This was set using {@code setMatchColumn}
4538      * as the column which will form the basis of the join.
4539      * <P>
4540      * The parameter value unset by this method should be same
4541      * as was set.
4542      *
4543      * @param columnIdxes the index into this rowset
4544      *        object's internal representation of parameter values
4545      * @throws SQLException if an error occurs or the
4546      *  parameter index is out of bounds or if the columnIdx is
4547      *  not the same as set using {@code setMatchColumn(int [])}
4548      */
4549     public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
4550          throw new UnsupportedOperationException();
4551     }
4552 
4553    /**
4554      * Unsets the designated parameter to the given String array.
4555      * This was set using {@code setMatchColumn}
4556      * as the column which will form the basis of the join.
4557      * <P>
4558      * The parameter value unset by this method should be same
4559      * as was set.
4560      *
4561      * @param columnIdxes the index into this rowset
4562      *        object's internal representation of parameter values
4563      * @throws SQLException if an error occurs or the
4564      *  parameter index is out of bounds or if the columnName is
4565      *  not the same as set using {@code setMatchColumn(String [])}
4566      */
4567     public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
4568        throw new UnsupportedOperationException();
4569     }
4570 
4571     /**
4572      * Retrieves the column name as {@code String} array
4573      * that was set using {@code setMatchColumn(String [])}
4574      * for this rowset.
4575      *
4576      * @return a {@code String} array object that contains the column names
4577      *         for the rowset which has this the match columns
4578      *
4579      * @throws SQLException if an error occurs or column name is not set
4580      */
4581     public String[] getMatchColumnNames() throws SQLException {
4582         throw new UnsupportedOperationException();
4583     }
4584 
4585     /**
4586      * Retrieves the column id as {@code int} array that was set using
4587      * {@code setMatchColumn(int [])} for this rowset.
4588      *
4589      * @return a {@code int} array object that contains the column ids
4590      *         for the rowset which has this as the match columns.
4591      *
4592      * @throws SQLException if an error occurs or column index is not set
4593      */
4594     public int[] getMatchColumnIndexes() throws SQLException {
4595         throw new UnsupportedOperationException();
4596     }
4597 
4598     /**
4599      * Sets the designated parameter to the given int array.
4600      * This forms the basis of the join for the
4601      * {@code JoinRowSet} as the column which will form the basis of the
4602      * join.
4603      * <P>
4604      * The parameter value set by this method is stored internally and
4605      * will be supplied as the appropriate parameter in this rowset's
4606      * command when the method {@code getMatchColumnIndexes} is called.
4607      *
4608      * @param columnIdxes the indexes into this rowset
4609      *        object's internal representation of parameter values; the
4610      *        first parameter is 0, the second is 1, and so on; must be
4611      *        {@code 0} or greater
4612      * @throws SQLException if an error occurs or the
4613      *                         parameter index is out of bounds
4614      */
4615     public void setMatchColumn(int[] columnIdxes) throws SQLException {
4616         throw new UnsupportedOperationException();
4617     }
4618 
4619     /**
4620      * Sets the designated parameter to the given String array.
4621      *  This forms the basis of the join for the
4622      * {@code JoinRowSet} as the column which will form the basis of the
4623      * join.
4624      * <P>
4625      * The parameter value set by this method is stored internally and
4626      * will be supplied as the appropriate parameter in this rowset's
4627      * command when the method {@code getMatchColumn} is called.
4628      *
4629      * @param columnNames the name of the column into this rowset
4630      *        object's internal representation of parameter values
4631      * @throws SQLException if an error occurs or the
4632      *  parameter index is out of bounds
4633      */
4634     public void setMatchColumn(String[] columnNames) throws SQLException {
4635         throw new UnsupportedOperationException();
4636     }
4637 
4638 
4639     /**
4640      * Sets the designated parameter to the given {@code int}
4641      * object.  This forms the basis of the join for the
4642      * {@code JoinRowSet} as the column which will form the basis of the
4643      * join.
4644      * <P>
4645      * The parameter value set by this method is stored internally and
4646      * will be supplied as the appropriate parameter in this rowset's
4647      * command when the method {@code getMatchColumn} is called.
4648      *
4649      * @param columnIdx the index into this rowset
4650      *        object's internal representation of parameter values; the
4651      *        first parameter is 0, the second is 1, and so on; must be
4652      *        {@code 0} or greater
4653      * @throws SQLException if an error occurs or the
4654      *                         parameter index is out of bounds
4655      */
4656     public void setMatchColumn(int columnIdx) throws SQLException {
4657         throw new UnsupportedOperationException();
4658     }
4659 
4660     /**
4661      * Sets the designated parameter to the given {@code String}
4662      * object.  This forms the basis of the join for the
4663      * {@code JoinRowSet} as the column which will form the basis of the
4664      * join.
4665      * <P>
4666      * The parameter value set by this method is stored internally and
4667      * will be supplied as the appropriate parameter in this rowset's
4668      * command when the method {@code getMatchColumn} is called.
4669      *
4670      * @param columnName the name of the column into this rowset
4671      *        object's internal representation of parameter values
4672      * @throws SQLException if an error occurs or the
4673      *  parameter index is out of bounds
4674      */
4675     public void setMatchColumn(String columnName) throws SQLException {
4676         throw new UnsupportedOperationException();
4677     }
4678 
4679     /**
4680      * Unsets the designated parameter to the given {@code int}
4681      * object.  This was set using {@code setMatchColumn}
4682      * as the column which will form the basis of the join.
4683      * <P>
4684      * The parameter value unset by this method should be same
4685      * as was set.
4686      *
4687      * @param columnIdx the index into this rowset
4688      *        object's internal representation of parameter values
4689      * @throws SQLException if an error occurs or the
4690      *  parameter index is out of bounds or if the columnIdx is
4691      *  not the same as set using {@code setMatchColumn(int)}
4692      */
4693     public void unsetMatchColumn(int columnIdx) throws SQLException {
4694         throw new UnsupportedOperationException();
4695     }
4696 
4697     /**
4698      * Unsets the designated parameter to the given {@code String}
4699      * object.  This was set using {@code setMatchColumn}
4700      * as the column which will form the basis of the join.
4701      * <P>
4702      * The parameter value unset by this method should be same
4703      * as was set.
4704      *
4705      * @param columnName the index into this rowset
4706      *        object's internal representation of parameter values
4707      * @throws SQLException if an error occurs or the
4708      *  parameter index is out of bounds or if the columnName is
4709      *  not the same as set using {@code setMatchColumn(String)}
4710      */
4711     public void unsetMatchColumn(String columnName) throws SQLException {
4712         throw new UnsupportedOperationException();
4713     }
4714 
4715     /**
4716      * Notifies registered listeners that a RowSet object in the given RowSetEvent
4717      * object has populated a number of additional rows. The {@code numRows} parameter
4718      * ensures that this event will only be fired every {@code numRow}.
4719      * <p>
4720      * The source of the event can be retrieved with the method event.getSource.
4721      *
4722      * @param event a {@code RowSetEvent} object that contains the
4723      *     {@code RowSet} object that is the source of the events
4724      * @param numRows when populating, the number of rows interval on which the
4725      *     {@code CachedRowSet} populated should fire; the default value
4726      *     is zero; cannot be less than {@code fetchSize} or zero
4727      */
4728     public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException {
4729         throw new UnsupportedOperationException();
4730     }
4731 
4732     /**
4733      * Populates this {@code CachedRowSet} object with data from
4734      * the given {@code ResultSet} object. While related to the {@code populate(ResultSet)}
4735      * method, an additional parameter is provided to allow starting position within
4736      * the {@code ResultSet} from where to populate the CachedRowSet
4737      * instance.
4738      *
4739      * This method is an alternative to the method {@code execute}
4740      * for filling the rowset with data.  The method {@code populate}
4741      * does not require that the properties needed by the method
4742      * {@code execute}, such as the {@code command} property,
4743      * be set. This is true because the method {@code populate}
4744      * is given the {@code ResultSet} object from
4745      * which to get data and thus does not need to use the properties
4746      * required for setting up a connection and executing this
4747      * {@code CachedRowSetImpl} object's command.
4748      * <P>
4749      * After populating this rowset with data, the method
4750      * {@code populate} sets the rowset's metadata and
4751      * then sends a {@code RowSetChangedEvent} object
4752      * to all registered listeners prior to returning.
4753      *
4754      * @param data the {@code ResultSet} object containing the data
4755      *             to be read into this {@code CachedRowSetImpl} object
4756      * @param start the integer specifing the position in the
4757      *        {@code ResultSet} object to popultate the
4758      *        {@code CachedRowSetImpl} object.
4759      * @throws SQLException if an error occurs; or the max row setting is
4760      *          violated while populating the RowSet.Also id the start position
4761      *          is negative.
4762      * @see #execute
4763      */
4764      public void populate(ResultSet data, int start) throws SQLException{
4765         throw new UnsupportedOperationException();
4766 
4767      }
4768 
4769     /**
4770      * The nextPage gets the next page, that is a {@code CachedRowSetImpl} object
4771      * containing the number of rows specified by page size.
4772      * @return boolean value true indicating whether there are more pages to come and
4773      *         false indicating that this is the last page.
4774      * @throws SQLException if an error occurs or this called before calling populate.
4775      */
4776      public boolean nextPage() throws SQLException {
4777          throw new UnsupportedOperationException();
4778      }
4779 
4780     /**
4781      * This is the setter function for setting the size of the page, which specifies
4782      * how many rows have to be retrived at a time.
4783      *
4784      * @param size which is the page size
4785      * @throws SQLException if size is less than zero or greater than max rows.
4786      */
4787      public void setPageSize (int size) throws SQLException {
4788         throw new UnsupportedOperationException();
4789      }
4790 
4791     /**
4792      * This is the getter function for the size of the page.
4793      *
4794      * @return an integer that is the page size.
4795      */
4796     public int getPageSize() {
4797         throw new UnsupportedOperationException();
4798     }
4799 
4800 
4801     /**
4802      * Retrieves the data present in the page prior to the page from where it is
4803      * called.
4804      * @return boolean value true if it retrieves the previous page, flase if it
4805      *         is on the first page.
4806      * @throws SQLException if it is called before populate is called or ResultSet
4807      *         is of type {@code ResultSet.TYPE_FORWARD_ONLY} or if an error
4808      *         occurs.
4809      */
4810     public boolean previousPage() throws SQLException {
4811        throw new UnsupportedOperationException();
4812     }
4813 
4814     /**
4815        * Updates the designated column with a character stream value, which will
4816        * have the specified number of bytes. The driver does the necessary conversion
4817        * from Java character format to the national character set in the database.
4818        * It is intended for use when updating NCHAR, NVARCHAR and LONGNVARCHAR columns.
4819        * The updater methods are used to update column values in the current row or
4820        * the insert row. The updater methods do not update the underlying database;
4821        * instead the updateRow or insertRow methods are called to update the database.
4822        *
4823        * @param columnIndex - the first column is 1, the second is 2, ...
4824        * @param x - the new column value
4825        * @param length - the length of the stream
4826        * @exception SQLException if a database access error occurs
4827        * @since 1.6
4828        */
4829        public void updateNCharacterStream(int columnIndex,
4830                             java.io.Reader x,
4831                             int length)
4832                             throws SQLException {
4833           throw new UnsupportedOperationException("Operation not yet supported");
4834        }
4835 
4836      /**
4837        * Updates the designated column with a character stream value, which will
4838        * have the specified number of bytes. The driver does the necessary conversion


< prev index next >