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