0N/A/*
3999N/A * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage com.sun.rowset;
0N/A
0N/Aimport java.sql.*;
0N/Aimport javax.sql.*;
0N/Aimport javax.naming.*;
0N/Aimport java.io.*;
0N/Aimport java.math.*;
0N/Aimport java.util.*;
0N/A
0N/Aimport javax.sql.rowset.*;
2796N/Aimport javax.sql.rowset.spi.SyncProvider;
2796N/Aimport javax.sql.rowset.spi.SyncProviderException;
0N/A
0N/A/**
0N/A * The standard implementation of the <code>JoinRowSet</code>
0N/A * interface providing an SQL <code>JOIN</code> between <code>RowSet</code>
0N/A * objects.
0N/A * <P>
0N/A * The implementation provides an ANSI-style <code>JOIN</code> providing an
0N/A * inner join between two tables. Any unmatched rows in either table of the
0N/A * join are discarded.
0N/A * <p>
0N/A * Typically, a <code>JoinRowSet</code> implementation is leveraged by
0N/A * <code>RowSet</code> instances that are in a disconnected environment and
0N/A * thus do not have the luxury of an open connection to the data source to
0N/A * establish logical relationships between themselves. In other words, it is
0N/A * largely <code>CachedRowSet</code> objects and implementations derived from
0N/A * the <code>CachedRowSet</code> interface that will use the <code>JoinRowSetImpl</code>
0N/A * implementation.
0N/A *
0N/A * @author Amit Handa, Jonathan Bruce
0N/A */
0N/Apublic class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet {
0N/A /**
0N/A * A <code>Vector</code> object that contains the <code>RowSet</code> objects
0N/A * that have been added to this <code>JoinRowSet</code> object.
3999N/A */
3999N/A private Vector<CachedRowSetImpl> vecRowSetsInJOIN;
0N/A
0N/A /**
0N/A * The <code>CachedRowSet</code> object that encapsulates this
0N/A * <code>JoinRowSet</code> object.
0N/A * When <code>RowSet</code> objects are added to this <code>JoinRowSet</code>
0N/A * object, they are also added to <i>crsInternal</i> to form the same kind of
0N/A * SQL <code>JOIN</code>. As a result, methods for making updates to this
0N/A * <code>JoinRowSet</code> object can use <i>crsInternal</i> methods in their
0N/A * implementations.
0N/A */
0N/A private CachedRowSetImpl crsInternal;
0N/A
0N/A /**
0N/A * A <code>Vector</code> object containing the types of join that have been set
0N/A * for this <code>JoinRowSet</code> object.
0N/A * The last join type set forms the basis of succeeding joins.
0N/A */
3999N/A private Vector<Integer> vecJoinType;
0N/A
0N/A /**
0N/A * A <code>Vector</code> object containing the names of all the tables entering
0N/A * the join.
0N/A */
3999N/A private Vector<String> vecTableNames;
0N/A
0N/A /**
0N/A * An <code>int</code> that indicates the column index of the match column.
0N/A */
0N/A private int iMatchKey;
0N/A
0N/A /**
0N/A * A <code>String</code> object that stores the name of the match column.
0N/A */
0N/A private String strMatchKey ;
0N/A
0N/A /**
0N/A * An array of <code>boolean</code> values indicating the types of joins supported
0N/A * by this <code>JoinRowSet</code> implementation.
0N/A */
0N/A boolean[] supportedJOINs;
0N/A
0N/A /**
0N/A * The <code>WebRowSet</code> object that encapsulates this <code>JoinRowSet</code>
0N/A * object. This <code>WebRowSet</code> object allows this <code>JoinRowSet</code>
0N/A * object to leverage the properties and methods of a <code>WebRowSet</code>
0N/A * object.
0N/A */
0N/A private WebRowSet wrs;
0N/A
0N/A
0N/A /**
0N/A * Constructor for <code>JoinRowSetImpl</code> class. Configures various internal data
0N/A * structures to provide mechanisms required for <code>JoinRowSet</code> interface
0N/A * implementation.
0N/A *
0N/A * @throws SQLException if an error occurs in instantiating an instance of
0N/A * <code>JoinRowSetImpl</code>
0N/A */
0N/A public JoinRowSetImpl() throws SQLException {
0N/A
3999N/A vecRowSetsInJOIN = new Vector<CachedRowSetImpl>();
0N/A crsInternal = new CachedRowSetImpl();
3999N/A vecJoinType = new Vector<Integer>();
3999N/A vecTableNames = new Vector<String>();
0N/A iMatchKey = -1;
0N/A strMatchKey = null;
0N/A supportedJOINs =
0N/A new boolean[] {false, true, false, false, false};
2741N/A try {
2741N/A resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
2741N/A } catch(IOException ioe) {
2741N/A throw new RuntimeException(ioe);
2741N/A }
0N/A
0N/A }
0N/A
0N/A /**
0N/A * Adds the given <code>RowSet</code> object to this
0N/A * <code>JoinRowSet</code> object. If this
0N/A * rowset is the first to be added to the <code>JoinRowSet</code>
0N/A * object, it forms the basis for the <code>JOIN</code>
0N/A * relationships to be formed.
0N/A * <p>
0N/A * This method should be used when the given <code>RowSet</code> object
0N/A * already has a match column set.
0N/A *
0N/A * @param rowset the <code>RowSet</code> object that implements the
0N/A * <code>Joinable</code> interface and is to be added
0N/A * to this <code>JoinRowSet</code> object
0N/A * @throws SQLException if an empty <code>RowSet</code> is added to the to the
0N/A * <code>JoinRowSet</code>; if a match column is not set; or if an
0N/A * additional <code>RowSet</code> violates the active <code>JOIN</code>
0N/A * @see CachedRowSet#setMatchColumn
0N/A */
0N/A public void addRowSet(Joinable rowset) throws SQLException {
0N/A boolean boolColId, boolColName;
0N/A
0N/A boolColId = false;
0N/A boolColName = false;
0N/A CachedRowSetImpl cRowset;
0N/A
0N/A if(!(rowset instanceof RowSet)) {
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notinstance").toString());
0N/A }
0N/A
0N/A if(rowset instanceof JdbcRowSetImpl ) {
0N/A cRowset = new CachedRowSetImpl();
0N/A cRowset.populate((RowSet)rowset);
0N/A if(cRowset.size() == 0){
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.emptyrowset").toString());
0N/A }
0N/A
0N/A
0N/A try {
0N/A int matchColumnCount = 0;
0N/A for(int i=0; i< rowset.getMatchColumnIndexes().length; i++) {
0N/A if(rowset.getMatchColumnIndexes()[i] != -1)
0N/A ++ matchColumnCount;
0N/A else
0N/A break;
0N/A }
0N/A int[] pCol = new int[matchColumnCount];
0N/A for(int i=0; i<matchColumnCount; i++)
0N/A pCol[i] = rowset.getMatchColumnIndexes()[i];
0N/A cRowset.setMatchColumn(pCol);
0N/A } catch(SQLException sqle) {
0N/A
0N/A }
0N/A
0N/A } else {
0N/A cRowset = (CachedRowSetImpl)rowset;
0N/A if(cRowset.size() == 0){
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.emptyrowset").toString());
0N/A }
0N/A }
0N/A
0N/A // Either column id or column name will be set
0N/A // If both not set throw exception.
0N/A
0N/A try {
0N/A iMatchKey = (cRowset.getMatchColumnIndexes())[0];
0N/A } catch(SQLException sqle) {
0N/A //if not set catch the exception but do nothing now.
0N/A boolColId = true;
0N/A }
0N/A
0N/A try {
0N/A strMatchKey = (cRowset.getMatchColumnNames())[0];
0N/A } catch(SQLException sqle) {
0N/A //if not set catch the exception but do nothing now.
0N/A boolColName = true;
0N/A }
0N/A
0N/A if(boolColId && boolColName) {
0N/A // neither setter methods have been used to set
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.matchnotset").toString());
0N/A } else {
0N/A //if(boolColId || boolColName)
0N/A // either of the setter methods have been set.
0N/A if(boolColId){
0N/A //
3999N/A ArrayList<Integer> indices = new ArrayList<>();
0N/A for(int i=0;i<cRowset.getMatchColumnNames().length;i++) {
0N/A if( (strMatchKey = (cRowset.getMatchColumnNames())[i]) != null) {
0N/A iMatchKey = cRowset.findColumn(strMatchKey);
0N/A indices.add(iMatchKey);
0N/A }
0N/A else
0N/A break;
0N/A }
0N/A int[] indexes = new int[indices.size()];
0N/A for(int i=0; i<indices.size();i++)
0N/A indexes[i] = ((Integer)indices.get(i)).intValue();
0N/A cRowset.setMatchColumn(indexes);
0N/A // Set the match column here because join will be
0N/A // based on columnId,
0N/A // (nested for loop in initJOIN() checks for equality
0N/A // based on columnIndex)
0N/A } else {
0N/A //do nothing, iMatchKey is set.
0N/A }
0N/A // Now both iMatchKey and strMatchKey have been set pointing
0N/A // to the same column
0N/A }
0N/A
0N/A // Till first rowset setJoinType may not be set because
0N/A // default type is JoinRowSet.INNER_JOIN which should
0N/A // be set and for subsequent additions of rowset, if not set
0N/A // keep on adding join type as JoinRowSet.INNER_JOIN
0N/A // to vecJoinType.
0N/A
0N/A initJOIN(cRowset);
0N/A }
0N/A
0N/A /**
0N/A * Adds the given <code>RowSet</code> object to the <code>JOIN</code> relation
0N/A * and sets the designated column as the match column.
0N/A * If the given <code>RowSet</code>
0N/A * object is the first to be added to this <code>JoinRowSet</code>
0N/A * object, it forms the basis of the <code>JOIN</code> relationship to be formed
0N/A * when other <code>RowSet</code> objects are added .
0N/A * <P>
0N/A * This method should be used when the given <code>RowSet</code> object
0N/A * does not already have a match column set.
0N/A *
0N/A * @param rowset a <code>RowSet</code> object to be added to
0N/A * the <code>JOIN</code> relation; must implement the <code>Joinable</code>
0N/A * interface
0N/A * @param columnIdx an <code>int</code> giving the index of the column to be set as
0N/A * the match column
0N/A * @throws SQLException if (1) an empty <code>RowSet</code> object is added to this
0N/A * <code>JoinRowSet</code> object, (2) a match column has not been set,
0N/A * or (3) the <code>RowSet</code> object being added violates the active
0N/A * <code>JOIN</code>
0N/A * @see CachedRowSet#unsetMatchColumn
0N/A */
0N/A public void addRowSet(RowSet rowset, int columnIdx) throws SQLException {
0N/A //passing the rowset as well as the columnIdx to form the joinrowset.
0N/A
0N/A ((CachedRowSetImpl)rowset).setMatchColumn(columnIdx);
0N/A
0N/A addRowSet((Joinable)rowset);
0N/A }
0N/A
0N/A /**
0N/A * Adds the given <code>RowSet</code> object to the <code>JOIN</code> relationship
0N/A * and sets the designated column as the match column. If the given
0N/A * <code>RowSet</code>
0N/A * object is the first to be added to this <code>JoinRowSet</code>
0N/A * object, it forms the basis of the <code>JOIN</code> relationship to be formed
0N/A * when other <code>RowSet</code> objects are added .
0N/A * <P>
0N/A * This method should be used when the given <code>RowSet</code> object
0N/A * does not already have a match column set.
0N/A *
0N/A * @param rowset a <code>RowSet</code> object to be added to
0N/A * the <code>JOIN</code> relation
0N/A * @param columnName a <code>String</code> object giving the name of the column
0N/A * to be set as the match column; must implement the <code>Joinable</code>
0N/A * interface
0N/A * @throws SQLException if (1) an empty <code>RowSet</code> object is added to this
0N/A * <code>JoinRowSet</code> object, (2) a match column has not been set,
0N/A * or (3) the <code>RowSet</code> object being added violates the active
0N/A * <code>JOIN</code>
0N/A */
0N/A public void addRowSet(RowSet rowset, String columnName) throws SQLException {
0N/A //passing the rowset as well as the columnIdx to form the joinrowset.
0N/A ((CachedRowSetImpl)rowset).setMatchColumn(columnName);
0N/A addRowSet((Joinable)rowset);
0N/A }
0N/A
0N/A /**
0N/A * Adds the given <code>RowSet</code> objects to the <code>JOIN</code> relationship
0N/A * and sets the designated columns as the match columns. If the first
0N/A * <code>RowSet</code> object in the array of <code>RowSet</code> objects
0N/A * is the first to be added to this <code>JoinRowSet</code>
0N/A * object, it forms the basis of the <code>JOIN</code> relationship to be formed
0N/A * when other <code>RowSet</code> objects are added.
0N/A * <P>
0N/A * The first <code>int</code>
0N/A * in <i>columnIdx</i> is used to set the match column for the first
0N/A * <code>RowSet</code> object in <i>rowset</i>, the second <code>int</code>
0N/A * in <i>columnIdx</i> is used to set the match column for the second
0N/A * <code>RowSet</code> object in <i>rowset</i>, and so on.
0N/A * <P>
0N/A * This method should be used when the given <code>RowSet</code> objects
0N/A * do not already have match columns set.
0N/A *
0N/A * @param rowset an array of <code>RowSet</code> objects to be added to
0N/A * the <code>JOIN</code> relation; each <code>RowSet</code> object must
0N/A * implement the <code>Joinable</code> interface
0N/A * @param columnIdx an array of <code>int</code> values designating the columns
0N/A * to be set as the
0N/A * match columns for the <code>RowSet</code> objects in <i>rowset</i>
0N/A * @throws SQLException if the number of <code>RowSet</code> objects in
0N/A * <i>rowset</i> is not equal to the number of <code>int</code> values
0N/A * in <i>columnIdx</i>
0N/A */
0N/A public void addRowSet(RowSet[] rowset,
0N/A int[] columnIdx) throws SQLException {
0N/A //validate if length of rowset array is same as length of int array.
0N/A if(rowset.length != columnIdx.length) {
0N/A throw new SQLException
0N/A (resBundle.handleGetObject("joinrowsetimpl.numnotequal").toString());
0N/A } else {
0N/A for(int i=0; i< rowset.length; i++) {
0N/A ((CachedRowSetImpl)rowset[i]).setMatchColumn(columnIdx[i]);
0N/A addRowSet((Joinable)rowset[i]);
0N/A } //end for
0N/A } //end if
0N/A
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Adds the given <code>RowSet</code> objects to the <code>JOIN</code> relationship
0N/A * and sets the designated columns as the match columns. If the first
0N/A * <code>RowSet</code> object in the array of <code>RowSet</code> objects
0N/A * is the first to be added to this <code>JoinRowSet</code>
0N/A * object, it forms the basis of the <code>JOIN</code> relationship to be formed
0N/A * when other <code>RowSet</code> objects are added.
0N/A * <P>
0N/A * The first <code>String</code> object
0N/A * in <i>columnName</i> is used to set the match column for the first
0N/A * <code>RowSet</code> object in <i>rowset</i>, the second <code>String</code>
0N/A * object in <i>columnName</i> is used to set the match column for the second
0N/A * <code>RowSet</code> object in <i>rowset</i>, and so on.
0N/A * <P>
0N/A * This method should be used when the given <code>RowSet</code> objects
0N/A * do not already have match columns set.
0N/A *
0N/A * @param rowset an array of <code>RowSet</code> objects to be added to
0N/A * the <code>JOIN</code> relation; each <code>RowSet</code> object must
0N/A * implement the <code>Joinable</code> interface
0N/A * @param columnName an array of <code>String</code> objects designating the columns
0N/A * to be set as the
0N/A * match columns for the <code>RowSet</code> objects in <i>rowset</i>
0N/A * @throws SQLException if the number of <code>RowSet</code> objects in
0N/A * <i>rowset</i> is not equal to the number of <code>String</code> objects
0N/A * in <i>columnName</i>, an empty <code>JdbcRowSet</code> is added to the
0N/A * <code>JoinRowSet</code>, if a match column is not set,
0N/A * or one or the <code>RowSet</code> objects in <i>rowset</i> violates the
0N/A * active <code>JOIN</code>
0N/A */
0N/A public void addRowSet(RowSet[] rowset,
0N/A String[] columnName) throws SQLException {
0N/A //validate if length of rowset array is same as length of int array.
0N/A
0N/A if(rowset.length != columnName.length) {
0N/A throw new SQLException
0N/A (resBundle.handleGetObject("joinrowsetimpl.numnotequal").toString());
0N/A } else {
0N/A for(int i=0; i< rowset.length; i++) {
0N/A ((CachedRowSetImpl)rowset[i]).setMatchColumn(columnName[i]);
0N/A addRowSet((Joinable)rowset[i]);
0N/A } //end for
0N/A } //end if
0N/A
0N/A }
0N/A
0N/A /**
0N/A * Returns a Collection of the <code>RowSet</code> object instances
0N/A * currently residing with the instance of the <code>JoinRowSet</code>
0N/A * object instance. This should return the 'n' number of RowSet contained
0N/A * within the JOIN and maintain any updates that have occoured while in
0N/A * this union.
0N/A *
0N/A * @return A <code>Collection</code> of the added <code>RowSet</code>
0N/A * object instances
0N/A * @throws SQLException if an error occours generating a collection
0N/A * of the originating RowSets contained within the JOIN.
0N/A */
0N/A public Collection getRowSets() throws SQLException {
0N/A return vecRowSetsInJOIN;
0N/A }
0N/A
0N/A /**
0N/A * Returns a string array of the RowSet names currently residing
0N/A * with the <code>JoinRowSet</code> object instance.
0N/A *
0N/A * @return a string array of the RowSet names
0N/A * @throws SQLException if an error occours retrieving the RowSet names
0N/A * @see CachedRowSet#setTableName
0N/A */
0N/A public String[] getRowSetNames() throws SQLException {
0N/A Object [] arr = vecTableNames.toArray();
0N/A String []strArr = new String[arr.length];
0N/A
0N/A for( int i = 0;i < arr.length; i++) {
0N/A strArr[i] = arr[i].toString();
0N/A }
0N/A
0N/A return strArr;
0N/A }
0N/A
0N/A /**
0N/A * Creates a separate <code>CachedRowSet</code> object that contains the data
0N/A * in this <code>JoinRowSet</code> object.
0N/A * <P>
0N/A * If any updates or modifications have been applied to this <code>JoinRowSet</code>
0N/A * object, the <code>CachedRowSet</code> object returned by this method will
0N/A * not be able to persist
0N/A * the changes back to the originating rows and tables in the
0N/A * data source because the data may be from different tables. The
0N/A * <code>CachedRowSet</code> instance returned should not
0N/A * contain modification data, such as whether a row has been updated or what the
0N/A * original values are. Also, the <code>CachedRowSet</code> object should clear
0N/A * its properties pertaining to
0N/A * its originating SQL statement. An application should reset the
0N/A * SQL statement using the <code>RowSet.setCommand</code> method.
0N/A * <p>
0N/A * To persist changes back to the data source, the <code>JoinRowSet</code> object
0N/A * calls the method <code>acceptChanges</code>. Implementations
0N/A * can leverage the internal data and update tracking in their
0N/A * implementations to interact with the <code>SyncProvider</code> to persist any
0N/A * changes.
0N/A *
0N/A * @return a <code>CachedRowSet</code> object containing the contents of this
0N/A * <code>JoinRowSet</code> object
0N/A * @throws SQLException if an error occurs assembling the <code>CachedRowSet</code>
0N/A * object
0N/A * @see javax.sql.RowSet
0N/A * @see javax.sql.rowset.CachedRowSet
0N/A * @see javax.sql.rowset.spi.SyncProvider
0N/A */
0N/A public CachedRowSet toCachedRowSet() throws SQLException {
0N/A return crsInternal;
0N/A }
0N/A
0N/A /**
0N/A * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
0N/A * an SQL <code>CROSS_JOIN</code> and <code>false</code> if it does not.
0N/A *
0N/A * @return <code>true</code> if the CROSS_JOIN is supported; <code>false</code>
0N/A * otherwise
0N/A */
0N/A public boolean supportsCrossJoin() {
0N/A return supportedJOINs[JoinRowSet.CROSS_JOIN];
0N/A }
0N/A
0N/A /**
0N/A * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
0N/A * an SQL <code>INNER_JOIN</code> and <code>false</code> if it does not.
0N/A *
0N/A * @return true is the INNER_JOIN is supported; false otherwise
0N/A */
0N/A public boolean supportsInnerJoin() {
0N/A return supportedJOINs[JoinRowSet.INNER_JOIN];
0N/A }
0N/A
0N/A /**
0N/A * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
0N/A * an SQL <code>LEFT_OUTER_JOIN</code> and <code>false</code> if it does not.
0N/A *
0N/A * @return true is the LEFT_OUTER_JOIN is supported; false otherwise
0N/A */
0N/A public boolean supportsLeftOuterJoin() {
0N/A return supportedJOINs[JoinRowSet.LEFT_OUTER_JOIN];
0N/A }
0N/A
0N/A /**
0N/A * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
0N/A * an SQL <code>RIGHT_OUTER_JOIN</code> and <code>false</code> if it does not.
0N/A *
0N/A * @return true is the RIGHT_OUTER_JOIN is supported; false otherwise
0N/A */
0N/A public boolean supportsRightOuterJoin() {
0N/A return supportedJOINs[JoinRowSet.RIGHT_OUTER_JOIN];
0N/A }
0N/A
0N/A /**
0N/A * Returns <code>true</code> if this <code>JoinRowSet</code> object supports
0N/A * an SQL <code>FULL_JOIN</code> and <code>false</code> if it does not.
0N/A *
0N/A * @return true is the FULL_JOIN is supported; false otherwise
0N/A */
0N/A public boolean supportsFullJoin() {
0N/A return supportedJOINs[JoinRowSet.FULL_JOIN];
0N/A
0N/A }
0N/A
0N/A /**
0N/A * Sets the type of SQL <code>JOIN</code> that this <code>JoinRowSet</code>
0N/A * object will use. This method
0N/A * allows an application to adjust the type of <code>JOIN</code> imposed
0N/A * on tables contained within this <code>JoinRowSet</code> object and to do it
0N/A * on the fly. The last <code>JOIN</code> type set determines the type of
0N/A * <code>JOIN</code> to be performed.
0N/A * <P>
0N/A * Implementations should throw an <code>SQLException</code> if they do
0N/A * not support the given <code>JOIN</code> type.
0N/A *
0N/A * @param type one of the standard <code>JoinRowSet</code> constants
0N/A * indicating the type of <code>JOIN</code>. Must be one of the
0N/A * following:
0N/A * <code>JoinRowSet.CROSS_JOIN</code>
0N/A * <code>JoinRowSet.INNER_JOIN</code>
0N/A * <code>JoinRowSet.LEFT_OUTER_JOIN</code>
0N/A * <code>JoinRowSet.RIGHT_OUTER_JOIN</code>, or
0N/A * <code>JoinRowSet.FULL_JOIN</code>
0N/A * @throws SQLException if an unsupported <code>JOIN</code> type is set
0N/A */
0N/A public void setJoinType(int type) throws SQLException {
0N/A // The join which governs the join of two rowsets is the last
0N/A // join set, using setJoinType
0N/A
0N/A if (type >= JoinRowSet.CROSS_JOIN && type <= JoinRowSet.FULL_JOIN) {
0N/A if (type != JoinRowSet.INNER_JOIN) {
0N/A // This 'if' will be removed after all joins are implemented.
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notsupported").toString());
0N/A } else {
2828N/A Integer Intgr = Integer.valueOf(JoinRowSet.INNER_JOIN);
0N/A vecJoinType.add(Intgr);
0N/A }
0N/A } else {
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notdefined").toString());
0N/A } //end if
0N/A }
0N/A
0N/A
0N/A /**
0N/A * This checks for a match column for
0N/A * whether it exists or not.
0N/A *
0N/A * @param CachedRowSet</code> object whose match column needs to be checked.
0N/A * @throws SQLException if MatchColumn is not set.
0N/A */
0N/A private boolean checkforMatchColumn(Joinable rs) throws SQLException {
0N/A int[] i = rs.getMatchColumnIndexes();
0N/A if (i.length <= 0) {
0N/A return false;
0N/A }
0N/A return true;
0N/A }
0N/A
0N/A /**
0N/A * Internal initialization of <code>JoinRowSet</code>.
0N/A */
0N/A private void initJOIN(CachedRowSet rowset) throws SQLException {
0N/A try {
0N/A
0N/A CachedRowSetImpl cRowset = (CachedRowSetImpl)rowset;
0N/A // Create a new CachedRowSet object local to this function.
0N/A CachedRowSetImpl crsTemp = new CachedRowSetImpl();
0N/A RowSetMetaDataImpl rsmd = new RowSetMetaDataImpl();
0N/A
0N/A /* The following 'if block' seems to be always going true.
0N/A commenting this out for present
0N/A
0N/A if (!supportedJOINs[1]) {
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.notsupported").toString());
0N/A }
0N/A
0N/A */
0N/A
0N/A if (vecRowSetsInJOIN.isEmpty() ) {
0N/A
0N/A // implies first cRowset to be added to the Join
0N/A // simply add this as a CachedRowSet.
0N/A // Also add it to the class variable of type vector
0N/A // do not need to check "type" of Join but it should be set.
0N/A crsInternal = (CachedRowSetImpl)rowset.createCopy();
0N/A crsInternal.setMetaData((RowSetMetaDataImpl)cRowset.getMetaData());
0N/A // metadata will also set the MatchColumn.
0N/A
0N/A vecRowSetsInJOIN.add(cRowset);
0N/A
0N/A } else {
0N/A // At this point we are ready to add another rowset to 'this' object
0N/A // Check the size of vecJoinType and vecRowSetsInJoin
0N/A
0N/A // If nothing is being set, internally call setJoinType()
0N/A // to set to JoinRowSet.INNER_JOIN.
0N/A
0N/A // For two rowsets one (valid) entry should be there in vecJoinType
0N/A // For three rowsets two (valid) entries should be there in vecJoinType
0N/A
0N/A // Maintain vecRowSetsInJoin = vecJoinType + 1
0N/A
0N/A
0N/A if( (vecRowSetsInJOIN.size() - vecJoinType.size() ) == 2 ) {
0N/A // we are going to add next rowset and setJoinType has not been set
0N/A // recently, so set it to setJoinType() to JoinRowSet.INNER_JOIN.
0N/A // the default join type
0N/A
0N/A setJoinType(JoinRowSet.INNER_JOIN);
0N/A } else if( (vecRowSetsInJOIN.size() - vecJoinType.size() ) == 1 ) {
0N/A // do nothing setjoinType() has been set by programmer
0N/A }
0N/A
0N/A // Add the table names to the class variable of type vector.
0N/A vecTableNames.add(crsInternal.getTableName());
0N/A vecTableNames.add(cRowset.getTableName());
0N/A // Now we have two rowsets crsInternal and cRowset which need
0N/A // to be INNER JOIN'ED to form a new rowset
0N/A // Compare table1.MatchColumn1.value1 == { table2.MatchColumn2.value1
0N/A // ... upto table2.MatchColumn2.valueN }
0N/A // ...
0N/A // Compare table1.MatchColumn1.valueM == { table2.MatchColumn2.value1
0N/A // ... upto table2.MatchColumn2.valueN }
0N/A //
0N/A // Assuming first rowset has M rows and second N rows.
0N/A
0N/A int rowCount2 = cRowset.size();
0N/A int rowCount1 = crsInternal.size();
0N/A
0N/A // total columns in the new CachedRowSet will be sum of both -1
0N/A // (common column)
0N/A int matchColumnCount = 0;
0N/A for(int i=0; i< crsInternal.getMatchColumnIndexes().length; i++) {
0N/A if(crsInternal.getMatchColumnIndexes()[i] != -1)
0N/A ++ matchColumnCount;
0N/A else
0N/A break;
0N/A }
0N/A
0N/A rsmd.setColumnCount
0N/A (crsInternal.getMetaData().getColumnCount() +
0N/A cRowset.getMetaData().getColumnCount() - matchColumnCount);
0N/A
0N/A crsTemp.setMetaData(rsmd);
0N/A crsInternal.beforeFirst();
0N/A cRowset.beforeFirst();
0N/A for (int i = 1 ; i <= rowCount1 ; i++) {
0N/A if(crsInternal.isAfterLast() ) {
0N/A break;
0N/A }
0N/A if(crsInternal.next()) {
0N/A cRowset.beforeFirst();
0N/A for(int j = 1 ; j <= rowCount2 ; j++) {
0N/A if( cRowset.isAfterLast()) {
0N/A break;
0N/A }
0N/A if(cRowset.next()) {
0N/A boolean match = true;
0N/A for(int k=0; k<matchColumnCount; k++) {
0N/A if (!crsInternal.getObject( crsInternal.getMatchColumnIndexes()[k]).equals
0N/A (cRowset.getObject(cRowset.getMatchColumnIndexes()[k]))) {
0N/A match = false;
0N/A break;
0N/A }
0N/A }
0N/A if (match) {
0N/A
0N/A int p;
0N/A int colc = 0; // reset this variable everytime you loop
0N/A // re create a JoinRowSet in crsTemp object
0N/A crsTemp.moveToInsertRow();
0N/A
0N/A // create a new rowset crsTemp with data from first rowset
0N/A for( p=1;
0N/A p<=crsInternal.getMetaData().getColumnCount();p++) {
0N/A
0N/A match = false;
0N/A for(int k=0; k<matchColumnCount; k++) {
0N/A if (p == crsInternal.getMatchColumnIndexes()[k] ) {
0N/A match = true;
0N/A break;
0N/A }
0N/A }
0N/A if ( !match ) {
0N/A
0N/A crsTemp.updateObject(++colc, crsInternal.getObject(p));
0N/A // column type also needs to be passed.
0N/A
0N/A rsmd.setColumnName
0N/A (colc, crsInternal.getMetaData().getColumnName(p));
0N/A rsmd.setTableName(colc, crsInternal.getTableName());
0N/A
0N/A rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
0N/A rsmd.setAutoIncrement(p, crsInternal.getMetaData().isAutoIncrement(p));
0N/A rsmd.setCaseSensitive(p, crsInternal.getMetaData().isCaseSensitive(p));
0N/A rsmd.setCatalogName(p, crsInternal.getMetaData().getCatalogName(p));
0N/A rsmd.setColumnDisplaySize(p, crsInternal.getMetaData().getColumnDisplaySize(p));
0N/A rsmd.setColumnLabel(p, crsInternal.getMetaData().getColumnLabel(p));
0N/A rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
0N/A rsmd.setColumnTypeName(p, crsInternal.getMetaData().getColumnTypeName(p));
0N/A rsmd.setCurrency(p,crsInternal.getMetaData().isCurrency(p) );
0N/A rsmd.setNullable(p, crsInternal.getMetaData().isNullable(p));
0N/A rsmd.setPrecision(p, crsInternal.getMetaData().getPrecision(p));
0N/A rsmd.setScale(p, crsInternal.getMetaData().getScale(p));
0N/A rsmd.setSchemaName(p, crsInternal.getMetaData().getSchemaName(p));
0N/A rsmd.setSearchable(p, crsInternal.getMetaData().isSearchable(p));
0N/A rsmd.setSigned(p, crsInternal.getMetaData().isSigned(p));
0N/A
0N/A } else {
0N/A // will happen only once, for that merged column pass
0N/A // the types as OBJECT, if types not equal
0N/A
0N/A crsTemp.updateObject(++colc, crsInternal.getObject(p));
0N/A
0N/A rsmd.setColumnName(colc, crsInternal.getMetaData().getColumnName(p));
0N/A rsmd.setTableName
0N/A (colc, crsInternal.getTableName()+
0N/A "#"+
0N/A cRowset.getTableName());
0N/A
0N/A
0N/A rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
0N/A rsmd.setAutoIncrement(p, crsInternal.getMetaData().isAutoIncrement(p));
0N/A rsmd.setCaseSensitive(p, crsInternal.getMetaData().isCaseSensitive(p));
0N/A rsmd.setCatalogName(p, crsInternal.getMetaData().getCatalogName(p));
0N/A rsmd.setColumnDisplaySize(p, crsInternal.getMetaData().getColumnDisplaySize(p));
0N/A rsmd.setColumnLabel(p, crsInternal.getMetaData().getColumnLabel(p));
0N/A rsmd.setColumnType(p, crsInternal.getMetaData().getColumnType(p));
0N/A rsmd.setColumnTypeName(p, crsInternal.getMetaData().getColumnTypeName(p));
0N/A rsmd.setCurrency(p,crsInternal.getMetaData().isCurrency(p) );
0N/A rsmd.setNullable(p, crsInternal.getMetaData().isNullable(p));
0N/A rsmd.setPrecision(p, crsInternal.getMetaData().getPrecision(p));
0N/A rsmd.setScale(p, crsInternal.getMetaData().getScale(p));
0N/A rsmd.setSchemaName(p, crsInternal.getMetaData().getSchemaName(p));
0N/A rsmd.setSearchable(p, crsInternal.getMetaData().isSearchable(p));
0N/A rsmd.setSigned(p, crsInternal.getMetaData().isSigned(p));
0N/A
0N/A //don't do ++colc in the above statement
0N/A } //end if
0N/A } //end for
0N/A
0N/A
0N/A // append the rowset crsTemp, with data from second rowset
0N/A for(int q=1;
0N/A q<= cRowset.getMetaData().getColumnCount();q++) {
0N/A
0N/A match = false;
0N/A for(int k=0; k<matchColumnCount; k++) {
0N/A if (q == cRowset.getMatchColumnIndexes()[k] ) {
0N/A match = true;
0N/A break;
0N/A }
0N/A }
0N/A if ( !match ) {
0N/A
0N/A crsTemp.updateObject(++colc, cRowset.getObject(q));
0N/A
0N/A rsmd.setColumnName
0N/A (colc, cRowset.getMetaData().getColumnName(q));
0N/A rsmd.setTableName(colc, cRowset.getTableName());
0N/A
0N/A /**
0N/A * This will happen for a special case scenario. The value of 'p'
0N/A * will always be one more than the number of columns in the first
0N/A * rowset in the join. So, for a value of 'q' which is the number of
0N/A * columns in the second rowset that participates in the join.
0N/A * So decrement value of 'p' by 1 else `p+q-1` will be out of range.
0N/A **/
0N/A
0N/A //if((p+q-1) > ((crsInternal.getMetaData().getColumnCount()) +
0N/A // (cRowset.getMetaData().getColumnCount()) - 1)) {
0N/A // --p;
0N/A //}
0N/A rsmd.setColumnType(p+q-1, cRowset.getMetaData().getColumnType(q));
0N/A rsmd.setAutoIncrement(p+q-1, cRowset.getMetaData().isAutoIncrement(q));
0N/A rsmd.setCaseSensitive(p+q-1, cRowset.getMetaData().isCaseSensitive(q));
0N/A rsmd.setCatalogName(p+q-1, cRowset.getMetaData().getCatalogName(q));
0N/A rsmd.setColumnDisplaySize(p+q-1, cRowset.getMetaData().getColumnDisplaySize(q));
0N/A rsmd.setColumnLabel(p+q-1, cRowset.getMetaData().getColumnLabel(q));
0N/A rsmd.setColumnType(p+q-1, cRowset.getMetaData().getColumnType(q));
0N/A rsmd.setColumnTypeName(p+q-1, cRowset.getMetaData().getColumnTypeName(q));
0N/A rsmd.setCurrency(p+q-1,cRowset.getMetaData().isCurrency(q) );
0N/A rsmd.setNullable(p+q-1, cRowset.getMetaData().isNullable(q));
0N/A rsmd.setPrecision(p+q-1, cRowset.getMetaData().getPrecision(q));
0N/A rsmd.setScale(p+q-1, cRowset.getMetaData().getScale(q));
0N/A rsmd.setSchemaName(p+q-1, cRowset.getMetaData().getSchemaName(q));
0N/A rsmd.setSearchable(p+q-1, cRowset.getMetaData().isSearchable(q));
0N/A rsmd.setSigned(p+q-1, cRowset.getMetaData().isSigned(q));
0N/A }
0N/A else {
0N/A --p;
0N/A }
0N/A }
0N/A crsTemp.insertRow();
0N/A crsTemp.moveToCurrentRow();
0N/A
0N/A } else {
0N/A // since not equa12
0N/A // so do nothing
0N/A } //end if
0N/A // bool1 = cRowset.next();
0N/A }
0N/A
0N/A } // end inner for
0N/A //bool2 = crsInternal.next();
0N/A }
0N/A
0N/A } //end outer for
0N/A crsTemp.setMetaData(rsmd);
0N/A crsTemp.setOriginal();
0N/A
0N/A // Now the join is done.
0N/A // Make crsInternal = crsTemp, to be ready for next merge, if at all.
0N/A
0N/A int[] pCol = new int[matchColumnCount];
0N/A for(int i=0; i<matchColumnCount; i++)
0N/A pCol[i] = crsInternal.getMatchColumnIndexes()[i];
0N/A
0N/A crsInternal = (CachedRowSetImpl)crsTemp.createCopy();
0N/A
0N/A // Because we add the first rowset as crsInternal to the
0N/A // merged rowset, so pCol will point to the Match column.
0N/A // until reset, am not sure we should set this or not(?)
0N/A // if this is not set next inner join won't happen
0N/A // if we explicitly do not set a set MatchColumn of
0N/A // the new crsInternal.
0N/A
0N/A crsInternal.setMatchColumn(pCol);
0N/A // Add the merged rowset to the class variable of type vector.
0N/A crsInternal.setMetaData(rsmd);
0N/A vecRowSetsInJOIN.add(cRowset);
0N/A } //end if
0N/A } catch(SQLException sqle) {
0N/A // %%% Exception should not dump here:
0N/A sqle.printStackTrace();
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.initerror").toString() + sqle);
0N/A } catch (Exception e) {
0N/A e.printStackTrace();
0N/A throw new SQLException(resBundle.handleGetObject("joinrowsetimpl.genericerr").toString() + e);
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Return a SQL-like description of the <code>WHERE</code> clause being used
0N/A * in a <code>JoinRowSet</code> object instance. An implementation can describe
0N/A * the <code>WHERE</code> clause of the SQL <code>JOIN</code> by supplying a <code>SQL</code>
0N/A * strings description of <code>JOIN</code> or provide a textual description to assist
0N/A * applications using a <code>JoinRowSet</code>.
0N/A *
0N/A * @return whereClause a textual or SQL descripition of the logical
0N/A * <code>WHERE</code> cluase used in the <code>JoinRowSet</code> instance
0N/A * @throws SQLException if an error occurs in generating a representation
0N/A * of the <code>WHERE</code> clause.
0N/A */
0N/A public String getWhereClause() throws SQLException {
0N/A
0N/A String strWhereClause = "Select ";
0N/A String whereClause;
2823N/A String tabName= "";
2823N/A String strTabName = "";
0N/A int sz,cols;
0N/A int j;
0N/A CachedRowSetImpl crs;
0N/A
0N/A // get all the column(s) names from each rowset.
0N/A // append them with their tablenames i.e. tableName.columnName
0N/A // Select tableName1.columnName1,..., tableNameX.columnNameY
0N/A // from tableName1,...tableNameX where
0N/A // tableName1.(rowset1.getMatchColumnName()) ==
0N/A // tableName2.(rowset2.getMatchColumnName()) + "and" +
0N/A // tableNameX.(rowsetX.getMatchColumnName()) ==
0N/A // tableNameZ.(rowsetZ.getMatchColumnName()));
0N/A
0N/A sz = vecRowSetsInJOIN.size();
0N/A for(int i=0;i<sz; i++) {
0N/A crs = (CachedRowSetImpl)vecRowSetsInJOIN.get(i);
0N/A cols = crs.getMetaData().getColumnCount();
0N/A tabName = tabName.concat(crs.getTableName());
0N/A strTabName = strTabName.concat(tabName+", ");
0N/A j = 1;
0N/A while(j<cols) {
0N/A
0N/A strWhereClause = strWhereClause.concat
0N/A (tabName+"."+crs.getMetaData().getColumnName(j++));
0N/A strWhereClause = strWhereClause.concat(", ");
0N/A } //end while
0N/A } //end for
0N/A
0N/A
0N/A // now remove the last ","
0N/A strWhereClause = strWhereClause.substring
0N/A (0, strWhereClause.lastIndexOf(","));
0N/A
0N/A // Add from clause
0N/A strWhereClause = strWhereClause.concat(" from ");
0N/A
0N/A // Add the table names.
0N/A strWhereClause = strWhereClause.concat(strTabName);
0N/A
0N/A //Remove the last ","
0N/A strWhereClause = strWhereClause.substring
0N/A (0, strWhereClause.lastIndexOf(","));
0N/A
0N/A // Add the where clause
0N/A strWhereClause = strWhereClause.concat(" where ");
0N/A
0N/A // Get the match columns
0N/A // rowset1.getMatchColumnName() == rowset2.getMatchColumnName()
0N/A for(int i=0;i<sz; i++) {
0N/A strWhereClause = strWhereClause.concat(
0N/A ((CachedRowSetImpl)vecRowSetsInJOIN.get(i)).getMatchColumnNames()[0]);
0N/A if(i%2!=0) {
0N/A strWhereClause = strWhereClause.concat("=");
0N/A } else {
0N/A strWhereClause = strWhereClause.concat(" and");
0N/A }
0N/A strWhereClause = strWhereClause.concat(" ");
0N/A }
0N/A
0N/A return strWhereClause;
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Moves the cursor down one row from its current position and
0N/A * returns <code>true</code> if the new cursor position is a
0N/A * valid row.
0N/A * The cursor for a new <code>ResultSet</code> object is initially
0N/A * positioned before the first row. The first call to the method
0N/A * <code>next</code> moves the cursor to the first row, making it
0N/A * the current row; the second call makes the second row the
0N/A * current row, and so on.
0N/A *
0N/A * <P>If an input stream from the previous row is open, it is
0N/A * implicitly closed. The <code>ResultSet</code> object's warning
0N/A * chain is cleared when a new row is read.
0N/A *
0N/A * @return <code>true</code> if the new current row is valid;
0N/A * <code>false</code> if there are no more rows
0N/A * @throws SQLException if an error occurs or
0N/A * the cursor is not positioned in the rowset, before
0N/A * the first row, or after the last row
0N/A */
0N/A public boolean next() throws SQLException {
0N/A return crsInternal.next();
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Releases the current contents of this rowset, discarding outstanding
0N/A * updates. The rowset contains no rows after the method
0N/A * <code>release</code> is called. This method sends a
0N/A * <code>RowSetChangedEvent</code> object to all registered listeners prior
0N/A * to returning.
0N/A *
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public void close() throws SQLException {
0N/A crsInternal.close();
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Reports whether the last column read was SQL <code>NULL</code>.
0N/A * Note that you must first call the method <code>getXXX</code>
0N/A * on a column to try to read its value and then call the method
0N/A * <code>wasNull</code> to determine whether the value was
0N/A * SQL <code>NULL</code>.
0N/A *
0N/A * @return <code>true</code> if the value in the last column read
0N/A * was SQL <code>NULL</code>; <code>false</code> otherwise
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public boolean wasNull() throws SQLException {
0N/A return crsInternal.wasNull();
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>String</code> object.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds or
0N/A * the cursor is not on a valid row
0N/A */
0N/A public String getString(int columnIndex) throws SQLException {
0N/A return crsInternal.getString(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>boolean</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>false</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public boolean getBoolean(int columnIndex) throws SQLException {
0N/A return crsInternal.getBoolean(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>byte</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>0</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public byte getByte(int columnIndex) throws SQLException {
0N/A return crsInternal.getByte(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>short</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>0</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public short getShort(int columnIndex) throws SQLException {
0N/A return crsInternal.getShort(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>short</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>0</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public int getInt(int columnIndex) throws SQLException {
0N/A return crsInternal.getInt(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>long</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>0</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public long getLong(int columnIndex) throws SQLException {
0N/A return crsInternal.getLong(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>float</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>0</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public float getFloat(int columnIndex) throws SQLException {
0N/A return crsInternal.getFloat(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>double</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>0</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public double getDouble(int columnIndex) throws SQLException {
0N/A return crsInternal.getDouble(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.math.BigDecimal</code> object.
0N/A * <P>
0N/A * This method is deprecated; use the version of <code>getBigDecimal</code>
0N/A * that does not take a scale parameter and returns a value with full
0N/A * precision.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @param scale the number of digits to the right of the decimal point in the
0N/A * value returned
0N/A * @return the column value with the specified number of digits to the right
0N/A * of the decimal point; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A * @deprecated
0N/A */
0N/A public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
0N/A return crsInternal.getBigDecimal(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>byte array</code> value.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or the the value to be
0N/A * retrieved is not binary
0N/A */
0N/A public byte[] getBytes(int columnIndex) throws SQLException {
0N/A return crsInternal.getBytes(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.sql.Date</code> object.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public java.sql.Date getDate(int columnIndex) throws SQLException {
0N/A return crsInternal.getDate(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.sql.Time</code> object.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public java.sql.Time getTime(int columnIndex) throws SQLException {
0N/A return crsInternal.getTime(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.sql.Timestamp</code> object.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException {
0N/A return crsInternal.getTimestamp(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.sql.Timestamp</code> object.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return the column value; if the value is SQL <code>NULL</code>, the
0N/A * result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException {
0N/A return crsInternal.getAsciiStream(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * A column value can be retrieved as a stream of Unicode characters
0N/A * and then read in chunks from the stream. This method is particularly
0N/A * suitable for retrieving large LONGVARCHAR values. The JDBC driver will
0N/A * do any necessary conversion from the database format into Unicode.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must be
0N/A * read prior to getting the value of any other column. The next
0N/A * call to a get method implicitly closes the stream. . Also, a
0N/A * stream may return 0 for available() whether there is data
0N/A * available or not.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @return a Java input stream that delivers the database column value
0N/A * as a stream of two byte Unicode characters. If the value is SQL NULL
0N/A * then the result is null.
0N/A * @throws SQLException if an error occurs
0N/A * @deprecated
0N/A */
0N/A public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
0N/A return crsInternal.getUnicodeStream(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * A column value can be retrieved as a stream of uninterpreted bytes
0N/A * and then read in chunks from the stream. This method is particularly
0N/A * suitable for retrieving large LONGVARBINARY values.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must be
0N/A * read prior to getting the value of any other column. The next
0N/A * call to a get method implicitly closes the stream. Also, a
0N/A * stream may return 0 for available() whether there is data
0N/A * available or not.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return a Java input stream that delivers the database column value
0N/A * as a stream of uninterpreted bytes. If the value is SQL NULL
0N/A * then the result is null.
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException {
0N/A return crsInternal.getBinaryStream(columnIndex);
0N/A }
0N/A
0N/A // ColumnName methods
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>String</code> object.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public String getString(String columnName) throws SQLException {
0N/A return crsInternal.getString(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>boolean</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>false</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public boolean getBoolean(String columnName) throws SQLException {
0N/A return crsInternal.getBoolean(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>byte</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>0</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public byte getByte(String columnName) throws SQLException {
0N/A return crsInternal.getByte(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>short</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>0</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public short getShort(String columnName) throws SQLException {
0N/A return crsInternal.getShort(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as an <code>int</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>0</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public int getInt(String columnName) throws SQLException {
0N/A return crsInternal.getInt(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>long</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>0</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public long getLong(String columnName) throws SQLException {
0N/A return crsInternal.getLong(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>float</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>0</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public float getFloat(String columnName) throws SQLException {
0N/A return crsInternal.getFloat(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>double</code> value.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>0</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public double getDouble(String columnName) throws SQLException {
0N/A return crsInternal.getDouble(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.math.BigDecimal</code> object.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @param scale the number of digits to the right of the decimal point
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A * @deprecated use the method <code>getBigDecimal(String columnName)</code>
0N/A * instead
0N/A */
0N/A public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
0N/A return crsInternal.getBigDecimal(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a byte array.
0N/A * The bytes represent the raw values returned by the driver.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public byte[] getBytes(String columnName) throws SQLException {
0N/A return crsInternal.getBytes(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.sql.Date</code> object.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public java.sql.Date getDate(String columnName) throws SQLException {
0N/A return crsInternal.getDate(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.sql.Time</code> object.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public java.sql.Time getTime(String columnName) throws SQLException {
0N/A return crsInternal.getTime(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.sql.Timestamp</code> object.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public java.sql.Timestamp getTimestamp(String columnName) throws SQLException {
0N/A return crsInternal.getTimestamp(columnName);
0N/A }
0N/A
0N/A /**
0N/A * This method is not supported, and it will throw an
0N/A * <code>UnsupportedOperationException</code> if it is called.
0N/A * <P>
0N/A * A column value can be retrieved as a stream of ASCII characters
0N/A * and then read in chunks from the stream. This method is particularly
0N/A * suitable for retrieving large LONGVARCHAR values. The JDBC driver will
0N/A * do any necessary conversion from the database format into ASCII format.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must
0N/A * be read prior to getting the value of any other column. The
0N/A * next call to a <code>getXXX</code> method implicitly closes the stream.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return a Java input stream that delivers the database column value
0N/A * as a stream of one-byte ASCII characters. If the value is SQL
0N/A * <code>NULL</code>, the result is <code>null</code>.
0N/A * @throws UnsupportedOperationException if this method is called
0N/A */
0N/A public java.io.InputStream getAsciiStream(String columnName) throws SQLException {
0N/A return crsInternal.getAsciiStream(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.io.InputStream</code> object.
0N/A * A column value can be retrieved as a stream of Unicode characters
0N/A * and then read in chunks from the stream. This method is particularly
0N/A * suitable for retrieving large <code>LONGVARCHAR</code> values.
0N/A * The JDBC driver will do any necessary conversion from the database
0N/A * format into Unicode.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must
0N/A * be read prior to getting the value of any other column. The
0N/A * next call to a <code>getXXX</code> method implicitly closes the stream.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return a Java input stream that delivers the database column value
0N/A * as a stream of two-byte Unicode characters. If the value is
0N/A * SQL <code>NULL</code>, the result is <code>null</code>.
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A * @deprecated use the method <code>getCharacterStream</code> instead
0N/A */
0N/A public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
0N/A return crsInternal.getUnicodeStream(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.io.InputStream</code> object.
0N/A * A column value can be retrieved as a stream of uninterpreted bytes
0N/A * and then read in chunks from the stream. This method is particularly
0N/A * suitable for retrieving large <code>LONGVARBINARY</code> values.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must
0N/A * be read prior to getting the value of any other column. The
0N/A * next call to a get method implicitly closes the stream.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return a Java input stream that delivers the database column value
0N/A * as a stream of uninterpreted bytes. If the value is SQL
0N/A * <code>NULL</code>, the result is <code>null</code>.
0N/A * @throws SQLException if the given column name does not match one of
0N/A * this rowset's column names or the cursor is not on one of
0N/A * this rowset's rows or its insert row
0N/A */
0N/A public java.io.InputStream getBinaryStream(String columnName) throws SQLException {
0N/A return crsInternal.getBinaryStream(columnName);
0N/A }
0N/A
0N/A /* The first warning reported by calls on this <code>JoinRowSetImpl</code>
0N/A * object is returned. Subsequent <code>JoinRowSetImpl</code> warnings will
0N/A * be chained to this <code>SQLWarning</code>.
0N/A *
0N/A * <P>The warning chain is automatically cleared each time a new
0N/A * row is read.
0N/A *
0N/A * <P><B>Note:</B> This warning chain only covers warnings caused
0N/A * by <code>ResultSet</code> methods. Any warning caused by statement
0N/A * methods (such as reading OUT parameters) will be chained on the
0N/A * <code>Statement</code> object.
0N/A *
0N/A * @return the first SQLWarning or null
0N/A * @throws UnsupportedOperationException if this method is called
0N/A */
0N/A public SQLWarning getWarnings() {
0N/A return crsInternal.getWarnings();
0N/A }
0N/A
0N/A /**
0N/A * Throws an <code>UnsupportedOperationException</code> if called.
0N/A * <P>
0N/A * After a call to this method, the <code>getWarnings</code> method
0N/A * returns <code>null</code> until a new warning is reported for this
0N/A * <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * @throws UnsupportedOperationException if this method is called
0N/A */
0N/A public void clearWarnings() {
0N/A crsInternal.clearWarnings();
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the name of the SQL cursor used by this
0N/A * <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * <P>In SQL, a result table is retrieved through a cursor that is
0N/A * named. The current row of a result can be updated or deleted
0N/A * using a positioned update/delete statement that references the
0N/A * cursor name. To insure that the cursor has the proper isolation
0N/A * level to support an update operation, the cursor's <code>SELECT</code>
0N/A * statement should be of the form 'select for update'. If the 'for update'
0N/A * clause is omitted, positioned updates may fail.
0N/A *
0N/A * <P>JDBC supports this SQL feature by providing the name of the
0N/A * SQL cursor used by a <code>ResultSet</code> object. The current row
0N/A * of a result set is also the current row of this SQL cursor.
0N/A *
0N/A * <P><B>Note:</B> If positioned updates are not supported, an
0N/A * <code>SQLException</code> is thrown.
0N/A *
0N/A * @return the SQL cursor name for this <code>JoinRowSetImpl</code> object's
0N/A * cursor
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public String getCursorName() throws SQLException {
0N/A return crsInternal.getCursorName();
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the <code>ResultSetMetaData</code> object that contains
0N/A * information about this <code>CachedRowsSet</code> object. The
0N/A * information includes the number of columns, the data type for each
0N/A * column, and other properties for each column.
0N/A *
0N/A * @return the <code>ResultSetMetaData</code> object that describes this
0N/A * <code>JoinRowSetImpl</code> object's columns
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public ResultSetMetaData getMetaData() throws SQLException {
0N/A return crsInternal.getMetaData();
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as an
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * The type of the <code>Object</code> will be the default
0N/A * Java object type corresponding to the column's SQL type,
0N/A * following the mapping for built-in types specified in the JDBC
0N/A * specification.
0N/A * <P>
0N/A * This method may also be used to read datatabase-specific
0N/A * abstract data types.
0N/A * <P>
0N/A * This implementation of the method <code>getObject</code> extends its
0N/A * behavior so that it gets the attributes of an SQL structured type as
0N/A * as an array of <code>Object</code> values. This method also custom
0N/A * maps SQL user-defined types to classes in the Java programming language.
0N/A * When the specified column contains
0N/A * a structured or distinct value, the behavior of this method is as
0N/A * if it were a call to the method <code>getObject(columnIndex,
0N/A * this.getStatement().getConnection().getTypeMap())</code>.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return a <code>java.lang.Object</code> holding the column value;
0N/A * if the value is SQL <code>NULL</code>, the result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or there is a problem getting
0N/A * the <code>Class</code> object for a custom mapping
0N/A * @since 1.2
0N/A */
0N/A public Object getObject(int columnIndex) throws SQLException {
0N/A return crsInternal.getObject(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as an
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * The type of the <code>Object</code> will be the default
0N/A * Java object type corresponding to the column's SQL type,
0N/A * following the mapping for built-in types specified in the JDBC
0N/A * specification.
0N/A * <P>
0N/A * This method may also be used to read datatabase-specific
0N/A * abstract data types.
0N/A * <P>
0N/A * This implementation of the method <code>getObject</code> extends its
0N/A * behavior so that it gets the attributes of an SQL structured type as
0N/A * as an array of <code>Object</code> values. This method also custom
0N/A * maps SQL user-defined types to classes
0N/A * in the Java programming language. When the specified column contains
0N/A * a structured or distinct value, the behavior of this method is as
0N/A * if it were a call to the method <code>getObject(columnIndex,
0N/A * this.getStatement().getConnection().getTypeMap())</code>.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @param map a <code>java.util.Map</code> object showing the mapping
0N/A * from SQL type names to classes in the Java programming
0N/A * language
0N/A * @return a <code>java.lang.Object</code> holding the column value;
0N/A * if the value is SQL <code>NULL</code>, the result is
0N/A * <code>null</code>
0N/A * @throws SQLException if (1) the given column name does not match
0N/A * one of this rowset's column names, (2) the cursor is not
0N/A * on a valid row, or (3) there is a problem getting
0N/A * the <code>Class</code> object for a custom mapping
0N/A */
0N/A public Object getObject(int columnIndex,
0N/A java.util.Map<String,Class<?>> map)
0N/A throws SQLException {
0N/A return crsInternal.getObject(columnIndex, map);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as an
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * The type of the <code>Object</code> will be the default
0N/A * Java object type corresponding to the column's SQL type,
0N/A * following the mapping for built-in types specified in the JDBC
0N/A * specification.
0N/A * <P>
0N/A * This method may also be used to read datatabase-specific
0N/A * abstract data types.
0N/A * <P>
0N/A * This implementation of the method <code>getObject</code> extends its
0N/A * behavior so that it gets the attributes of an SQL structured type as
0N/A * as an array of <code>Object</code> values. This method also custom
0N/A * maps SQL user-defined types to classes
0N/A * in the Java programming language. When the specified column contains
0N/A * a structured or distinct value, the behavior of this method is as
0N/A * if it were a call to the method <code>getObject(columnIndex,
0N/A * this.getStatement().getConnection().getTypeMap())</code>.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @return a <code>java.lang.Object</code> holding the column value;
0N/A * if the value is SQL <code>NULL</code>, the result is
0N/A * <code>null</code>
0N/A * @throws SQLException if (1) the given column name does not match
0N/A * one of this rowset's column names, (2) the cursor is not
0N/A * on a valid row, or (3) there is a problem getting
0N/A * the <code>Class</code> object for a custom mapping
0N/A */
0N/A public Object getObject(String columnName) throws SQLException {
0N/A return crsInternal.getObject(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as an <code>Object</code> in
0N/A * the Java programming lanugage, using the given
0N/A * <code>java.util.Map</code> object to custom map the value if
0N/A * appropriate.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param map a <code>java.util.Map</code> object showing the mapping
0N/A * from SQL type names to classes in the Java programming
0N/A * language
0N/A * @return an <code>Object</code> representing the SQL value
0N/A * @throws SQLException if the given column index is out of bounds or
0N/A * the cursor is not on one of this rowset's rows or its
0N/A * insert row
0N/A */
0N/A public Object getObject(String columnName,
0N/A java.util.Map<String,Class<?>> map)
0N/A throws SQLException {
0N/A return crsInternal.getObject(columnName, map);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.io.Reader</code> object.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must
0N/A * be read prior to getting the value of any other column. The
0N/A * next call to a <code>getXXX</code> method implicitly closes the stream.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return a Java character stream that delivers the database column value
0N/A * as a <code>java.io.Reader</code> object. If the value is
0N/A * SQL <code>NULL</code>, the result is <code>null</code>.
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or there is a type mismatch
0N/A */
0N/A public java.io.Reader getCharacterStream(int columnIndex) throws SQLException {
0N/A return crsInternal.getCharacterStream(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value stored in the designated column
0N/A * of the current row as a <code>java.io.Reader</code> object.
0N/A *
0N/A * <P><B>Note:</B> All the data in the returned stream must
0N/A * be read prior to getting the value of any other column. The
0N/A * next call to a <code>getXXX</code> method implicitly closes the stream.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the SQL name of
0N/A * a column in this <code>JoinRowSetImpl</code> object
0N/A * @return a Java input stream that delivers the database column value
0N/A * as a stream of two-byte Unicode characters. If the value is
0N/A * SQL <code>NULL</code>, the result is <code>null</code>.
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or there is a type mismatch
0N/A */
0N/A public java.io.Reader getCharacterStream(String columnName) throws SQLException {
0N/A return crsInternal.getCharacterStream(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.math.BigDecimal</code> object.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @return a <code>java.math.BigDecimal</code> value with full precision;
0N/A * if the value is SQL <code>NULL</code>, the result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
0N/A return crsInternal.getBigDecimal(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.math.BigDecimal</code> object.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @return a <code>java.math.BigDecimal</code> value with full precision;
0N/A * if the value is SQL <code>NULL</code>, the result is <code>null</code>
0N/A * @throws SQLException if the given column index is out of bounds,
0N/A * the cursor is not on a valid row, or this method fails
0N/A */
0N/A public BigDecimal getBigDecimal(String columnName) throws SQLException {
0N/A return crsInternal.getBigDecimal(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Returns the number of rows in this <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * @return number of rows in the rowset
0N/A */
0N/A public int size() {
0N/A return crsInternal.size();
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the cursor is before the first row in this
0N/A * <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * @return <code>true</code> if the cursor is before the first row;
0N/A * <code>false</code> otherwise or if the rowset contains no rows
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public boolean isBeforeFirst() throws SQLException {
0N/A return crsInternal.isBeforeFirst();
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the cursor is after the last row in this
0N/A * <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * @return <code>true</code> if the cursor is after the last row;
0N/A * <code>false</code> otherwise or if the rowset contains no rows
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public boolean isAfterLast() throws SQLException {
0N/A return crsInternal.isAfterLast();
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the cursor is on the first row in this
0N/A * <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * @return <code>true</code> if the cursor is on the first row;
0N/A * <code>false</code> otherwise or if the rowset contains no rows
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public boolean isFirst() throws SQLException {
0N/A return crsInternal.isFirst();
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the cursor is on the last row in this
0N/A * <code>JoinRowSetImpl</code> object.
0N/A * <P>
0N/A * Note: Calling the method <code>isLast</code> may be expensive
0N/A * because the JDBC driver might need to fetch ahead one row in order
0N/A * to determine whether the current row is the last row in this rowset.
0N/A *
0N/A * @return <code>true</code> if the cursor is on the last row;
0N/A * <code>false</code> otherwise or if this rowset contains no rows
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public boolean isLast() throws SQLException {
0N/A return crsInternal.isLast();
0N/A }
0N/A
0N/A /**
0N/A * Moves this <code>JoinRowSetImpl</code> object's cursor to the front of
0N/A * the rowset, just before the first row. This method has no effect if
0N/A * this rowset contains no rows.
0N/A *
0N/A * @throws SQLException if an error occurs or the type of this rowset
0N/A * is <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public void beforeFirst() throws SQLException {
0N/A crsInternal.beforeFirst();
0N/A }
0N/A
0N/A /**
0N/A * Moves this <code>JoinRowSetImpl</code> object's cursor to the end of
0N/A * the rowset, just after the last row. This method has no effect if
0N/A * this rowset contains no rows.
0N/A *
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public void afterLast() throws SQLException {
0N/A crsInternal.afterLast();
0N/A }
0N/A
0N/A /**
0N/A * Moves this <code>JoinRowSetImpl</code> object's cursor to the first row
0N/A * and returns <code>true</code> if the operation was successful. This
0N/A * method also notifies registered listeners that the cursor has moved.
0N/A *
0N/A * @return <code>true</code> if the cursor is on a valid row;
0N/A * <code>false</code> otherwise or if there are no rows in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @throws SQLException if the type of this rowset
0N/A * is <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean first() throws SQLException {
0N/A return crsInternal.first();
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Moves this <code>JoinRowSetImpl</code> object's cursor to the last row
0N/A * and returns <code>true</code> if the operation was successful. This
0N/A * method also notifies registered listeners that the cursor has moved.
0N/A *
0N/A * @return <code>true</code> if the cursor is on a valid row;
0N/A * <code>false</code> otherwise or if there are no rows in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @throws SQLException if the type of this rowset
0N/A * is <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean last() throws SQLException {
0N/A return crsInternal.last();
0N/A }
0N/A
0N/A /**
0N/A * Returns the number of the current row in this <code>JoinRowSetImpl</code>
0N/A * object. The first row is number 1, the second number 2, and so on.
0N/A *
0N/A * @return the number of the current row; <code>0</code> if there is no
0N/A * current row
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public int getRow() throws SQLException {
0N/A return crsInternal.getRow();
0N/A }
0N/A
0N/A /**
0N/A * Moves this <code>JoinRowSetImpl</code> object's cursor to the row number
0N/A * specified.
0N/A *
0N/A * <p>If the number is positive, the cursor moves to an absolute row with
0N/A * respect to the beginning of the rowset. The first row is row 1, the second
0N/A * is row 2, and so on. For example, the following command, in which
0N/A * <code>crs</code> is a <code>JoinRowSetImpl</code> object, moves the cursor
0N/A * to the fourth row, starting from the beginning of the rowset.
0N/A * <PRE><code>
0N/A *
0N/A * crs.absolute(4);
0N/A *
0N/A * </code> </PRE>
0N/A * <P>
0N/A * If the number is negative, the cursor moves to an absolute row position
0N/A * with respect to the end of the rowset. For example, calling
0N/A * <code>absolute(-1)</code> positions the cursor on the last row,
0N/A * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
0N/A * If the <code>JoinRowSetImpl</code> object <code>crs</code> has five rows,
0N/A * the following command moves the cursor to the fourth-to-last row, which
0N/A * in the case of a rowset with five rows, is also the second row, counting
0N/A * from the beginning.
0N/A * <PRE><code>
0N/A *
0N/A * crs.absolute(-4);
0N/A *
0N/A * </code> </PRE>
0N/A *
0N/A * If the number specified is larger than the number of rows, the cursor
0N/A * will move to the position after the last row. If the number specified
0N/A * would move the cursor one or more rows before the first row, the cursor
0N/A * moves to the position before the first row.
0N/A * <P>
0N/A * Note: Calling <code>absolute(1)</code> is the same as calling the
0N/A * method <code>first()</code>. Calling <code>absolute(-1)</code> is the
0N/A * same as calling <code>last()</code>.
0N/A *
0N/A * @param row a positive number to indicate the row, starting row numbering from
0N/A * the first row, which is <code>1</code>; a negative number to indicate
0N/A * the row, starting row numbering from the last row, which is
0N/A * <code>-1</code>; must not be <code>0</code>
0N/A * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
0N/A * otherwise
0N/A * @throws SQLException if the given cursor position is <code>0</code> or the
0N/A * type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean absolute(int row) throws SQLException {
0N/A return crsInternal.absolute(row);
0N/A }
0N/A
0N/A /**
0N/A * Moves the cursor the specified number of rows from the current
0N/A * position, with a positive number moving it forward and a
0N/A * negative number moving it backward.
0N/A * <P>
0N/A * If the number is positive, the cursor moves the specified number of
0N/A * rows toward the end of the rowset, starting at the current row.
0N/A * For example, the following command, in which
0N/A * <code>crs</code> is a <code>JoinRowSetImpl</code> object with 100 rows,
0N/A * moves the cursor forward four rows from the current row. If the
0N/A * current row is 50, the cursor would move to row 54.
0N/A * <PRE><code>
0N/A *
0N/A * crs.relative(4);
0N/A *
0N/A * </code> </PRE>
0N/A * <P>
0N/A * If the number is negative, the cursor moves back toward the beginning
0N/A * the specified number of rows, starting at the current row.
0N/A * For example, calling the method
0N/A * <code>absolute(-1)</code> positions the cursor on the last row,
0N/A * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
0N/A * If the <code>JoinRowSetImpl</code> object <code>crs</code> has five rows,
0N/A * the following command moves the cursor to the fourth-to-last row, which
0N/A * in the case of a rowset with five rows, is also the second row
0N/A * from the beginning.
0N/A * <PRE><code>
0N/A *
0N/A * crs.absolute(-4);
0N/A *
0N/A * </code> </PRE>
0N/A *
0N/A * If the number specified is larger than the number of rows, the cursor
0N/A * will move to the position after the last row. If the number specified
0N/A * would move the cursor one or more rows before the first row, the cursor
0N/A * moves to the position before the first row. In both cases, this method
0N/A * throws an <code>SQLException</code>.
0N/A * <P>
0N/A * Note: Calling <code>absolute(1)</code> is the same as calling the
0N/A * method <code>first()</code>. Calling <code>absolute(-1)</code> is the
0N/A * same as calling <code>last()</code>. Calling <code>relative(0)</code>
0N/A * is valid, but it does not change the cursor position.
0N/A *
0N/A * @param rows an <code>int</code> indicating the number of rows to move
0N/A * the cursor, starting at the current row; a positive number
0N/A * moves the cursor forward; a negative number moves the cursor
0N/A * backward; must not move the cursor past the valid
0N/A * rows
0N/A * @return <code>true</code> if the cursor is on a row in this
0N/A * <code>JoinRowSetImpl</code> object; <code>false</code>
0N/A * otherwise
0N/A * @throws SQLException if there are no rows in this rowset, the cursor is
0N/A * positioned either before the first row or after the last row, or
0N/A * the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean relative(int rows) throws SQLException {
0N/A return crsInternal.relative(rows);
0N/A }
0N/A
0N/A /**
0N/A * Moves this <code>JoinRowSetImpl</code> object's cursor to the
0N/A * previous row and returns <code>true</code> if the cursor is on
0N/A * a valid row or <code>false</code> if it is not.
0N/A * This method also notifies all listeners registered with this
0N/A * <code>JoinRowSetImpl</code> object that its cursor has moved.
0N/A * <P>
0N/A * Note: calling the method <code>previous()</code> is not the same
0N/A * as calling the method <code>relative(-1)</code>. This is true
0N/A * because it is possible to call <code>previous()</code> from the insert
0N/A * row, from after the last row, or from the current row, whereas
0N/A * <code>relative</code> may only be called from the current row.
0N/A * <P>
0N/A * The method <code>previous</code> may used in a <code>while</code>
0N/A * loop to iterate through a rowset starting after the last row
0N/A * and moving toward the beginning. The loop ends when <code>previous</code>
0N/A * returns <code>false</code>, meaning that there are no more rows.
0N/A * For example, the following code fragment retrieves all the data in
0N/A * the <code>JoinRowSetImpl</code> object <code>crs</code>, which has
0N/A * three columns. Note that the cursor must initially be positioned
0N/A * after the last row so that the first call to the method
0N/A * <code>previous</code> places the cursor on the last line.
0N/A * <PRE> <code>
0N/A *
0N/A * crs.afterLast();
0N/A * while (previous()) {
0N/A * String name = crs.getString(1);
0N/A * int age = crs.getInt(2);
0N/A * short ssn = crs.getShort(3);
0N/A * System.out.println(name + " " + age + " " + ssn);
0N/A * }
0N/A *
0N/A * </code> </PRE>
0N/A * This method throws an <code>SQLException</code> if the cursor is not
0N/A * on a row in the rowset, before the first row, or after the last row.
0N/A *
0N/A * @return <code>true</code> if the cursor is on a valid row;
0N/A * <code>false</code> if it is before the first row or after the
0N/A * last row
0N/A * @throws SQLException if the cursor is not on a valid position or the
0N/A * type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean previous() throws SQLException {
0N/A return crsInternal.previous();
0N/A }
0N/A
0N/A /**
0N/A * Returns the index of the column whose name is <i>columnName</i>.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the name of the
0N/A * column for which the index will be returned; the name must
0N/A * match the SQL name of a column in this <code>JoinRowSet</code>
0N/A * object, ignoring case
0N/A * @throws SQLException if the given column name does not match one of the
0N/A * column names for this <code>JoinRowSet</code> object
0N/A */
0N/A public int findColumn(String columnName) throws SQLException {
0N/A return crsInternal.findColumn(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the current row of this <code>JoinRowSetImpl</code>
0N/A * object has been updated. The value returned
0N/A * depends on whether this rowset can detect updates: <code>false</code>
0N/A * will always be returned if it does not detect updates.
0N/A *
0N/A * @return <code>true</code> if the row has been visibly updated
0N/A * by the owner or another and updates are detected;
0N/A * <code>false</code> otherwise
0N/A * @throws SQLException if the cursor is on the insert row or not
0N/A * on a valid row
0N/A *
0N/A * @see DatabaseMetaData#updatesAreDetected
0N/A */
0N/A public boolean rowUpdated() throws SQLException {
0N/A return crsInternal.rowUpdated();
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the designated column of the current row of
0N/A * this <code>JoinRowSetImpl</code> object has been updated. The
0N/A * value returned depends on whether this rowset can detcted updates:
0N/A * <code>false</code> will always be returned if it does not detect updates.
0N/A *
0N/A * @return <code>true</code> if the column updated
0N/A * <code>false</code> otherwse
0N/A * @throws SQLException if the cursor is on the insert row or not
0N/A * on a valid row
0N/A * @see DatabaseMetaData#updatesAreDetected
0N/A */
0N/A public boolean columnUpdated(int indexColumn) throws SQLException {
0N/A return crsInternal.columnUpdated(indexColumn);
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the current row has been inserted. The value returned
0N/A * depends on whether or not the rowset can detect visible inserts.
0N/A *
0N/A * @return <code>true</code> if a row has been inserted and inserts are detected;
0N/A * <code>false</code> otherwise
0N/A * @throws SQLException if the cursor is on the insert row or not
0N/A * not on a valid row
0N/A *
0N/A * @see DatabaseMetaData#insertsAreDetected
0N/A */
0N/A public boolean rowInserted() throws SQLException {
0N/A return crsInternal.rowInserted();
0N/A }
0N/A
0N/A /**
0N/A * Indicates whether the current row has been deleted. A deleted row
0N/A * may leave a visible "hole" in a rowset. This method can be used to
0N/A * detect such holes if the rowset can detect deletions. This method
0N/A * will always return <code>false</code> if this rowset cannot detect
0N/A * deletions.
0N/A *
0N/A * @return <code>true</code> if (1)the current row is blank, indicating that
0N/A * the row has been deleted, and (2)deletions are detected;
0N/A * <code>false</code> otherwise
0N/A * @throws SQLException if the cursor is on a valid row in this rowset
0N/A * @see DatabaseMetaData#deletesAreDetected
0N/A */
0N/A public boolean rowDeleted() throws SQLException {
0N/A return crsInternal.rowDeleted();
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated nullable column in the current row or the
0N/A * insert row of this <code>JoinRowSetImpl</code> object with
0N/A * <code>null</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset; however, another method must be called to complete
0N/A * the update process. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to mark the row as updated
0N/A * and to notify listeners that the row has changed.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called to insert the new row into this rowset and to notify
0N/A * listeners that a row has changed.
0N/A * <P>
0N/A * In order to propagate updates in this rowset to the underlying
0N/A * data source, an application must call the method acceptChanges
0N/A * after it calls either <code>updateRow</code> or <code>insertRow</code>.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateNull(int columnIndex) throws SQLException {
0N/A crsInternal.updateNull(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>boolean</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBoolean(int columnIndex, boolean x) throws SQLException {
0N/A crsInternal.updateBoolean(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>byte</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateByte(int columnIndex, byte x) throws SQLException {
0N/A crsInternal.updateByte(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>short</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateShort(int columnIndex, short x) throws SQLException {
0N/A crsInternal.updateShort(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>int</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateInt(int columnIndex, int x) throws SQLException {
0N/A crsInternal.updateInt(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>long</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateLong(int columnIndex, long x) throws SQLException {
0N/A crsInternal.updateLong(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>float</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateFloat(int columnIndex, float x) throws SQLException {
0N/A crsInternal.updateFloat(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>double</code> value.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDouble(int columnIndex, double x) throws SQLException {
0N/A crsInternal.updateDouble(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>java.math.BigDecimal</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
0N/A crsInternal.updateBigDecimal(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>String</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to mark the row as updated.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called to insert the new row into this rowset and mark it
0N/A * as inserted. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A * <P>
0N/A * The method <code>acceptChanges</code> must be called if the
0N/A * updated values are to be written back to the underlying database.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateString(int columnIndex, String x) throws SQLException {
0N/A crsInternal.updateString(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>byte</code> array.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBytes(int columnIndex, byte x[]) throws SQLException {
0N/A crsInternal.updateBytes(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Date</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the type of the designated column is not
0N/A * an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
0N/A * (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
0N/A crsInternal.updateDate(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Time</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the type of the designated column is not
0N/A * an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
0N/A * (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
0N/A crsInternal.updateTime(columnIndex, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Timestamp</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the type of the designated column is not
0N/A * an SQL <code>DATE</code>, <code>TIME</code>, or
0N/A * <code>TIMESTAMP</code>, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
0N/A crsInternal.updateTimestamp(columnIndex, x);
0N/A }
0N/A
0N/A /*
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * ASCII stream value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @param length the number of one-byte ASCII characters in the stream
0N/A * @throws UnsupportedOperationException if this method is invoked
0N/A */
0N/A public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
0N/A crsInternal.updateAsciiStream(columnIndex, x, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>java.io.InputStream</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value; must be a <code>java.io.InputStream</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>, or
0N/A * <code>LONGVARBINARY</code> data
0N/A * @param length the length of the stream in bytes
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the data in the stream is not binary, or
0N/A * (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBinaryStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
0N/A crsInternal.updateBinaryStream(columnIndex, x, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>java.io.Reader</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value; must be a <code>java.io.Reader</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>,
0N/A * <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
0N/A * or <code>LONGVARCHAR</code> data
0N/A * @param length the length of the stream in characters
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the data in the stream is not a binary or
0N/A * character type, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
0N/A crsInternal.updateCharacterStream(columnIndex, x, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Object</code> value. The <code>scale</code> parameter indicates
0N/A * the number of digits to the right of the decimal point and is ignored
0N/A * if the new column value is not a type that will be mapped to an SQL
0N/A * <code>DECIMAL</code> or <code>NUMERIC</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @param scale the number of digits to the right of the decimal point (for
0N/A * <code>DECIMAL</code> and <code>NUMERIC</code> types only)
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
0N/A crsInternal.updateObject(columnIndex, x, scale);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(int columnIndex, Object x) throws SQLException {
0N/A crsInternal.updateObject(columnIndex, x);
0N/A }
0N/A
0N/A // columnName updates
0N/A
0N/A /**
0N/A * Sets the designated nullable column in the current row or the
0N/A * insert row of this <code>JoinRowSetImpl</code> object with
0N/A * <code>null</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateNull(String columnName) throws SQLException {
0N/A crsInternal.updateNull(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>boolean</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBoolean(String columnName, boolean x) throws SQLException {
0N/A crsInternal.updateBoolean(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>byte</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateByte(String columnName, byte x) throws SQLException {
0N/A crsInternal.updateByte(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>short</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateShort(String columnName, short x) throws SQLException {
0N/A crsInternal.updateShort(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>int</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateInt(String columnName, int x) throws SQLException {
0N/A crsInternal.updateInt(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>long</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateLong(String columnName, long x) throws SQLException {
0N/A crsInternal.updateLong(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>float</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateFloat(String columnName, float x) throws SQLException {
0N/A crsInternal.updateFloat(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>double</code> value.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDouble(String columnName, double x) throws SQLException {
0N/A crsInternal.updateDouble(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>java.math.BigDecimal</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
0N/A crsInternal.updateBigDecimal(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>String</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateString(String columnName, String x) throws SQLException {
0N/A crsInternal.updateString(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>byte</code> array.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBytes(String columnName, byte x[]) throws SQLException {
0N/A crsInternal.updateBytes(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Date</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the type
0N/A * of the designated column is not an SQL <code>DATE</code> or
0N/A * <code>TIMESTAMP</code>, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDate(String columnName, java.sql.Date x) throws SQLException {
0N/A crsInternal.updateDate(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Time</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the type
0N/A * of the designated column is not an SQL <code>TIME</code> or
0N/A * <code>TIMESTAMP</code>, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTime(String columnName, java.sql.Time x) throws SQLException {
0N/A crsInternal.updateTime(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Timestamp</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if the given column index is out of bounds or
0N/A * the cursor is not on one of this rowset's rows or its
0N/A * insert row
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the type
0N/A * of the designated column is not an SQL <code>DATE</code>,
0N/A * <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
0N/A crsInternal.updateTimestamp(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Unsupported; throws an <code>UnsupportedOperationException</code>
0N/A * if called.
0N/A * <P>
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * ASCII stream value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @param length the number of one-byte ASCII characters in the stream
0N/A * @throws UnsupportedOperationException if this method is invoked
0N/A */
0N/A public void updateAsciiStream(String columnName, java.io.InputStream x, int length) throws SQLException {
0N/A crsInternal.updateAsciiStream(columnName, x, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>java.io.InputStream</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value; must be a <code>java.io.InputStream</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>, or
0N/A * <code>LONGVARBINARY</code> data
0N/A * @param length the length of the stream in bytes
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the data
0N/A * in the stream is not binary, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
0N/A crsInternal.updateBinaryStream(columnName, x, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>java.io.Reader</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value; must be a <code>java.io.Reader</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>,
0N/A * <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
0N/A * or <code>LONGVARCHAR</code> data
0N/A * @param length the length of the stream in characters
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the data
0N/A * in the stream is not a binary or character type, or (4) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateCharacterStream(String columnName, java.io.Reader x, int length) throws SQLException {
0N/A crsInternal.updateCharacterStream(columnName, x, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Object</code> value. The <code>scale</code> parameter
0N/A * indicates the number of digits to the right of the decimal point
0N/A * and is ignored if the new column value is not a type that will be
0N/A * mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @param scale the number of digits to the right of the decimal point (for
0N/A * <code>DECIMAL</code> and <code>NUMERIC</code> types only)
0N/A * @throws SQLException if the given column index is out of bounds or
0N/A * the cursor is not on one of this rowset's rows or its
0N/A * insert row
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(String columnName, Object x, int scale) throws SQLException {
0N/A crsInternal.updateObject(columnName, x, scale);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(String columnName, Object x) throws SQLException {
0N/A crsInternal.updateObject(columnName, x);
0N/A }
0N/A
0N/A /**
0N/A * Inserts the contents of this <code>JoinRowSetImpl</code> object's insert
0N/A * row into this rowset immediately following the current row.
0N/A * If the current row is the
0N/A * position after the last row or before the first row, the new row will
0N/A * be inserted at the end of the rowset. This method also notifies
0N/A * listeners registered with this rowset that the row has changed.
0N/A * <P>
0N/A * The cursor must be on the insert row when this method is called.
0N/A *
0N/A * @throws SQLException if (1) the cursor is not on the insert row,
0N/A * (2) one or more of the non-nullable columns in the insert
0N/A * row has not been given a value, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void insertRow() throws SQLException {
0N/A crsInternal.insertRow();
0N/A }
0N/A
0N/A /**
0N/A * Marks the current row of this <code>JoinRowSetImpl</code> object as
0N/A * updated and notifies listeners registered with this rowset that the
0N/A * row has changed.
0N/A * <P>
0N/A * This method cannot be called when the cursor is on the insert row, and
0N/A * it should be called before the cursor moves to another row. If it is
0N/A * called after the cursor moves to another row, this method has no effect,
0N/A * and the updates made before the cursor moved will be lost.
0N/A *
0N/A * @throws SQLException if the cursor is on the insert row or this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateRow() throws SQLException {
0N/A crsInternal.updateRow();
0N/A }
0N/A
0N/A /**
0N/A * Deletes the current row from this <code>JoinRowSetImpl</code> object and
0N/A * notifies listeners registered with this rowset that a row has changed.
0N/A * This method cannot be called when the cursor is on the insert row.
0N/A * <P>
0N/A * This method marks the current row as deleted, but it does not delete
0N/A * the row from the underlying data source. The method
0N/A * <code>acceptChanges</code> must be called to delete the row in
0N/A * the data source.
0N/A *
0N/A * @throws SQLException if (1) this method is called when the cursor
0N/A * is on the insert row, before the first row, or after the
0N/A * last row or (2) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void deleteRow() throws SQLException {
0N/A crsInternal.deleteRow();
0N/A }
0N/A
0N/A /**
0N/A * Sets the current row with its original value and marks the row as
0N/A * not updated, thus undoing any changes made to the row since the
0N/A * last call to the methods <code>updateRow</code> or <code>deleteRow</code>.
0N/A * This method should be called only when the cursor is on a row in
0N/A * this rowset.
0N/A *
0N/A * @throws SQLException if the cursor is on the insert row, before the
0N/A * first row, or after the last row
0N/A */
0N/A public void refreshRow() throws SQLException {
0N/A crsInternal.refreshRow();
0N/A }
0N/A
0N/A /**
0N/A * Rolls back any updates made to the current row of this
0N/A * <code>JoinRowSetImpl</code> object and notifies listeners that
0N/A * a row has changed. To have an effect, this method
0N/A * must be called after an <code>updateXXX</code> method has been
0N/A * called and before the method <code>updateRow</code> has been called.
0N/A * If no updates have been made or the method <code>updateRow</code>
0N/A * has already been called, this method has no effect.
0N/A * <P>
0N/A * After <code>updateRow</code> is called it is the
0N/A * <code>cancelRowUpdates</code> has no affect on the newly
0N/A * inserted values. The method <code>cancelRowInsert</code> can
0N/A * be used to remove any rows inserted into the RowSet.
0N/A *
0N/A * @throws SQLException if the cursor is on the insert row, before the
0N/A * first row, or after the last row
0N/A */
0N/A public void cancelRowUpdates() throws SQLException {
0N/A crsInternal.cancelRowUpdates();
0N/A }
0N/A
0N/A /**
0N/A * Moves the cursor for this <code>JoinRowSetImpl</code> object
0N/A * to the insert row. The current row in the rowset is remembered
0N/A * while the cursor is on the insert row.
0N/A * <P>
0N/A * The insert row is a special row associated with an updatable
0N/A * rowset. It is essentially a buffer where a new row may
0N/A * be constructed by calling the appropriate <code>updateXXX</code>
0N/A * methods to assign a value to each column in the row. A complete
0N/A * row must be constructed; that is, every column that is not nullable
0N/A * must be assigned a value. In order for the new row to become part
0N/A * of this rowset, the method <code>insertRow</code> must be called
0N/A * before the cursor is moved back to the rowset.
0N/A * <P>
0N/A * Only certain methods may be invoked while the cursor is on the insert
0N/A * row; many methods throw an exception if they are called while the
0N/A * cursor is there. In addition to the <code>updateXXX</code>
0N/A * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
0N/A * may be called when the cursor is on the insert row. A <code>getXXX</code>
0N/A * method should be called on a column only after an <code>updateXXX</code>
0N/A * method has been called on that column; otherwise, the value returned is
0N/A * undetermined.
0N/A *
0N/A * @throws SQLException if this <code>JoinRowSetImpl</code> object is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void moveToInsertRow() throws SQLException {
0N/A crsInternal.moveToInsertRow();
0N/A }
0N/A
0N/A /**
0N/A * Moves the cursor for this <code>JoinRowSetImpl</code> object to
0N/A * the current row. The current row is the row the cursor was on
0N/A * when the method <code>moveToInsertRow</code> was called.
0N/A * <P>
0N/A * Calling this method has no effect unless it is called while the
0N/A * cursor is on the insert row.
0N/A *
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public void moveToCurrentRow() throws SQLException {
0N/A crsInternal.moveToCurrentRow();
0N/A }
0N/A
0N/A /**
0N/A * Returns <code>null</code>.
0N/A *
0N/A * @return <code>null</code>
0N/A * @throws SQLException if an error occurs
0N/A */
0N/A public Statement getStatement() throws SQLException {
0N/A return crsInternal.getStatement();
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as a <code>Ref</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) the designated column does not store an
0N/A * SQL <code>REF</code> value
0N/A */
0N/A public Ref getRef(int columnIndex) throws SQLException {
0N/A return crsInternal.getRef(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as a <code>Blob</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @return a <code>Blob</code> object representing an SQL <code>BLOB</code> value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) the designated column does not store an
0N/A * SQL <code>BLOB</code> value
0N/A */
0N/A public Blob getBlob(int columnIndex) throws SQLException {
0N/A return crsInternal.getBlob(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as a <code>Clob</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @return a <code>Clob</code> object representing an SQL <code>CLOB</code> value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) the designated column does not store an
0N/A * SQL <code>CLOB</code> value
0N/A */
0N/A public Clob getClob(int columnIndex) throws SQLException {
0N/A return crsInternal.getClob(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as an <code>Array</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @return an <code>Array</code> object representing an SQL
0N/A * <code>ARRAY</code> value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) the designated column does not store an
0N/A * SQL <code>ARRAY</code> value
0N/A */
0N/A public Array getArray(int columnIndex) throws SQLException {
0N/A return crsInternal.getArray(columnIndex);
0N/A }
0N/A
0N/A // ColumnName
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as a <code>Ref</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @return a <code>Ref</code> object representing an SQL<code> REF</code> value
0N/A * @throws SQLException if (1) the given column name is not the name
0N/A * of a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the column value
0N/A * is not an SQL <code>REF</code> value
0N/A */
0N/A public Ref getRef(String columnName) throws SQLException {
0N/A return crsInternal.getRef(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as a <code>Blob</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @return a <code>Blob</code> object representing an SQL
0N/A * <code>BLOB</code> value
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>BLOB</code> value
0N/A */
0N/A public Blob getBlob(String columnName) throws SQLException {
0N/A return crsInternal.getBlob(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as a <code>Clob</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @return a <code>Clob</code> object representing an SQL
0N/A * <code>CLOB</code> value
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>CLOB</code> value
0N/A */
0N/A public Clob getClob(String columnName) throws SQLException {
0N/A return crsInternal.getClob(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in this
0N/A * <code>JoinRowSetImpl</code> object as an <code>Array</code> object
0N/A * in the Java programming lanugage.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @return an <code>Array</code> object representing an SQL
0N/A * <code>ARRAY</code> value
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>ARRAY</code> value
0N/A */
0N/A public Array getArray(String columnName) throws SQLException {
0N/A return crsInternal.getArray(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Date</code>
0N/A * object, using the given <code>Calendar</code> object to construct an
0N/A * appropriate millisecond value for the date.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @param cal the <code>java.util.Calendar</code> object to use in
0N/A * constructing the date
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>DATE</code> or
0N/A * <code>TIMESTAMP</code> value
0N/A */
0N/A public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
0N/A return crsInternal.getDate(columnIndex, cal);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Date</code>
0N/A * object, using the given <code>Calendar</code> object to construct an
0N/A * appropriate millisecond value for the date.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param cal the <code>java.util.Calendar</code> object to use in
0N/A * constructing the date
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>DATE</code> or
0N/A * <code>TIMESTAMP</code> value
0N/A */
0N/A public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
0N/A return crsInternal.getDate(columnName, cal);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Time</code>
0N/A * object, using the given <code>Calendar</code> object to construct an
0N/A * appropriate millisecond value for the date.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @param cal the <code>java.util.Calendar</code> object to use in
0N/A * constructing the date
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>TIME</code> or
0N/A * <code>TIMESTAMP</code> value
0N/A */
0N/A public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
0N/A return crsInternal.getTime(columnIndex, cal);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Time</code>
0N/A * object, using the given <code>Calendar</code> object to construct an
0N/A * appropriate millisecond value for the date.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param cal the <code>java.util.Calendar</code> object to use in
0N/A * constructing the date
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>TIME</code> or
0N/A * <code>TIMESTAMP</code> value
0N/A */
0N/A public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
0N/A return crsInternal.getTime(columnName, cal);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a <code>java.sql.Timestamp</code>
0N/A * object, using the given <code>Calendar</code> object to construct an
0N/A * appropriate millisecond value for the date.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in the rowset
0N/A * @param cal the <code>java.util.Calendar</code> object to use in
0N/A * constructing the date
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>TIME</code> or
0N/A * <code>TIMESTAMP</code> value
0N/A */
0N/A public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
0N/A return crsInternal.getTimestamp(columnIndex, cal);
0N/A }
0N/A
0N/A /**
0N/A * Retrieves the value of the designated column in the current row
0N/A * of this <code>JoinRowSetImpl</code> object as a
0N/A * <code>java.sql.Timestamp</code> object, using the given
0N/A * <code>Calendar</code> object to construct an appropriate
0N/A * millisecond value for the date.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param cal the <code>java.util.Calendar</code> object to use in
0N/A * constructing the date
0N/A * @return the column value; if the value is SQL <code>NULL</code>,
0N/A * the result is <code>null</code>
0N/A * @throws SQLException if (1) the given column name is not the name of
0N/A * a column in this rowset, (2) the cursor is not on one of
0N/A * this rowset's rows or its insert row, or (3) the designated
0N/A * column does not store an SQL <code>DATE</code>,
0N/A * <code>TIME</code>, or <code>TIMESTAMP</code> value
0N/A */
0N/A public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
0N/A return crsInternal.getTimestamp(columnName, cal);
0N/A }
0N/A
0N/A /**
0N/A * Sets the metadata for this <code>JoinRowSetImpl</code> object
0N/A * with the given <code>RowSetMetaData</code> object.
0N/A *
0N/A * @param md a <code>RowSetMetaData</code> object instance containing
0N/A * metadata about the columsn in the rowset
0N/A * @throws SQLException if invalid meta data is supplied to the
0N/A * rowset
0N/A */
0N/A public void setMetaData(RowSetMetaData md) throws SQLException {
0N/A crsInternal.setMetaData(md);
0N/A }
0N/A
0N/A public ResultSet getOriginal() throws SQLException {
0N/A return crsInternal.getOriginal();
0N/A }
0N/A
0N/A /**
0N/A * Returns a result set containing the original value of the rowset.
0N/A * The cursor is positioned before the first row in the result set.
0N/A * Only rows contained in the result set returned by getOriginal()
0N/A * are said to have an original value.
0N/A *
0N/A * @return the original result set of the rowset
0N/A * @throws SQLException if an error occurs produce the
0N/A * <code>ResultSet</code> object
0N/A */
0N/A public ResultSet getOriginalRow() throws SQLException {
0N/A return crsInternal.getOriginalRow();
0N/A }
0N/A
0N/A /**
0N/A * Returns a result set containing the original value of the current
0N/A * row only.
0N/A *
0N/A * @throws SQLException if there is no current row
0N/A * @see #setOriginalRow
0N/A */
0N/A public void setOriginalRow() throws SQLException {
0N/A crsInternal.setOriginalRow();
0N/A }
0N/A
0N/A /**
0N/A * Returns the columns that make a key to uniquely identify a
0N/A * row in this <code>JoinRowSetImpl</code> object.
0N/A *
0N/A * @return an array of column number that constites a primary
0N/A * key for this rowset. This array should be empty
0N/A * if no columns is representitive of a primary key
0N/A * @throws SQLException if the rowset is empty or no columns
0N/A * are designated as primary keys
0N/A * @see #setKeyColumns
0N/A */
0N/A public int[] getKeyColumns() throws SQLException {
0N/A return crsInternal.getKeyColumns();
0N/A }
0N/A
0N/A /**
0N/A * Sets this <code>JoinRowSetImpl</code> object's
0N/A * <code>keyCols</code> field with the given array of column
0N/A * numbers, which forms a key for uniquely identifying a row
0N/A * in this rowset.
0N/A *
0N/A * @param cols an array of <code>int</code> indicating the
0N/A * columns that form a primary key for this
0N/A * <code>JoinRowSetImpl</code> object; every
0N/A * element in the array must be greater than
0N/A * <code>0</code> and less than or equal to the number
0N/A * of columns in this rowset
0N/A * @throws SQLException if any of the numbers in the
0N/A * given array is not valid for this rowset
0N/A * @see #getKeyColumns
0N/A */
0N/A public void setKeyColumns(int[] cols) throws SQLException {
0N/A crsInternal.setKeyColumns(cols);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Ref</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param ref the <code>java.sql.Ref</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
0N/A crsInternal.updateRef(columnIndex, ref);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Ref</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the name of the column
0N/A * to be updated; must match one of the column names in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @param ref the <code>java.sql.Ref</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column name is not valid,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
0N/A crsInternal.updateRef(columnName, ref);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Clob</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param c the <code>java.sql.Clob</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateClob(int columnIndex, Clob c) throws SQLException {
0N/A crsInternal.updateClob(columnIndex, c);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Clob</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the name of the column
0N/A * to be updated; must match one of the column names in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @param c the <code>java.sql.Clob</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column name is not valid,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateClob(String columnName, Clob c) throws SQLException {
0N/A crsInternal.updateClob(columnName, c);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Blob</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param b the <code>java.sql.Blob</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBlob(int columnIndex, Blob b) throws SQLException {
0N/A crsInternal.updateBlob(columnIndex, b);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Blob</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the name of the column
0N/A * to be updated; must match one of the column names in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @param b the <code>java.sql.Blob</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column name is not valid,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBlob(String columnName, Blob b) throws SQLException {
0N/A crsInternal.updateBlob(columnName, b);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Array</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param a the <code>java.sql.Array</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateArray(int columnIndex, Array a) throws SQLException {
0N/A crsInternal.updateArray(columnIndex, a);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>JoinRowSetImpl</code> object with the given
0N/A * <code>Array</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Either of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object giving the name of the column
0N/A * to be updated; must match one of the column names in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @param a the <code>java.sql.Array</code> object that will be set as
0N/A * the new column value
0N/A * @throws SQLException if (1) the given column name is not valid,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateArray(String columnName, Array a) throws SQLException {
0N/A crsInternal.updateArray(columnName, a);
0N/A }
0N/A
0N/A /**
0N/A * Populates this <code>JoinRowSetImpl</code> object with data.
0N/A * This form of the method uses the rowset's user, password, and url or
0N/A * data source name properties to create a database
0N/A * connection. If properties that are needed
0N/A * have not been set, this method will throw an exception.
0N/A * <P>
0N/A * Another form of this method uses an existing JDBC <code>Connection</code>
0N/A * object instead of creating a new one; therefore, it ignores the
0N/A * properties used for establishing a new connection.
0N/A * <P>
0N/A * The query specified by the command property is executed to create a
0N/A * <code>ResultSet</code> object from which to retrieve data.
0N/A * The current contents of the rowset are discarded, and the
0N/A * rowset's metadata is also (re)set. If there are outstanding updates,
0N/A * they are also ignored.
0N/A * <P>
0N/A * The method <code>execute</code> closes any database connections that it
0N/A * creates.
0N/A *
0N/A * @throws SQLException if an error occurs or the
0N/A * necessary properties have not been set
0N/A */
0N/A public void execute() throws SQLException {
0N/A crsInternal.execute();
0N/A }
0N/A
0N/A /**
0N/A * Populates this <code>JoinRowSetImpl</code> object with data,
0N/A * using the given connection to produce the result set from
0N/A * which data will be read. A second form of this method,
0N/A * which takes no arguments, uses the values from this rowset's
0N/A * user, password, and either url or data source properties to
0N/A * create a new database connection. The form of <code>execute</code>
0N/A * that is given a connection ignores these properties.
0N/A *
0N/A * @param conn A standard JDBC <code>Connection</code> object with valid
0N/A * properties that the <code>JoinRowSet</code> implementation
0N/A * can pass to a synchronization provider to establish a
0N/A * connection to the datasource
0N/A * @throws SQLException if an invalid <code>Connection</code> is supplied
0N/A * or an error occurs in establishing the connection to the
0N/A * data soure
0N/A * @see java.sql.Connection
0N/A */
0N/A public void execute(Connection conn) throws SQLException {
0N/A crsInternal.execute(conn);
0N/A }
0N/A
0N/A /**
0N/A * Provide interface coverage for getURL(int) in ResultSet->RowSet
0N/A */
0N/A public java.net.URL getURL(int columnIndex) throws SQLException {
0N/A return crsInternal.getURL(columnIndex);
0N/A }
0N/A
0N/A /**
0N/A * Provide interface coverage for getURL(String) in ResultSet->RowSet
0N/A */
0N/A public java.net.URL getURL(String columnName) throws SQLException {
0N/A return crsInternal.getURL(columnName);
0N/A }
0N/A
0N/A /**
0N/A * Creates a new <code>WebRowSet</code> object, populates it with the
0N/A * data in the given <code>ResultSet</code> object, and writes it
0N/A * to the given <code>java.io.Writer</code> object in XML format.
0N/A *
0N/A * @throws SQLException if an error occurs writing out the rowset
0N/A * contents to XML
0N/A */
0N/A public void writeXml(ResultSet rs, java.io.Writer writer)
0N/A throws SQLException {
0N/A wrs = new WebRowSetImpl();
0N/A wrs.populate(rs);
0N/A wrs.writeXml(writer);
0N/A }
0N/A
0N/A /**
0N/A * Writes this <code>JoinRowSet</code> object to the given
0N/A * <code>java.io.Writer</code> object in XML format. In
0N/A * addition to the rowset's data, its properties and metadata
0N/A * are also included.
0N/A *
0N/A * @throws SQLException if an error occurs writing out the rowset
0N/A * contents to XML
0N/A */
0N/A public void writeXml(java.io.Writer writer) throws SQLException {
0N/A createWebRowSet().writeXml(writer);
0N/A}
0N/A
0N/A /**
0N/A * Reads this <code>JoinRowSet</code> object in its XML format.
0N/A *
0N/A * @throws SQLException if a database access error occurs
0N/A */
0N/A public void readXml(java.io.Reader reader) throws SQLException {
0N/A wrs = new WebRowSetImpl();
0N/A wrs.readXml(reader);
0N/A crsInternal = (CachedRowSetImpl)wrs;
0N/A }
0N/A
0N/A // Stream based methods
0N/A /**
0N/A * Reads a stream based XML input to populate an <code>WebRowSet</code>
0N/A *
0N/A * @throws SQLException if a data source access occurs
0N/A * @throws IOException if a IO exception occurs
0N/A */
0N/A public void readXml(java.io.InputStream iStream) throws SQLException, IOException {
0N/A wrs = new WebRowSetImpl();
0N/A wrs.readXml(iStream);
0N/A crsInternal = (CachedRowSetImpl)wrs;
0N/A }
0N/A
0N/A /**
0N/A * Creates an an output stream of the internal state and contents of a
0N/A * <code>WebRowSet</code> for XML proceessing
0N/A *
0N/A * @throws SQLException if a datasource access occurs
0N/A * @throws IOException if an IO exception occurs
0N/A */
0N/A public void writeXml(java.io.OutputStream oStream) throws SQLException, IOException {
0N/A createWebRowSet().writeXml(oStream);
0N/A }
0N/A
0N/A /**
0N/A * Creates a new <code>WebRowSet</code> object, populates it with
0N/A * the contents of the <code>ResultSet</code> and creates an output
0N/A * streams the internal state and contents of the rowset for XML processing.
0N/A *
0N/A * @throws SQLException if a datasource access occurs
0N/A * @throws IOException if an IO exception occurs
0N/A */
0N/A public void writeXml(ResultSet rs, java.io.OutputStream oStream) throws SQLException, IOException {
0N/A wrs = new WebRowSetImpl();
0N/A wrs.populate(rs);
0N/A wrs.writeXml(oStream);
0N/A }
0N/A
0N/A /**
0N/A * %%% Javadoc comments to be added here
0N/A */
0N/A private WebRowSet createWebRowSet() throws SQLException {
0N/A if(wrs != null) {
0N/A // check if it has already been initialized.
0N/A return wrs;
0N/A } else {
0N/A wrs = new WebRowSetImpl();
0N/A crsInternal.beforeFirst();
0N/A wrs.populate(crsInternal);
0N/A return wrs;
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Returns the last set SQL <code>JOIN</code> type in this JoinRowSetImpl
0N/A * object
0N/A *
0N/A * @return joinType One of the standard JoinRowSet static field JOIN types
0N/A * @throws SQLException if an error occurs determining the current join type
0N/A */
0N/A public int getJoinType() throws SQLException {
0N/A if (vecJoinType == null) {
0N/A // Default JoinRowSet type
0N/A this.setJoinType(JoinRowSet.INNER_JOIN);
0N/A }
0N/A Integer i = (Integer)(vecJoinType.get(vecJoinType.size()-1));
0N/A return i.intValue();
0N/A }
0N/A
0N/A /**
0N/A * The listener will be notified whenever an event occurs on this <code>JoinRowSet</code>
0N/A * object.
0N/A * <P>
0N/A * A listener might, for example, be a table or graph that needs to
0N/A * be updated in order to accurately reflect the current state of
0N/A * the <code>RowSet</code> object.
0N/A * <p>
0N/A * <b>Note</b>: if the <code>RowSetListener</code> object is
0N/A * <code>null</code>, this method silently discards the <code>null</code>
0N/A * value and does not add a null reference to the set of listeners.
0N/A * <p>
0N/A * <b>Note</b>: if the listener is already set, and the new <code>RowSetListerner</code>
0N/A * instance is added to the set of listeners already registered to receive
0N/A * event notifications from this <code>RowSet</code>.
0N/A *
0N/A * @param listener an object that has implemented the
0N/A * <code>javax.sql.RowSetListener</code> interface and wants to be notified
0N/A * of any events that occur on this <code>JoinRowSet</code> object; May be
0N/A * null.
0N/A * @see #removeRowSetListener
0N/A */
0N/A public void addRowSetListener(RowSetListener listener) {
0N/A crsInternal.addRowSetListener(listener);
0N/A }
0N/A
0N/A /**
0N/A * Removes the designated object from this <code>JoinRowSet</code> object's list of listeners.
0N/A * If the given argument is not a registered listener, this method
0N/A * does nothing.
0N/A *
0N/A * <b>Note</b>: if the <code>RowSetListener</code> object is
0N/A * <code>null</code>, this method silently discards the <code>null</code>
0N/A * value.
0N/A *
0N/A * @param listener a <code>RowSetListener</code> object that is on the list
0N/A * of listeners for this <code>JoinRowSet</code> object
0N/A * @see #addRowSetListener
0N/A */
0N/A public void removeRowSetListener(RowSetListener listener) {
0N/A crsInternal.removeRowSetListener(listener);
0N/A }
0N/A
0N/A /**
0N/A * Converts this <code>JoinRowSetImpl</code> object to a collection
0N/A * of tables. The sample implementation utilitizes the <code>TreeMap</code>
0N/A * collection type.
0N/A * This class guarantees that the map will be in ascending key order,
0N/A * sorted according to the natural order for the key's class.
0N/A *
0N/A * @return a <code>Collection</code> object consisting of tables,
0N/A * each of which is a copy of a row in this
0N/A * <code>JoinRowSetImpl</code> object
0N/A * @throws SQLException if an error occurs in generating the collection
0N/A * @see #toCollection(int)
0N/A * @see #toCollection(String)
0N/A * @see java.util.TreeMap
0N/A */
0N/A public Collection<?> toCollection() throws SQLException {
0N/A return crsInternal.toCollection();
0N/A }
0N/A
0N/A /**
0N/A * Returns the specified column of this <code>JoinRowSetImpl</code> object
0N/A * as a <code>Collection</code> object. This method makes a copy of the
0N/A * column's data and utilitizes the <code>Vector</code> to establish the
0N/A * collection. The <code>Vector</code> class implements a growable array
0N/A * objects allowing the individual components to be accessed using an
0N/A * an integer index similar to that of an array.
0N/A *
0N/A * @return a <code>Collection</code> object that contains the value(s)
0N/A * stored in the specified column of this
0N/A * <code>JoinRowSetImpl</code>
0N/A * object
0N/A * @throws SQLException if an error occurs generated the collection; or
0N/A * an invalid column is provided.
0N/A * @see #toCollection()
0N/A * @see #toCollection(String)
0N/A * @see java.util.Vector
0N/A */
0N/A public Collection<?> toCollection(int column) throws SQLException {
0N/A return crsInternal.toCollection(column);
0N/A }
0N/A
0N/A /**
0N/A * Returns the specified column of this <code>JoinRowSetImpl</code> object
0N/A * as a <code>Collection</code> object. This method makes a copy of the
0N/A * column's data and utilitizes the <code>Vector</code> to establish the
0N/A * collection. The <code>Vector</code> class implements a growable array
0N/A * objects allowing the individual components to be accessed using an
0N/A * an integer index similar to that of an array.
0N/A *
0N/A * @return a <code>Collection</code> object that contains the value(s)
0N/A * stored in the specified column of this
0N/A * <code>JoinRowSetImpl</code>
0N/A * object
0N/A * @throws SQLException if an error occurs generated the collection; or
0N/A * an invalid column is provided.
0N/A * @see #toCollection()
0N/A * @see #toCollection(int)
0N/A * @see java.util.Vector
0N/A */
0N/A public Collection<?> toCollection(String column) throws SQLException {
0N/A return crsInternal.toCollection(column);
0N/A }
0N/A
0N/A /**
0N/A * Creates a <code>RowSet</code> object that is a copy of
0N/A * this <code>JoinRowSetImpl</code> object's table structure
0N/A * and the constraints only.
0N/A * There will be no data in the object being returned.
0N/A * Updates made on a copy are not visible to the original rowset.
0N/A * <P>
0N/A * This helps in getting the underlying XML schema which can
0N/A * be used as the basis for populating a <code>WebRowSet</code>.
0N/A *
0N/A * @return a new <code>CachedRowSet</code> object that is a copy
0N/A * of this <code>JoinRowSetImpl</code> object's schema and
0N/A * retains all the constraints on the original rowset but contains
0N/A * no data
0N/A * @throws SQLException if an error occurs in generating the copy
0N/A * of the <code>CachedRowSet</code> object
0N/A * @see #createShared
0N/A * @see #createCopy
0N/A * @see #createCopyNoConstraints
0N/A * @see javax.sql.RowSetEvent
0N/A * @see javax.sql.RowSetListener
0N/A */
0N/A public CachedRowSet createCopySchema() throws SQLException {
0N/A return crsInternal.createCopySchema();
0N/A }
0N/A
2796N/A /**
2796N/A * {@inheritDoc}
2796N/A */
2796N/A public void setSyncProvider(String providerStr) throws SQLException {
2796N/A crsInternal.setSyncProvider(providerStr);
2796N/A }
2796N/A
2796N/A /**
2796N/A * {@inheritDoc}
2796N/A */
2796N/A public void acceptChanges() throws SyncProviderException {
2796N/A crsInternal.acceptChanges();
2796N/A }
2796N/A
2796N/A /**
2796N/A * {@inheritDoc}
2796N/A */
2796N/A public SyncProvider getSyncProvider() throws SQLException {
2796N/A return crsInternal.getSyncProvider();
2796N/A }
2796N/A
2741N/A /**
2741N/A * This method re populates the resBundle
2741N/A * during the deserialization process
2741N/A *
2741N/A */
2741N/A private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
2741N/A // Default state initialization happens here
2741N/A ois.defaultReadObject();
2741N/A // Initialization of transient Res Bundle happens here .
2741N/A try {
2741N/A resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
2741N/A } catch(IOException ioe) {
2741N/A throw new RuntimeException(ioe);
2741N/A }
2741N/A
2741N/A }
2741N/A
2741N/A static final long serialVersionUID = -5590501621560008453L;
0N/A}