|
Java example source code file (CachedRowSetImpl.java)
The CachedRowSetImpl.java Java example source code/* * Copyright (c) 2003, 2013, 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 java.io.*; import java.math.*; import java.util.*; import java.text.*; import javax.sql.rowset.*; import javax.sql.rowset.spi.*; import javax.sql.rowset.serial.*; import com.sun.rowset.internal.*; import com.sun.rowset.providers.*; /** * The standard implementation of the <code>CachedRowSet interface. * * See interface definition for full behavior and implementation requirements. * This reference implementation has made provision for a one-to-one write back * facility and it is curremtly be possible to change the peristence provider * during the life-time of any CachedRowSetImpl. * * @author Jonathan Bruce, Amit Handa */ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetInternal, Serializable, Cloneable, CachedRowSet { /** * The <code>SyncProvider used by the CachedRowSet */ private SyncProvider provider; /** * The <code>RowSetReaderImpl object that is the reader * for this rowset. The method <code>execute uses this * reader as part of its implementation. * @serial */ private RowSetReader rowSetReader; /** * The <code>RowSetWriterImpl object that is the writer * for this rowset. The method <code>acceptChanges uses * this writer as part of its implementation. * @serial */ private RowSetWriter rowSetWriter; /** * The <code>Connection object that connects with this * <code>CachedRowSetImpl object's current underlying data source. */ private transient Connection conn; /** * The <code>ResultSetMetaData object that contains information * about the columns in the <code>ResultSet object that is the * current source of data for this <code>CachedRowSetImpl object. */ private transient ResultSetMetaData RSMD; /** * The <code>RowSetMetaData object that contains information about * the columns in this <code>CachedRowSetImpl object. * @serial */ private RowSetMetaDataImpl RowSetMD; // Properties of this RowSet /** * An array containing the columns in this <code>CachedRowSetImpl * object that form a unique identifier for a row. This array * is used by the writer. * @serial */ private int keyCols[]; /** * The name of the table in the underlying database to which updates * should be written. This name is needed because most drivers * do not return this information in a <code>ResultSetMetaData * object. * @serial */ private String tableName; /** * A <code>Vector object containing the* <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) positions the cursor on the last row, * <code>absolute(-2) moves it on the next-to-last row, and so on. * If the <code>CachedRowSetImpl object crs 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>
*
* crs.absolute(-4);
*
* </code>
*
* 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) is the same as calling the
* method <code>first(). Calling absolute(-1) is the
* same as calling <code>last().
*
* @param row a positive number to indicate the row, starting row numbering from
* the first row, which is <code>1; a negative number to indicate
* the row, starting row numbering from the last row, which is
* <code>-1; it must not be 0
* @return <code>true if the cursor is on the rowset; false
* otherwise
* @throws SQLException if the given cursor position is <code>0 or the
* type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY
*/
public boolean absolute( int row ) throws SQLException {
if (row == 0 || getType() == ResultSet.TYPE_FORWARD_ONLY) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.absolute").toString());
}
if (row > 0) { // we are moving foward
if (row > numRows) {
// fell off the end
afterLast();
return false;
} else {
if (absolutePos <= 0)
internalFirst();
}
} else { // we are moving backward
if (cursorPos + row < 0) {
// fell off the front
beforeFirst();
return false;
} else {
if (absolutePos >= 0)
internalLast();
}
}
// Now move towards the absolute row that we're looking for
while (absolutePos != row) {
if (absolutePos < row) {
if (!internalNext())
break;
}
else {
if (!internalPrevious())
break;
}
}
notifyCursorMoved();
if (isAfterLast() || isBeforeFirst()) {
return false;
} else {
return true;
}
}
/**
* 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 is a CachedRowSetImpl 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>
*
* crs.relative(4);
*
* </code>
* <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) positions the cursor on the last row,
* <code>absolute(-2) moves it on the next-to-last row, and so on.
* If the <code>CachedRowSetImpl object crs 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>
*
* crs.absolute(-4);
*
* </code>
*
* 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 .
* <P>
* Note: Calling <code>absolute(1) is the same as calling the
* method <code>first(). Calling absolute(-1) is the
* same as calling <code>last(). Calling relative(0)
* is valid, but it does not change the cursor position.
*
* @param rows an <code>int 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 if the cursor is on a row in this
* <code>CachedRowSetImpl object; false
* 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
*/
public boolean relative(int rows) throws SQLException {
if (numRows == 0 || isBeforeFirst() ||
isAfterLast() || getType() == ResultSet.TYPE_FORWARD_ONLY) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.relative").toString());
}
if (rows == 0) {
return true;
}
if (rows > 0) { // we are moving forward
if (cursorPos + rows > numRows) {
// fell off the end
afterLast();
} else {
for (int i=0; i < rows; i++) {
if (!internalNext())
break;
}
}
} else { // we are moving backward
if (cursorPos + rows < 0) {
// fell off the front
beforeFirst();
} else {
for (int i=rows; i < 0; i++) {
if (!internalPrevious())
break;
}
}
}
notifyCursorMoved();
if (isAfterLast() || isBeforeFirst()) {
return false;
} else {
return true;
}
}
/**
* Moves this <code>CachedRowSetImpl object's cursor to the
* previous row and returns <code>true if the cursor is on
* a valid row or <code>false if it is not.
* This method also notifies all listeners registered with this
* <code>CachedRowSetImpl object that its cursor has moved.
* <P>
* Note: calling the method <code>previous() is not the same
* as calling the method <code>relative(-1). This is true
* because it is possible to call <code>previous() from the insert
* row, from after the last row, or from the current row, whereas
* <code>relative may only be called from the current row.
* <P>
* The method <code>previous may used in a while
* loop to iterate through a rowset starting after the last row
* and moving toward the beginning. The loop ends when <code>previous
* returns <code>false, meaning that there are no more rows.
* For example, the following code fragment retrieves all the data in
* the <code>CachedRowSetImpl object crs , 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 places the cursor on the last line.
* <PRE>
*
* 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>
* This method throws an <code>SQLException if the cursor is not
* on a row in the rowset, before the first row, or after the last row.
*
* @return <code>true if the cursor is on a valid row;
* <code>false 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
*/
public boolean previous() throws SQLException {
if (getType() == ResultSet.TYPE_FORWARD_ONLY) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.last").toString());
}
/*
* make sure things look sane. The cursor must be
* positioned in the rowset or before first (0) or
* after last (numRows + 1)
*/
if (cursorPos < 0 || cursorPos > numRows + 1) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
}
// move and notify
boolean ret = this.internalPrevious();
notifyCursorMoved();
return ret;
}
/**
* Moves the cursor to the previous row in this <code>CachedRowSetImpl
* object, skipping past deleted rows that are not visible; returns
* <code>true if the cursor is on a row in this rowset and
* <code>false when the cursor goes before the first row.
* <P>
* This method is called internally by the method <code>previous.
* <P>
* This is a implementation only method and is not required as a standard
* implementation of the <code>CachedRowSet interface.
*
* @return <code>true if the cursor is on a row in this rowset;
* <code>false when the cursor reaches the position before
* the first row
* @throws SQLException if an error occurs
*/
protected boolean internalPrevious() throws SQLException {
boolean ret = false;
do {
if (cursorPos > 1) {
--cursorPos;
ret = true;
} else if (cursorPos == 1) {
// decrement to before first
--cursorPos;
ret = false;
break;
}
} while ((getShowDeleted() == false) && (rowDeleted() == true));
/*
* Each call to internalPrevious may move the cursor
* over multiple rows, the absolute position moves one one row
*/
if (ret == true)
--absolutePos;
else
absolutePos = 0;
return ret;
}
//---------------------------------------------------------------------
// Updates
//---------------------------------------------------------------------
/**
* Indicates whether the current row of this <code>CachedRowSetImpl
* object has been updated. The value returned
* depends on whether this rowset can detect updates: <code>false
* will always be returned if it does not detect updates.
*
* @return <code>true if the row has been visibly updated
* by the owner or another and updates are detected;
* <code>false otherwise
* @throws SQLException if the cursor is on the insert row or not
* not on a valid row
*
* @see DatabaseMetaData#updatesAreDetected
*/
public boolean rowUpdated() throws SQLException {
// make sure the cursor is on a valid row
checkCursor();
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
}
return(((Row)getCurrentRow()).getUpdated());
}
/**
* Indicates whether the designated column of the current row of
* this <code>CachedRowSetImpl object has been updated. The
* value returned depends on whether this rowset can detcted updates:
* <code>false will always be returned if it does not detect updates.
*
* @param idx the index identifier of the column that may be have been updated.
* @return <code>true is the designated column has been updated
* and the rowset detects updates; <code>false if the rowset has not
* been updated or the rowset does not detect updates
* @throws SQLException if the cursor is on the insert row or not
* on a valid row
* @see DatabaseMetaData#updatesAreDetected
*/
public boolean columnUpdated(int idx) throws SQLException {
// make sure the cursor is on a valid row
checkCursor();
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
}
return (((Row)getCurrentRow()).getColUpdated(idx - 1));
}
/**
* Indicates whether the designated column of the current row of
* this <code>CachedRowSetImpl object has been updated. The
* value returned depends on whether this rowset can detcted updates:
* <code>false will always be returned if it does not detect updates.
*
* @param columnName the <code>String column name column that may be have
* been updated.
* @return <code>true is the designated column has been updated
* and the rowset detects updates; <code>false if the rowset has not
* been updated or the rowset does not detect updates
* @throws SQLException if the cursor is on the insert row or not
* on a valid row
* @see DatabaseMetaData#updatesAreDetected
*/
public boolean columnUpdated(String columnName) throws SQLException {
return columnUpdated(getColIdxByName(columnName));
}
/**
* 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 if a row has been inserted and inserts are detected;
* <code>false 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 {
// make sure the cursor is on a valid row
checkCursor();
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
}
return(((Row)getCurrentRow()).getInserted());
}
/**
* 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 if this rowset cannot detect
* deletions.
*
* @return <code>true if (1)the current row is blank, indicating that
* the row has been deleted, and (2)deletions are detected;
* <code>false otherwise
* @throws SQLException if the cursor is on a valid row in this rowset
* @see DatabaseMetaData#deletesAreDetected
*/
public boolean rowDeleted() throws SQLException {
// make sure the cursor is on a valid row
if (isAfterLast() == true ||
isBeforeFirst() == true ||
onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
}
return(((Row)getCurrentRow()).getDeleted());
}
/**
* Indicates whether the given SQL data type is a numberic type.
*
* @param type one of the constants from <code>java.sql.Types
* @return <code>true if the given type is NUMERIC ,'
* <code>DECIMAL, BIT , TINYINT ,
* <code>SMALLINT, INTEGER , BIGINT ,
* <code>REAL, DOUBLE , or FLOAT ;
* <code>false otherwise
*/
private boolean isNumeric(int type) {
switch (type) {
case java.sql.Types.NUMERIC:
case java.sql.Types.DECIMAL:
case java.sql.Types.BIT:
case java.sql.Types.TINYINT:
case java.sql.Types.SMALLINT:
case java.sql.Types.INTEGER:
case java.sql.Types.BIGINT:
case java.sql.Types.REAL:
case java.sql.Types.DOUBLE:
case java.sql.Types.FLOAT:
return true;
default:
return false;
}
}
/**
* Indicates whether the given SQL data type is a string type.
*
* @param type one of the constants from <code>java.sql.Types
* @return <code>true if the given type is CHAR ,'
* <code>VARCHAR, or LONGVARCHAR ;
* <code>false otherwise
*/
private boolean isString(int type) {
switch (type) {
case java.sql.Types.CHAR:
case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR:
return true;
default:
return false;
}
}
/**
* Indicates whether the given SQL data type is a binary type.
*
* @param type one of the constants from <code>java.sql.Types
* @return <code>true if the given type is BINARY ,'
* <code>VARBINARY, or LONGVARBINARY ;
* <code>false otherwise
*/
private boolean isBinary(int type) {
switch (type) {
case java.sql.Types.BINARY:
case java.sql.Types.VARBINARY:
case java.sql.Types.LONGVARBINARY:
return true;
default:
return false;
}
}
/**
* Indicates whether the given SQL data type is a temporal type.
* This method is called internally by the conversion methods
* <code>convertNumeric and convertTemporal .
*
* @param type one of the constants from <code>java.sql.Types
* @return <code>true if the given type is DATE ,
* <code>TIME, or TIMESTAMP ;
* <code>false otherwise
*/
private boolean isTemporal(int type) {
switch (type) {
case java.sql.Types.DATE:
case java.sql.Types.TIME:
case java.sql.Types.TIMESTAMP:
return true;
default:
return false;
}
}
/**
* Indicates whether the given SQL data type is a boolean type.
* This method is called internally by the conversion methods
* <code>convertNumeric and convertBoolean .
*
* @param type one of the constants from <code>java.sql.Types
* @return <code>true if the given type is BIT ,
* , or <code>BOOLEAN;
* <code>false otherwise
*/
private boolean isBoolean(int type) {
switch (type) {
case java.sql.Types.BIT:
case java.sql.Types.BOOLEAN:
return true;
default:
return false;
}
}
/**
* Converts the given <code>Object in the Java programming language
* to the standard mapping for the specified SQL target data type.
* The conversion must be to a string or numeric type, but there are no
* restrictions on the type to be converted. If the source type and target
* type are the same, the given object is simply returned.
*
* @param srcObj the <code>Object in the Java programming language
* that is to be converted to the target type
* @param srcType the data type that is the standard mapping in SQL of the
* object to be converted; must be one of the constants in
* <code>java.sql.Types
* @param trgType the SQL data type to which to convert the given object;
* must be one of the following constants in
* <code>java.sql.Types: NUMERIC ,
* <code>DECIMAL, BIT , TINYINT ,
* <code>SMALLINT, INTEGER , BIGINT ,
* <code>REAL, DOUBLE , FLOAT ,
* <code>VARCHAR, LONGVARCHAR , or CHAR
* @return an <code>Object value.that is
* the standard object mapping for the target SQL type
* @throws SQLException if the given target type is not one of the string or
* numeric types in <code>java.sql.Types
*/
private Object convertNumeric(Object srcObj, int srcType,
int trgType) throws SQLException {
if (srcType == trgType) {
return srcObj;
}
if (isNumeric(trgType) == false && isString(trgType) == false) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString() + trgType);
}
try {
switch (trgType) {
case java.sql.Types.BIT:
Integer i = Integer.valueOf(srcObj.toString().trim());
return i.equals(0) ?
Boolean.valueOf(false) :
Boolean.valueOf(true);
case java.sql.Types.TINYINT:
return Byte.valueOf(srcObj.toString().trim());
case java.sql.Types.SMALLINT:
return Short.valueOf(srcObj.toString().trim());
case java.sql.Types.INTEGER:
return Integer.valueOf(srcObj.toString().trim());
case java.sql.Types.BIGINT:
return Long.valueOf(srcObj.toString().trim());
case java.sql.Types.NUMERIC:
case java.sql.Types.DECIMAL:
return new BigDecimal(srcObj.toString().trim());
case java.sql.Types.REAL:
case java.sql.Types.FLOAT:
return new Float(srcObj.toString().trim());
case java.sql.Types.DOUBLE:
return new Double(srcObj.toString().trim());
case java.sql.Types.CHAR:
case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR:
return srcObj.toString();
default:
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType);
}
} catch (NumberFormatException ex) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString() + trgType);
}
}
/**
* Converts the given <code>Object in the Java programming language
* to the standard object mapping for the specified SQL target data type.
* The conversion must be to a string or temporal type, and there are also
* restrictions on the type to be converted.
* <P>
* <TABLE ALIGN="CENTER" BORDER CELLPADDING=10 BORDERCOLOR="#0000FF"
* <CAPTION ALIGN="CENTER">Parameters and Return Values
* <TR>
* <TD>Source SQL Type
* <TD>Target SQL Type
* <TD>Object Returned
* </TR>
* <TR>
* <TD>TIMESTAMP
* <TD>DATE
* <TD>java.sql.Date
* </TR>
* <TR>
* <TD>TIMESTAMP
* <TD>TIME
* <TD>java.sql.Time
* </TR>
* <TR>
* <TD>TIME
* <TD>TIMESTAMP
* <TD>java.sql.Timestamp
* </TR>
* <TR>
* <TD>DATE , TIME , or TIMESTAMP
* <TD>CHAR , VARCHAR , or LONGVARCHAR
* <TD>java.lang.String
* </TR>
* </TABLE>
* <P>
* If the source type and target type are the same,
* the given object is simply returned.
*
* @param srcObj the <code>Object in the Java programming language
* that is to be converted to the target type
* @param srcType the data type that is the standard mapping in SQL of the
* object to be converted; must be one of the constants in
* <code>java.sql.Types
* @param trgType the SQL data type to which to convert the given object;
* must be one of the following constants in
* <code>java.sql.Types: DATE ,
* <code>TIME, TIMESTAMP , CHAR ,
* <code>VARCHAR, or LONGVARCHAR
* @return an <code>Object value.that is
* the standard object mapping for the target SQL type
* @throws SQLException if the given target type is not one of the string or
* temporal types in <code>java.sql.Types
*/
private Object convertTemporal(Object srcObj,
int srcType, int trgType) throws SQLException {
if (srcType == trgType) {
return srcObj;
}
if (isNumeric(trgType) == true ||
(isString(trgType) == false && isTemporal(trgType) == false)) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
try {
switch (trgType) {
case java.sql.Types.DATE:
if (srcType == java.sql.Types.TIMESTAMP) {
return new java.sql.Date(((java.sql.Timestamp)srcObj).getTime());
} else {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
case java.sql.Types.TIMESTAMP:
if (srcType == java.sql.Types.TIME) {
return new Timestamp(((java.sql.Time)srcObj).getTime());
} else {
return new Timestamp(((java.sql.Date)srcObj).getTime());
}
case java.sql.Types.TIME:
if (srcType == java.sql.Types.TIMESTAMP) {
return new Time(((java.sql.Timestamp)srcObj).getTime());
} else {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
case java.sql.Types.CHAR:
case java.sql.Types.VARCHAR:
case java.sql.Types.LONGVARCHAR:
return srcObj.toString();
default:
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
} catch (NumberFormatException ex) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
}
/**
* Converts the given <code>Object in the Java programming language
* to the standard mapping for the specified SQL target data type.
* The conversion must be to a string or numeric type, but there are no
* restrictions on the type to be converted. If the source type and target
* type are the same, the given object is simply returned.
*
* @param srcObj the <code>Object in the Java programming language
* that is to be converted to the target type
* @param srcType the data type that is the standard mapping in SQL of the
* object to be converted; must be one of the constants in
* <code>java.sql.Types
* @param trgType the SQL data type to which to convert the given object;
* must be one of the following constants in
* <code>java.sql.Types: BIT ,
* or <code>BOOLEAN
* @return an <code>Object value.that is
* the standard object mapping for the target SQL type
* @throws SQLException if the given target type is not one of the Boolean
* types in <code>java.sql.Types
*/
private Object convertBoolean(Object srcObj, int srcType,
int trgType) throws SQLException {
if (srcType == trgType) {
return srcObj;
}
if (isNumeric(trgType) == true ||
(isString(trgType) == false && isBoolean(trgType) == false)) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
try {
switch (trgType) {
case java.sql.Types.BIT:
Integer i = Integer.valueOf(srcObj.toString().trim());
return i.equals(0) ?
Boolean.valueOf(false) :
Boolean.valueOf(true);
case java.sql.Types.BOOLEAN:
return Boolean.valueOf(srcObj.toString().trim());
default:
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString()+ trgType);
}
} catch (NumberFormatException ex) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString() + trgType);
}
}
/**
* Sets the designated nullable column in the current row or the
* insert row of this <code>CachedRowSetImpl object with
* <code>null 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 {@link #acceptChanges}
* after it calls either <code>updateRow or insertRow .
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 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
*/
public void updateNull(int columnIndex) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
BaseRow row = getCurrentRow();
row.setColumnObject(columnIndex, null);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>boolean 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateBoolean(int columnIndex, boolean x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertBoolean(Boolean.valueOf(x),
java.sql.Types.BIT,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>byte 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateByte(int columnIndex, byte x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(Byte.valueOf(x),
java.sql.Types.TINYINT,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>short 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateShort(int columnIndex, short x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(Short.valueOf(x),
java.sql.Types.SMALLINT,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>int 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateInt(int columnIndex, int x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(x,
java.sql.Types.INTEGER,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>long 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateLong(int columnIndex, long x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(Long.valueOf(x),
java.sql.Types.BIGINT,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>float 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateFloat(int columnIndex, float x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(Float.valueOf(x),
java.sql.Types.REAL,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>double 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateDouble(int columnIndex, double x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(Double.valueOf(x),
java.sql.Types.DOUBLE,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.math.BigDecimal 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertNumeric(x,
java.sql.Types.NUMERIC,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>String 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 must be called if the
* updated values are to be written back to the underlying database.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 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
*/
public void updateString(int columnIndex, String x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
getCurrentRow().setColumnObject(columnIndex, x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>byte 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateBytes(int columnIndex, byte x[]) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
getCurrentRow().setColumnObject(columnIndex, x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Date 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, the second
* is <code>2, and so on; must be 1 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 or TIMESTAMP , or
* (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY
*/
public void updateDate(int columnIndex, java.sql.Date x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertTemporal(x,
java.sql.Types.DATE,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Time 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, the second
* is <code>2, and so on; must be 1 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 or TIMESTAMP , or
* (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY
*/
public void updateTime(int columnIndex, java.sql.Time x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertTemporal(x,
java.sql.Types.TIME,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Timestamp 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, the second
* is <code>2, and so on; must be 1 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, TIME , or
* <code>TIMESTAMP, or (4) this rowset is
* <code>ResultSet.CONCUR_READ_ONLY
*/
public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
Object obj = convertTemporal(x,
java.sql.Types.TIMESTAMP,
RowSetMD.getColumnType(columnIndex));
getCurrentRow().setColumnObject(columnIndex, obj);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl 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, the second
* is <code>2, and so on; must be 1 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 SQLException if this method is invoked
*/
public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException {
// sanity Check
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (isString(RowSetMD.getColumnType(columnIndex)) == false &&
isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
byte buf[] = new byte[length];
try {
int charsRead = 0;
do {
charsRead += x.read(buf, charsRead, length - charsRead);
} while (charsRead != length);
//Changed the condition check to check for length instead of -1
} catch (java.io.IOException ex) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.asciistream").toString());
}
String str = new String(buf);
getCurrentRow().setColumnObject(columnIndex, str);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.io.InputStream 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, the second
* is <code>2, and so on; must be 1 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
* containing <code>BINARY, VARBINARY , or
* <code>LONGVARBINARY 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
*/
public void updateBinaryStream(int columnIndex, java.io.InputStream x,int length) throws SQLException {
// sanity Check
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
byte buf[] = new byte[length];
try {
int bytesRead = 0;
do {
bytesRead += x.read(buf, bytesRead, length - bytesRead);
} while (bytesRead != -1);
} catch (java.io.IOException ex) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.binstream").toString());
}
getCurrentRow().setColumnObject(columnIndex, buf);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.io.Reader 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, the second
* is <code>2, and so on; must be 1 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
* containing <code>BINARY, VARBINARY ,
* <code>LONGVARBINARY, CHAR , VARCHAR ,
* or <code>LONGVARCHAR 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
*/
public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException {
// sanity Check
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (isString(RowSetMD.getColumnType(columnIndex)) == false &&
isBinary(RowSetMD.getColumnType(columnIndex)) == false) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
char buf[] = new char[length];
try {
int charsRead = 0;
do {
charsRead += x.read(buf, charsRead, length - charsRead);
} while (charsRead != length);
//Changed the condition checking to check for length instead of -1
} catch (java.io.IOException ex) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.binstream").toString());
}
String str = new String(buf);
getCurrentRow().setColumnObject(columnIndex, str);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Object value. The scale 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 or NUMERIC 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, the second
* is <code>2, and so on; must be 1 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 and NUMERIC 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
*/
public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
int type = RowSetMD.getColumnType(columnIndex);
if (type == Types.DECIMAL || type == Types.NUMERIC) {
((java.math.BigDecimal)x).setScale(scale);
}
getCurrentRow().setColumnObject(columnIndex, x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Object 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, the second
* is <code>2, and so on; must be 1 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
*/
public void updateObject(int columnIndex, Object x) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
getCurrentRow().setColumnObject(columnIndex, x);
}
/**
* Sets the designated nullable column in the current row or the
* insert row of this <code>CachedRowSetImpl object with
* <code>null 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 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
*/
public void updateNull(String columnName) throws SQLException {
updateNull(getColIdxByName(columnName));
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>boolean 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 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
*/
public void updateBoolean(String columnName, boolean x) throws SQLException {
updateBoolean(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>byte 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 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
*/
public void updateByte(String columnName, byte x) throws SQLException {
updateByte(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>short 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 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
*/
public void updateShort(String columnName, short x) throws SQLException {
updateShort(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>int 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 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
*/
public void updateInt(String columnName, int x) throws SQLException {
updateInt(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>long 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 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
*/
public void updateLong(String columnName, long x) throws SQLException {
updateLong(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>float 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 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
*/
public void updateFloat(String columnName, float x) throws SQLException {
updateFloat(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>double 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 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
*/
public void updateDouble(String columnName, double x) throws SQLException {
updateDouble(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.math.BigDecimal 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 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
*/
public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
updateBigDecimal(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>String 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 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
*/
public void updateString(String columnName, String x) throws SQLException {
updateString(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>byte 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 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
*/
public void updateBytes(String columnName, byte x[]) throws SQLException {
updateBytes(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Date 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 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 or
* <code>TIMESTAMP, or (4) this rowset is
* <code>ResultSet.CONCUR_READ_ONLY
*/
public void updateDate(String columnName, java.sql.Date x) throws SQLException {
updateDate(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Time 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 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 or
* <code>TIMESTAMP, or (4) this rowset is
* <code>ResultSet.CONCUR_READ_ONLY
*/
public void updateTime(String columnName, java.sql.Time x) throws SQLException {
updateTime(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Timestamp 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 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>TIME, or TIMESTAMP , or (4) this
* rowset is <code>ResultSet.CONCUR_READ_ONLY
*/
public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException {
updateTimestamp(getColIdxByName(columnName), x);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl 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 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
*/
public void updateAsciiStream(String columnName,
java.io.InputStream x,
int length) throws SQLException {
updateAsciiStream(getColIdxByName(columnName), x, length);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.io.InputStream 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 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
* containing <code>BINARY, VARBINARY , or
* <code>LONGVARBINARY 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
*/
public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException {
updateBinaryStream(getColIdxByName(columnName), x, length);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.io.Reader 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 object that must match the
* SQL name of a column in this rowset, ignoring case
* @param reader the new column value; must be a
* <code>java.io.Reader containing BINARY ,
* <code>VARBINARY, LONGVARBINARY , CHAR ,
* <code>VARCHAR, or LONGVARCHAR 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
*/
public void updateCharacterStream(String columnName,
java.io.Reader reader,
int length) throws SQLException {
updateCharacterStream(getColIdxByName(columnName), reader, length);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Object value. The scale 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 or NUMERIC 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 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 and NUMERIC types only)
* @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
*/
public void updateObject(String columnName, Object x, int scale) throws SQLException {
updateObject(getColIdxByName(columnName), x, scale);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Object 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 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
*/
public void updateObject(String columnName, Object x) throws SQLException {
updateObject(getColIdxByName(columnName), x);
}
/**
* Inserts the contents of this <code>CachedRowSetImpl 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
*/
public void insertRow() throws SQLException {
int pos;
if (onInsertRow == false ||
insertRow.isCompleteRow(RowSetMD) == false) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.failedins").toString());
}
// Added the setting of parameters that are passed
// to setXXX methods after an empty CRS Object is
// created through RowSetMetaData object
Object [] toInsert = getParams();
for(int i = 0;i < toInsert.length; i++) {
insertRow.setColumnObject(i+1,toInsert[i]);
}
Row insRow = new Row(RowSetMD.getColumnCount(),
insertRow.getOrigRow());
insRow.setInserted();
/*
* The new row is inserted into the RowSet
* immediately following the current row.
*
* If we are afterlast then the rows are
* inserted at the end.
*/
if (currentRow >= numRows || currentRow < 0) {
pos = numRows;
} else {
pos = currentRow;
}
rvh.add(pos, insRow);
++numRows;
// notify the listeners that the row changed.
notifyRowChanged();
}
/**
* Marks the current row of this <code>CachedRowSetImpl 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
*/
public void updateRow() throws SQLException {
// make sure we aren't on the insert row
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.updateins").toString());
}
((Row)getCurrentRow()).setUpdated();
// notify the listeners that the row changed.
notifyRowChanged();
}
/**
* Deletes the current row from this <code>CachedRowSetImpl 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 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
*/
public void deleteRow() throws SQLException {
// make sure the cursor is on a valid row
checkCursor();
((Row)getCurrentRow()).setDeleted();
++numDeleted;
// notify the listeners that the row changed.
notifyRowChanged();
}
/**
* 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 or deleteRow .
* 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 {
// make sure we are on a row
checkCursor();
// don't want this to happen...
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
}
Row currentRow = (Row)getCurrentRow();
// just undo any changes made to this row.
currentRow.clearUpdated();
}
/**
* Rolls back any updates made to the current row of this
* <code>CachedRowSetImpl object and notifies listeners that
* a row has changed. To have an effect, this method
* must be called after an <code>updateXXX method has been
* called and before the method <code>updateRow has been called.
* If no updates have been made or the method <code>updateRow
* has already been called, this method has no effect.
*
* @throws SQLException if the cursor is on the insert row, before the
* first row, or after the last row
*/
public void cancelRowUpdates() throws SQLException {
// make sure we are on a row
checkCursor();
// don't want this to happen...
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcp").toString());
}
Row currentRow = (Row)getCurrentRow();
if (currentRow.getUpdated() == true) {
currentRow.clearUpdated();
notifyRowChanged();
}
}
/**
* Moves the cursor for this <code>CachedRowSetImpl 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
* 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 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
* and <code>insertRow methods, only the getXXX methods
* may be called when the cursor is on the insert row. A <code>getXXX
* method should be called on a column only after an <code>updateXXX
* method has been called on that column; otherwise, the value returned is
* undetermined.
*
* @throws SQLException if this <code>CachedRowSetImpl object is
* <code>ResultSet.CONCUR_READ_ONLY
*/
public void moveToInsertRow() throws SQLException {
if (getConcurrency() == ResultSet.CONCUR_READ_ONLY) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.movetoins").toString());
}
if (insertRow == null) {
if (RowSetMD == null)
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.movetoins1").toString());
int numCols = RowSetMD.getColumnCount();
if (numCols > 0) {
insertRow = new InsertRow(numCols);
} else {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.movetoins2").toString());
}
}
onInsertRow = true;
// %%% setCurrentRow called in BaseRow
currentRow = cursorPos;
cursorPos = -1;
insertRow.initInsertRow();
}
/**
* Moves the cursor for this <code>CachedRowSetImpl object to
* the current row. The current row is the row the cursor was on
* when the method <code>moveToInsertRow 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 {
if (onInsertRow == false) {
return;
} else {
cursorPos = currentRow;
onInsertRow = false;
}
}
/**
* Returns <code>null.
*
* @return <code>null
* @throws SQLException if an error occurs
*/
public Statement getStatement() throws SQLException {
return null;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as an Object in
* the Java programming language, using the given
* <code>java.util.Map object to custom map the value if
* appropriate.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @param map a <code>java.util.Map object showing the mapping
* from SQL type names to classes in the Java programming
* language
* @return an <code>Object 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(int columnIndex,
java.util.Map<String,Class>> map)
throws SQLException
{
Object value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
setLastValueNull(false);
value = getCurrentRow().getColumnObject(columnIndex);
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
if (value instanceof Struct) {
Struct s = (Struct)value;
// look up the class in the map
Class<?> c = map.get(s.getSQLTypeName());
if (c != null) {
// create new instance of the class
SQLData obj = null;
try {
obj = (SQLData)c.newInstance();
} catch (java.lang.InstantiationException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
ex.getMessage()));
} catch (java.lang.IllegalAccessException ex) {
throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(),
ex.getMessage()));
}
// get the attributes from the struct
Object attribs[] = s.getAttributes(map);
// create the SQLInput "stream"
SQLInputImpl sqlInput = new SQLInputImpl(attribs, map);
// read the values...
obj.readSQL(sqlInput, s.getSQLTypeName());
return (Object)obj;
}
}
return value;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a Ref object
* in the Java programming language.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @return a <code>Ref object representing an SQL REF 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 value
* @see #getRef(String)
*/
public Ref getRef(int columnIndex) throws SQLException {
Ref value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.REF) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
setLastValueNull(false);
value = (Ref)(getCurrentRow().getColumnObject(columnIndex));
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
return value;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a Blob object
* in the Java programming language.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @return a <code>Blob object representing an SQL BLOB 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 value
* @see #getBlob(String)
*/
public Blob getBlob(int columnIndex) throws SQLException {
Blob value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.BLOB) {
System.out.println(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.type").toString(), RowSetMD.getColumnType(columnIndex)));
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
setLastValueNull(false);
value = (Blob)(getCurrentRow().getColumnObject(columnIndex));
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
return value;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a Clob object
* in the Java programming language.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @return a <code>Clob object representing an SQL CLOB 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 value
* @see #getClob(String)
*/
public Clob getClob(int columnIndex) throws SQLException {
Clob value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.CLOB) {
System.out.println(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.type").toString(), RowSetMD.getColumnType(columnIndex)));
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
setLastValueNull(false);
value = (Clob)(getCurrentRow().getColumnObject(columnIndex));
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
return value;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as an Array object
* in the Java programming language.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @return an <code>Array object representing an SQL
* <code>ARRAY 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 value
* @see #getArray(String)
*/
public Array getArray(int columnIndex) throws SQLException {
java.sql.Array value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.ARRAY) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
setLastValueNull(false);
value = (java.sql.Array)(getCurrentRow().getColumnObject(columnIndex));
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
return value;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as an Object in
* the Java programming language, using the given
* <code>java.util.Map object to custom map the value if
* appropriate.
*
* @param columnName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @param map a <code>java.util.Map object showing the mapping
* from SQL type names to classes in the Java programming
* language
* @return an <code>Object representing the SQL value
* @throws SQLException if the given column name is not the name of
* a column in this rowset 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 getObject(getColIdxByName(columnName), map);
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a Ref object
* in the Java programming language.
*
* @param colName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @return a <code>Ref object representing an SQL REF 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 value
* @see #getRef(int)
*/
public Ref getRef(String colName) throws SQLException {
return getRef(getColIdxByName(colName));
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a Blob object
* in the Java programming language.
*
* @param colName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @return a <code>Blob object representing an SQL BLOB 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 value
* @see #getBlob(int)
*/
public Blob getBlob(String colName) throws SQLException {
return getBlob(getColIdxByName(colName));
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a Clob object
* in the Java programming language.
*
* @param colName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @return a <code>Clob object representing an SQL
* <code>CLOB 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 value
* @see #getClob(int)
*/
public Clob getClob(String colName) throws SQLException {
return getClob(getColIdxByName(colName));
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as an Array object
* in the Java programming langugage.
*
* @param colName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @return an <code>Array object representing an SQL
* <code>ARRAY 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 value
* @see #getArray(int)
*/
public Array getArray(String colName) throws SQLException {
return getArray(getColIdxByName(colName));
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>CachedRowSetImpl object as a java.sql.Date
* object, using the given <code>Calendar object to construct an
* appropriate millisecond value for the date.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in the rowset
* @param cal the <code>java.util.Calendar object to use in
* constructing the date
* @return the column value; if the value is SQL <code>NULL,
* the result is <code>null
* @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 or
* <code>TIMESTAMP value
*/
public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException {
Object value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
setLastValueNull(false);
value = getCurrentRow().getColumnObject(columnIndex);
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
value = convertTemporal(value,
RowSetMD.getColumnType(columnIndex),
java.sql.Types.DATE);
// create a default calendar
Calendar defaultCal = Calendar.getInstance();
// set this Calendar to the time we have
defaultCal.setTime((java.util.Date)value);
/*
* Now we can pull the pieces of the date out
* of the default calendar and put them into
* the user provided calendar
*/
cal.set(Calendar.YEAR, defaultCal.get(Calendar.YEAR));
cal.set(Calendar.MONTH, defaultCal.get(Calendar.MONTH));
cal.set(Calendar.DAY_OF_MONTH, defaultCal.get(Calendar.DAY_OF_MONTH));
/*
* This looks a little odd but it is correct -
* Calendar.getTime() returns a Date...
*/
return new java.sql.Date(cal.getTime().getTime());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>CachedRowSetImpl object as a java.sql.Date
* object, using the given <code>Calendar object to construct an
* appropriate millisecond value for the date.
*
* @param columnName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @param cal the <code>java.util.Calendar object to use in
* constructing the date
* @return the column value; if the value is SQL <code>NULL,
* the result is <code>null
* @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 or
* <code>TIMESTAMP value
*/
public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException {
return getDate(getColIdxByName(columnName), cal);
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>CachedRowSetImpl object as a java.sql.Time
* object, using the given <code>Calendar object to construct an
* appropriate millisecond value for the date.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in the rowset
* @param cal the <code>java.util.Calendar object to use in
* constructing the date
* @return the column value; if the value is SQL <code>NULL,
* the result is <code>null
* @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 or
* <code>TIMESTAMP value
*/
public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException {
Object value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
setLastValueNull(false);
value = getCurrentRow().getColumnObject(columnIndex);
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
value = convertTemporal(value,
RowSetMD.getColumnType(columnIndex),
java.sql.Types.TIME);
// create a default calendar
Calendar defaultCal = Calendar.getInstance();
// set the time in the default calendar
defaultCal.setTime((java.util.Date)value);
/*
* Now we can pull the pieces of the date out
* of the default calendar and put them into
* the user provided calendar
*/
cal.set(Calendar.HOUR_OF_DAY, defaultCal.get(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, defaultCal.get(Calendar.MINUTE));
cal.set(Calendar.SECOND, defaultCal.get(Calendar.SECOND));
return new java.sql.Time(cal.getTime().getTime());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>CachedRowSetImpl object as a java.sql.Time
* object, using the given <code>Calendar object to construct an
* appropriate millisecond value for the date.
*
* @param columnName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @param cal the <code>java.util.Calendar object to use in
* constructing the date
* @return the column value; if the value is SQL <code>NULL,
* the result is <code>null
* @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 or
* <code>TIMESTAMP value
*/
public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException {
return getTime(getColIdxByName(columnName), cal);
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>CachedRowSetImpl object as a java.sql.Timestamp
* object, using the given <code>Calendar object to construct an
* appropriate millisecond value for the date.
*
* @param columnIndex the first column is <code>1, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in the rowset
* @param cal the <code>java.util.Calendar object to use in
* constructing the date
* @return the column value; if the value is SQL <code>NULL,
* the result is <code>null
* @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 or
* <code>TIMESTAMP value
*/
public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
Object value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
setLastValueNull(false);
value = getCurrentRow().getColumnObject(columnIndex);
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
value = convertTemporal(value,
RowSetMD.getColumnType(columnIndex),
java.sql.Types.TIMESTAMP);
// create a default calendar
Calendar defaultCal = Calendar.getInstance();
// set the time in the default calendar
defaultCal.setTime((java.util.Date)value);
/*
* Now we can pull the pieces of the date out
* of the default calendar and put them into
* the user provided calendar
*/
cal.set(Calendar.YEAR, defaultCal.get(Calendar.YEAR));
cal.set(Calendar.MONTH, defaultCal.get(Calendar.MONTH));
cal.set(Calendar.DAY_OF_MONTH, defaultCal.get(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, defaultCal.get(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, defaultCal.get(Calendar.MINUTE));
cal.set(Calendar.SECOND, defaultCal.get(Calendar.SECOND));
return new java.sql.Timestamp(cal.getTime().getTime());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>CachedRowSetImpl object as a
* <code>java.sql.Timestamp object, using the given
* <code>Calendar object to construct an appropriate
* millisecond value for the date.
*
* @param columnName a <code>String object that must match the
* SQL name of a column in this rowset, ignoring case
* @param cal the <code>java.util.Calendar object to use in
* constructing the date
* @return the column value; if the value is SQL <code>NULL,
* the result is <code>null
* @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>TIME, or TIMESTAMP value
*/
public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
return getTimestamp(getColIdxByName(columnName), cal);
}
/*
* RowSetInternal Interface
*/
/**
* Retrieves the <code>Connection object passed to this
* <code>CachedRowSetImpl object. This connection may be
* used to populate this rowset with data or to write data back
* to its underlying data source.
*
* @return the <code>Connection object passed to this rowset;
* may be <code>null if there is no connection
* @throws SQLException if an error occurs
*/
public Connection getConnection() throws SQLException{
return conn;
}
/**
* Sets the metadata for this <code>CachedRowSetImpl object
* with the given <code>RowSetMetaData object.
*
* @param md a <code>RowSetMetaData 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 {
RowSetMD =(RowSetMetaDataImpl) md;
}
/**
* Returns a result set containing the original value of the rowset. The
* original value is the state of the <code>CachedRowSetImpl after the
* last population or synchronization (whichever occurred most recently) with
* the data source.
* <p>
* The cursor is positioned before the first row in the result set.
* Only rows contained in the result set returned by <code>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 object
*/
public ResultSet getOriginal() throws SQLException {
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.RowSetMD = RowSetMD;
crs.numRows = numRows;
crs.cursorPos = 0;
// make sure we don't get someone playing with these
// %%% is this now necessary ???
//crs.setReader(null);
//crs.setWriter(null);
int colCount = RowSetMD.getColumnCount();
Row orig;
for (Iterator<?> i = rvh.iterator(); i.hasNext();) {
orig = new Row(colCount, ((Row)i.next()).getOrigRow());
crs.rvh.add(orig);
}
return (ResultSet)crs;
}
/**
* Returns a result set containing the original value of the current
* row only.
* The original value is the state of the <code>CachedRowSetImpl after
* the last population or synchronization (whichever occurred most recently)
* with the data source.
*
* @return the original result set of the row
* @throws SQLException if there is no current row
* @see #setOriginalRow
*/
public ResultSet getOriginalRow() throws SQLException {
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.RowSetMD = RowSetMD;
crs.numRows = 1;
crs.cursorPos = 0;
crs.setTypeMap(this.getTypeMap());
// make sure we don't get someone playing with these
// %%% is this now necessary ???
//crs.setReader(null);
//crs.setWriter(null);
Row orig = new Row(RowSetMD.getColumnCount(),
getCurrentRow().getOrigRow());
crs.rvh.add(orig);
return (ResultSet)crs;
}
/**
* Marks the current row in this rowset as being an original row.
*
* @throws SQLException if there is no current row
* @see #getOriginalRow
*/
public void setOriginalRow() throws SQLException {
if (onInsertRow == true) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
}
Row row = (Row)getCurrentRow();
makeRowOriginal(row);
// this can happen if deleted rows are being shown
if (row.getDeleted() == true) {
removeCurrentRow();
}
}
/**
* Makes the given row of this rowset the original row by clearing any
* settings that mark the row as having been inserted, deleted, or updated.
* This method is called internally by the methods
* <code>setOriginalRow
* and <code>setOriginal.
*
* @param row the row to be made the original row
*/
private void makeRowOriginal(Row row) {
if (row.getInserted() == true) {
row.clearInserted();
}
if (row.getUpdated() == true) {
row.moveCurrentToOrig();
}
}
/**
* Marks all rows in this rowset as being original rows. Any updates
* made to the rows become the original values for the rowset.
* Calls to the method <code>setOriginal connot be reversed.
*
* @throws SQLException if an error occurs
*/
public void setOriginal() throws SQLException {
for (Iterator<?> i = rvh.iterator(); i.hasNext();) {
Row row = (Row)i.next();
makeRowOriginal(row);
// remove deleted rows from the collection.
if (row.getDeleted() == true) {
i.remove();
--numRows;
}
}
numDeleted = 0;
// notify any listeners that the rowset has changed
notifyRowSetChanged();
}
/**
* Returns an identifier for the object (table) that was used to create this
* rowset.
*
* @return a <code>String object that identifies the table from
* which this <code>CachedRowSetImpl object was derived
* @throws SQLException if an error occurs
*/
public String getTableName() throws SQLException {
return tableName;
}
/**
* Sets the identifier for the table from which this rowset was derived
* to the given table name.
*
* @param tabName a <code>String object that identifies the
* table from which this <code>CachedRowSetImpl object
* was derived
* @throws SQLException if an error occurs
*/
public void setTableName(String tabName) throws SQLException {
if (tabName == null)
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.tablename").toString());
else
tableName = tabName;
}
/**
* Returns the columns that make a key to uniquely identify a
* row in this <code>CachedRowSetImpl object.
*
* @return an array of column numbers that constitutes a primary
* key for this rowset. This array should be empty
* if no column 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 {
int[]keyColumns = this.keyCols;
return (keyColumns == null) ? null : Arrays.copyOf(keyColumns, keyColumns.length);
}
/**
* Sets this <code>CachedRowSetImpl object's
* <code>keyCols field with the given array of column
* numbers, which forms a key for uniquely identifying a row
* in this rowset.
*
* @param keys an array of <code>int indicating the
* columns that form a primary key for this
* <code>CachedRowSetImpl object; every
* element in the array must be greater than
* <code>0 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 [] keys) throws SQLException {
int numCols = 0;
if (RowSetMD != null) {
numCols = RowSetMD.getColumnCount();
if (keys.length > numCols)
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.keycols").toString());
}
keyCols = new int[keys.length];
for (int i = 0; i < keys.length; i++) {
if (RowSetMD != null && (keys[i] <= 0 ||
keys[i] > numCols)) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidcol").toString() +
keys[i]);
}
keyCols[i] = keys[i];
}
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>Ref 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, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @param ref the new column <code>java.sql.Ref 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
*/
public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
// SerialClob will help in getting the byte array and storing it.
// We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
// or through RowSetMetaData.locatorsUpdatorCopy()
getCurrentRow().setColumnObject(columnIndex, new SerialRef(ref));
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>double 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 object that must match the
* SQL name of a column in this rowset, ignoring case
* @param ref the new column <code>java.sql.Ref 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
*/
public void updateRef(String columnName, java.sql.Ref ref) throws SQLException {
updateRef(getColIdxByName(columnName), ref);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>double 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, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @param c the new column <code>Clob 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
*/
public void updateClob(int columnIndex, Clob c) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
// SerialClob will help in getting the byte array and storing it.
// We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
// or through RowSetMetaData.locatorsUpdatorCopy()
if(dbmslocatorsUpdateCopy){
getCurrentRow().setColumnObject(columnIndex, new SerialClob(c));
}
else{
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.opnotsupp").toString());
}
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>double 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 object that must match the
* SQL name of a column in this rowset, ignoring case
* @param c the new column <code>Clob 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
*/
public void updateClob(String columnName, Clob c) throws SQLException {
updateClob(getColIdxByName(columnName), c);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.sql.Blob 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, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @param b the new column <code>Blob 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
*/
public void updateBlob(int columnIndex, Blob b) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
// SerialBlob will help in getting the byte array and storing it.
// We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
// or through RowSetMetaData.locatorsUpdatorCopy()
if(dbmslocatorsUpdateCopy){
getCurrentRow().setColumnObject(columnIndex, new SerialBlob(b));
}
else{
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.opnotsupp").toString());
}
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.sql.Blob 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 object that must match the
* SQL name of a column in this rowset, ignoring case
* @param b the new column <code>Blob 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
*/
public void updateBlob(String columnName, Blob b) throws SQLException {
updateBlob(getColIdxByName(columnName), b);
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.sql.Array values.
*
* 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, the second
* is <code>2, and so on; must be 1 or larger
* and equal to or less than the number of columns in this rowset
* @param a the new column <code>Array 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
*/
public void updateArray(int columnIndex, Array a) throws SQLException {
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
// SerialArray will help in getting the byte array and storing it.
// We need to be checking DatabaseMetaData.locatorsUpdatorCopy()
// or through RowSetMetaData.locatorsUpdatorCopy()
getCurrentRow().setColumnObject(columnIndex, new SerialArray(a));
}
/**
* Sets the designated column in either the current row or the insert
* row of this <code>CachedRowSetImpl object with the given
* <code>java.sql.Array 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 object that must match the
* SQL name of a column in this rowset, ignoring case
* @param a the new column <code>Array 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
*/
public void updateArray(String columnName, Array a) throws SQLException {
updateArray(getColIdxByName(columnName), a);
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a java.net.URL object
* in the Java programming language.
*
* @return a java.net.URL object containing the resource reference described by
* the URL
* @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>DATALINK value.
* @see #getURL(String)
*/
public java.net.URL getURL(int columnIndex) throws SQLException {
//throw new SQLException("Operation not supported");
java.net.URL value;
// sanity check.
checkIndex(columnIndex);
// make sure the cursor is on a valid row
checkCursor();
if (RowSetMD.getColumnType(columnIndex) != java.sql.Types.DATALINK) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.dtypemismt").toString());
}
setLastValueNull(false);
value = (java.net.URL)(getCurrentRow().getColumnObject(columnIndex));
// check for SQL NULL
if (value == null) {
setLastValueNull(true);
return null;
}
return value;
}
/**
* Retrieves the value of the designated column in this
* <code>CachedRowSetImpl object as a java.net.URL object
* in the Java programming language.
*
* @return a java.net.URL object containing the resource reference described by
* the URL
* @throws SQLException if (1) the given column name not the name of a column
* in this rowset, or
* (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>DATALINK value.
* @see #getURL(int)
*/
public java.net.URL getURL(String columnName) throws SQLException {
return getURL(getColIdxByName(columnName));
}
/**
* The first warning reported by calls on this <code>CachedRowSetImpl
* object is returned. Subsequent <code>CachedRowSetImpl warnings will
* be chained to this <code>SQLWarning. All RowSetWarnings
* warnings are generated in the disconnected environment and remain a
* seperate warning chain to that provided by the <code>getWarnings
* method.
*
* <P>The warning chain is automatically cleared each time a new
* row is read.
*
* <P>Note: This warning chain only covers warnings caused
* by <code>CachedRowSet (and their child interface)
* methods. All <code>SQLWarnings can be obtained using the
* <code>getWarnings method which tracks warnings generated
* by the underlying JDBC driver.
* @return the first SQLWarning or null
*
*/
public RowSetWarning getRowSetWarnings() {
try {
notifyCursorMoved();
} catch (SQLException e) {} // mask exception
return rowsetWarning;
}
/**
* The function tries to isolate the tablename when only setCommand
* is set and not setTablename is called provided there is only one table
* name in the query else just leaves the setting of table name as such.
* If setTablename is set later it will over ride this table name
* value so retrieved.
*
* @return the tablename if only one table in query else return ""
*/
private String buildTableName(String command) throws SQLException {
// If we have a query from one table,
// we set the table name implicitly
// else user has to explicitly set the table name.
int indexFrom, indexComma;
String strTablename ="";
command = command.trim();
// Query can be a select, insert or update
if(command.toLowerCase().startsWith("select")) {
// look for "from" keyword, after that look for a
// comma after from. If comma is there don't set
// table name else isolate table name.
indexFrom = command.toLowerCase().indexOf("from");
indexComma = command.indexOf(",", indexFrom);
if(indexComma == -1) {
// implies only one table
strTablename = (command.substring(indexFrom+"from".length(),command.length())).trim();
String tabName = strTablename;
int idxWhere = tabName.toLowerCase().indexOf("where");
/**
* Adding the addtional check for conditions following the table name.
* If a condition is found truncate it.
**/
if(idxWhere != -1)
{
tabName = tabName.substring(0,idxWhere).trim();
}
strTablename = tabName;
} else {
//strTablename="";
}
} else if(command.toLowerCase().startsWith("insert")) {
//strTablename="";
} else if(command.toLowerCase().startsWith("update")) {
//strTablename="";
}
return strTablename;
}
/**
* Commits all changes performed by the <code>acceptChanges()
* methods
*
* @see java.sql.Connection#commit
*/
public void commit() throws SQLException {
conn.commit();
}
/**
* Rolls back all changes performed by the <code>acceptChanges()
* methods
*
* @see java.sql.Connection#rollback
*/
public void rollback() throws SQLException {
conn.rollback();
}
/**
* Rolls back all changes performed by the <code>acceptChanges()
* to the last <code>Savepoint transaction marker.
*
* @see java.sql.Connection#rollback(Savepoint)
*/
public void rollback(Savepoint s) throws SQLException {
conn.rollback(s);
}
/**
* Unsets the designated parameter to the given int array.
* This was set using <code>setMatchColumn
* as the column which will form the basis of the join.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnIdxes the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnIdx is
* not the same as set using <code>setMatchColumn(int [])
*/
public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
int i_val;
for( int j= 0 ;j < columnIdxes.length; j++) {
i_val = (Integer.parseInt(iMatchColumns.get(j).toString()));
if(columnIdxes[j] != i_val) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols").toString());
}
}
for( int i = 0;i < columnIdxes.length ;i++) {
iMatchColumns.set(i, -1);
}
}
/**
* Unsets the designated parameter to the given String array.
* This was set using <code>setMatchColumn
* as the column which will form the basis of the join.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnIdxes the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnName is
* not the same as set using <code>setMatchColumn(String [])
*/
public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
for(int j = 0 ;j < columnIdxes.length; j++) {
if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols").toString());
}
}
for(int i = 0 ; i < columnIdxes.length; i++) {
strMatchColumns.set(i,null);
}
}
/**
* Retrieves the column name as <code>String array
* that was set using <code>setMatchColumn(String [])
* for this rowset.
*
* @return a <code>String array object that contains the column names
* for the rowset which has this the match columns
*
* @throws SQLException if an error occurs or column name is not set
*/
public String[] getMatchColumnNames() throws SQLException {
String []str_temp = new String[strMatchColumns.size()];
if( strMatchColumns.get(0) == null) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.setmatchcols").toString());
}
strMatchColumns.copyInto(str_temp);
return str_temp;
}
/**
* Retrieves the column id as <code>int array that was set using
* <code>setMatchColumn(int []) for this rowset.
*
* @return a <code>int array object that contains the column ids
* for the rowset which has this as the match columns.
*
* @throws SQLException if an error occurs or column index is not set
*/
public int[] getMatchColumnIndexes() throws SQLException {
Integer []int_temp = new Integer[iMatchColumns.size()];
int [] i_temp = new int[iMatchColumns.size()];
int i_val;
i_val = iMatchColumns.get(0);
if( i_val == -1 ) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.setmatchcols").toString());
}
iMatchColumns.copyInto(int_temp);
for(int i = 0; i < int_temp.length; i++) {
i_temp[i] = (int_temp[i]).intValue();
}
return i_temp;
}
/**
* Sets the designated parameter to the given int array.
* This forms the basis of the join for the
* <code>JoinRowSet as the column which will form the basis of the
* join.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method <code>getMatchColumnIndexes is called.
*
* @param columnIdxes the indexes into this rowset
* object's internal representation of parameter values; the
* first parameter is 0, the second is 1, and so on; must be
* <code>0 or greater
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(int[] columnIdxes) throws SQLException {
for(int j = 0 ; j < columnIdxes.length; j++) {
if( columnIdxes[j] < 0 ) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols1").toString());
}
}
for(int i = 0 ;i < columnIdxes.length; i++) {
iMatchColumns.add(i,columnIdxes[i]);
}
}
/**
* Sets the designated parameter to the given String array.
* This forms the basis of the join for the
* <code>JoinRowSet as the column which will form the basis of the
* join.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method <code>getMatchColumn is called.
*
* @param columnNames the name of the column into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(String[] columnNames) throws SQLException {
for(int j = 0; j < columnNames.length; j++) {
if( columnNames[j] == null || columnNames[j].equals("")) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols2").toString());
}
}
for( int i = 0; i < columnNames.length; i++) {
strMatchColumns.add(i,columnNames[i]);
}
}
/**
* Sets the designated parameter to the given <code>int
* object. This forms the basis of the join for the
* <code>JoinRowSet as the column which will form the basis of the
* join.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method <code>getMatchColumn is called.
*
* @param columnIdx the index into this rowset
* object's internal representation of parameter values; the
* first parameter is 0, the second is 1, and so on; must be
* <code>0 or greater
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(int columnIdx) throws SQLException {
// validate, if col is ok to be set
if(columnIdx < 0) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols1").toString());
} else {
// set iMatchColumn
iMatchColumns.set(0, columnIdx);
//strMatchColumn = null;
}
}
/**
* Sets the designated parameter to the given <code>String
* object. This forms the basis of the join for the
* <code>JoinRowSet as the column which will form the basis of the
* join.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method <code>getMatchColumn is called.
*
* @param columnName the name of the column into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(String columnName) throws SQLException {
// validate, if col is ok to be set
if(columnName == null || (columnName= columnName.trim()).equals("") ) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.matchcols2").toString());
} else {
// set strMatchColumn
strMatchColumns.set(0, columnName);
//iMatchColumn = -1;
}
}
/**
* Unsets the designated parameter to the given <code>int
* object. This was set using <code>setMatchColumn
* as the column which will form the basis of the join.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnIdx the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnIdx is
* not the same as set using <code>setMatchColumn(int)
*/
public void unsetMatchColumn(int columnIdx) throws SQLException {
// check if we are unsetting the SAME column
if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) ) ) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch").toString());
} else if(strMatchColumns.get(0) != null) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch1").toString());
} else {
// that is, we are unsetting it.
iMatchColumns.set(0, -1);
}
}
/**
* Unsets the designated parameter to the given <code>String
* object. This was set using <code>setMatchColumn
* as the column which will form the basis of the join.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnName the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnName is
* not the same as set using <code>setMatchColumn(String)
*/
public void unsetMatchColumn(String columnName) throws SQLException {
// check if we are unsetting the same column
columnName = columnName.trim();
if(!((strMatchColumns.get(0)).equals(columnName))) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch").toString());
} else if(iMatchColumns.get(0) > 0) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.unsetmatch2").toString());
} else {
strMatchColumns.set(0, null); // that is, we are unsetting it.
}
}
/**
* Notifies registered listeners that a RowSet object in the given RowSetEvent
* object has populated a number of additional rows. The <code>numRows parameter
* ensures that this event will only be fired every <code>numRow.
* <p>
* The source of the event can be retrieved with the method event.getSource.
*
* @param event a <code>RowSetEvent object that contains the
* <code>RowSet object that is the source of the events
* @param numRows when populating, the number of rows interval on which the
* <code>CachedRowSet populated should fire; the default value
* is zero; cannot be less than <code>fetchSize or zero
*/
public void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException {
if( numRows < 0 || numRows < getFetchSize()) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.numrows").toString());
}
if(size() % numRows == 0) {
RowSetEvent event_temp = new RowSetEvent(this);
event = event_temp;
notifyRowSetChanged();
}
}
/**
* Populates this <code>CachedRowSet object with data from
* the given <code>ResultSet object. While related to the populate(ResultSet)
* method, an additional parameter is provided to allow starting position within
* the <code>ResultSet from where to populate the CachedRowSet
* instance.
*
* This method is an alternative to the method <code>execute
* for filling the rowset with data. The method <code>populate
* does not require that the properties needed by the method
* <code>execute, such as the command property,
* be set. This is true because the method <code>populate
* is given the <code>ResultSet object from
* which to get data and thus does not need to use the properties
* required for setting up a connection and executing this
* <code>CachedRowSetImpl object's command.
* <P>
* After populating this rowset with data, the method
* <code>populate sets the rowset's metadata and
* then sends a <code>RowSetChangedEvent object
* to all registered listeners prior to returning.
*
* @param data the <code>ResultSet object containing the data
* to be read into this <code>CachedRowSetImpl object
* @param start the integer specifing the position in the
* <code>ResultSet object to popultate the
* <code>CachedRowSetImpl object.
* @throws SQLException if an error occurs; or the max row setting is
* violated while populating the RowSet.Also id the start position
* is negative.
* @see #execute
*/
public void populate(ResultSet data, int start) throws SQLException{
int rowsFetched;
Row currentRow;
int numCols;
int i;
Map<String, Class>> map = getTypeMap();
Object obj;
int mRows;
cursorPos = 0;
if(populatecallcount == 0){
if(start < 0){
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.startpos").toString());
}
if(getMaxRows() == 0){
data.absolute(start);
while(data.next()){
totalRows++;
}
totalRows++;
}
startPos = start;
}
populatecallcount = populatecallcount +1;
resultSet = data;
if((endPos - startPos) >= getMaxRows() && (getMaxRows() > 0)){
endPos = prevEndPos;
pagenotend = false;
return;
}
if((maxRowsreached != getMaxRows() || maxRowsreached != totalRows) && pagenotend) {
startPrev = start - getPageSize();
}
if( pageSize == 0){
prevEndPos = endPos;
endPos = start + getMaxRows() ;
}
else{
prevEndPos = endPos;
endPos = start + getPageSize();
}
if (start == 1){
resultSet.beforeFirst();
}
else {
resultSet.absolute(start -1);
}
if( pageSize == 0) {
rvh = new Vector<Object>(getMaxRows());
}
else{
rvh = new Vector<Object>(getPageSize());
}
if (data == null) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.populate").toString());
}
// get the meta data for this ResultSet
RSMD = data.getMetaData();
// set up the metadata
RowSetMD = new RowSetMetaDataImpl();
initMetaData(RowSetMD, RSMD);
// release the meta-data so that aren't tempted to use it.
RSMD = null;
numCols = RowSetMD.getColumnCount();
mRows = this.getMaxRows();
rowsFetched = 0;
currentRow = null;
if(!data.next() && mRows == 0){
endPos = prevEndPos;
pagenotend = false;
return;
}
data.previous();
while ( data.next()) {
currentRow = new Row(numCols);
if(pageSize == 0){
if ( rowsFetched >= mRows && mRows > 0) {
rowsetWarning.setNextException(new SQLException("Populating rows "
+ "setting has exceeded max row setting"));
break;
}
}
else {
if ( (rowsFetched >= pageSize) ||( maxRowsreached >= mRows && mRows > 0)) {
rowsetWarning.setNextException(new SQLException("Populating rows "
+ "setting has exceeded max row setting"));
break;
}
}
for ( i = 1; i <= numCols; i++) {
/*
* check if the user has set a map. If no map
* is set then use plain getObject. This lets
* us work with drivers that do not support
* getObject with a map in fairly sensible way
*/
if (map == null) {
obj = data.getObject(i);
} else {
obj = data.getObject(i, map);
}
/*
* the following block checks for the various
* types that we have to serialize in order to
* store - right now only structs have been tested
*/
if (obj instanceof Struct) {
obj = new SerialStruct((Struct)obj, map);
} else if (obj instanceof SQLData) {
obj = new SerialStruct((SQLData)obj, map);
} else if (obj instanceof Blob) {
obj = new SerialBlob((Blob)obj);
} else if (obj instanceof Clob) {
obj = new SerialClob((Clob)obj);
} else if (obj instanceof java.sql.Array) {
obj = new SerialArray((java.sql.Array)obj, map);
}
currentRow.initColumnObject(i, obj);
}
rowsFetched++;
maxRowsreached++;
rvh.add(currentRow);
}
numRows = rowsFetched ;
// Also rowsFetched should be equal to rvh.size()
// notify any listeners that the rowset has changed
notifyRowSetChanged();
}
/**
* The nextPage gets the next page, that is a <code>CachedRowSetImpl object
* containing the number of rows specified by page size.
* @return boolean value true indicating whether there are more pages to come and
* false indicating that this is the last page.
* @throws SQLException if an error occurs or this called before calling populate.
*/
public boolean nextPage() throws SQLException {
if (populatecallcount == 0){
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.nextpage").toString());
}
// Fix for 6554186
onFirstPage = false;
if(callWithCon){
crsReader.setStartPosition(endPos);
crsReader.readData((RowSetInternal)this);
resultSet = null;
}
else {
populate(resultSet,endPos);
}
return pagenotend;
}
/**
* This is the setter function for setting the size of the page, which specifies
* how many rows have to be retrived at a time.
*
* @param size which is the page size
* @throws SQLException if size is less than zero or greater than max rows.
*/
public void setPageSize (int size) throws SQLException {
if (size < 0) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.pagesize").toString());
}
if (size > getMaxRows() && getMaxRows() != 0) {
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.pagesize1").toString());
}
pageSize = size;
}
/**
* This is the getter function for the size of the page.
*
* @return an integer that is the page size.
*/
public int getPageSize() {
return pageSize;
}
/**
* Retrieves the data present in the page prior to the page from where it is
* called.
* @return boolean value true if it retrieves the previous page, flase if it
* is on the first page.
* @throws SQLException if it is called before populate is called or ResultSet
* is of type <code>ResultSet.TYPE_FORWARD_ONLY or if an error
* occurs.
*/
public boolean previousPage() throws SQLException {
int pS;
int mR;
int rem;
pS = getPageSize();
mR = maxRowsreached;
if (populatecallcount == 0){
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.nextpage").toString());
}
if( !callWithCon){
if(resultSet.getType() == ResultSet.TYPE_FORWARD_ONLY){
throw new SQLException (resBundle.handleGetObject("cachedrowsetimpl.fwdonly").toString());
}
}
pagenotend = true;
if(startPrev < startPos ){
onFirstPage = true;
return false;
}
if(onFirstPage){
return false;
}
rem = mR % pS;
if(rem == 0){
maxRowsreached -= (2 * pS);
if(callWithCon){
crsReader.setStartPosition(startPrev);
crsReader.readData((RowSetInternal)this);
resultSet = null;
}
else {
populate(resultSet,startPrev);
}
return true;
}
else
{
maxRowsreached -= (pS + rem);
if(callWithCon){
crsReader.setStartPosition(startPrev);
crsReader.readData((RowSetInternal)this);
resultSet = null;
}
else {
populate(resultSet,startPrev);
}
return true;
}
}
/**
* Goes to the page number passed as the parameter
* @param page , the page loaded on a call to this function
* @return true if the page exists false otherwise
* @throws SQLException if an error occurs
*/
/*
public boolean absolutePage(int page) throws SQLException{
boolean isAbs = true, retVal = true;
int counter;
if( page <= 0 ){
throw new SQLException("Absolute positoin is invalid");
}
counter = 0;
firstPage();
counter++;
while((counter < page) && isAbs) {
isAbs = nextPage();
counter ++;
}
if( !isAbs && counter < page){
retVal = false;
}
else if(counter == page){
retVal = true;
}
return retVal;
}
*/
/**
* Goes to the page number passed as the parameter from the current page.
* The parameter can take postive or negative value accordingly.
* @param page , the page loaded on a call to this function
* @return true if the page exists false otherwise
* @throws SQLException if an error occurs
*/
/*
public boolean relativePage(int page) throws SQLException {
boolean isRel = true,retVal = true;
int counter;
if(page > 0){
counter = 0;
while((counter < page) && isRel){
isRel = nextPage();
counter++;
}
if(!isRel && counter < page){
retVal = false;
}
else if( counter == page){
retVal = true;
}
return retVal;
}
else {
counter = page;
isRel = true;
while((counter < 0) && isRel){
isRel = previousPage();
counter++;
}
if( !isRel && counter < 0){
retVal = false;
}
else if(counter == 0){
retVal = true;
}
return retVal;
}
}
*/
/**
* Retrieves the first page of data as specified by the page size.
* @return boolean value true if present on first page, false otherwise
* @throws SQLException if it called before populate or ResultSet is of
* type <code>ResultSet.TYPE_FORWARD_ONLY or an error occurs
*/
/*
public boolean firstPage() throws SQLException {
if (populatecallcount == 0){
throw new SQLException("Populate the data before calling ");
}
if( !callWithCon){
if(resultSet.getType() == ResultSet.TYPE_FORWARD_ONLY) {
throw new SQLException("Result of type forward only");
}
}
endPos = 0;
maxRowsreached = 0;
pagenotend = true;
if(callWithCon){
crsReader.setStartPosition(startPos);
crsReader.readData((RowSetInternal)this);
resultSet = null;
}
else {
populate(resultSet,startPos);
}
onFirstPage = true;
return onFirstPage;
}
*/
/**
* Retrives the last page of data as specified by the page size.
* @return boolean value tur if present on the last page, false otherwise
* @throws SQLException if called before populate or if an error occurs.
*/
/*
public boolean lastPage() throws SQLException{
int pS;
int mR;
int quo;
int rem;
pS = getPageSize();
mR = getMaxRows();
if(pS == 0){
onLastPage = true;
return onLastPage;
}
if(getMaxRows() == 0){
mR = totalRows;
}
if (populatecallcount == 0){
throw new SQLException("Populate the data before calling ");
}
onFirstPage = false;
if((mR % pS) == 0){
quo = mR / pS;
int start = startPos + (pS * (quo - 1));
maxRowsreached = mR - pS;
if(callWithCon){
crsReader.setStartPosition(start);
crsReader.readData((RowSetInternal)this);
resultSet = null;
}
else {
populate(resultSet,start);
}
onLastPage = true;
return onLastPage;
}
else {
quo = mR /pS;
rem = mR % pS;
int start = startPos + (pS * quo);
maxRowsreached = mR - (rem);
if(callWithCon){
crsReader.setStartPosition(start);
crsReader.readData((RowSetInternal)this);
resultSet = null;
}
else {
populate(resultSet,start);
}
onLastPage = true;
return onLastPage;
}
}
*/
/**
* Sets the status for the row on which the cursor is positioned. The insertFlag is used
* to mention the toggle status for this row
* @param insertFlag if it is true - marks this row as inserted
* if it is false - marks it as not a newly inserted row
* @throws SQLException if an error occurs while doing this operation
*/
public void setRowInserted(boolean insertFlag) throws SQLException {
checkCursor();
if(onInsertRow == true)
throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.invalidop").toString());
if( insertFlag ) {
((Row)getCurrentRow()).setInserted();
} else {
((Row)getCurrentRow()).clearInserted();
}
}
/**
* Retrieves the value of the designated <code>SQL XML parameter as a
* <code>SQLXML object in the Java programming language.
* @param columnIndex the first column is 1, the second is 2, ...
* @return a SQLXML object that maps an SQL XML value
* @throws SQLException if a database access error occurs
* @since 6.0
*/
public SQLXML getSQLXML(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated <code>SQL XML parameter as a
* <code>SQLXML object in the Java programming language.
* @param colName the name of the column from which to retrieve the value
* @return a SQLXML object that maps an SQL XML value
* @throws SQLException if a database access error occurs
*/
public SQLXML getSQLXML(String colName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row of this
* <code>ResultSet object as a java.sql.RowId object in the Java
* programming language.
*
* @param columnIndex the first column is 1, the second 2, ...
* @return the column value if the value is a SQL <code>NULL the
* value returned is <code>null
* @throws SQLException if a database access error occurs
* @since 6.0
*/
public RowId getRowId(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row of this
* <code>ResultSet object as a java.sql.RowId object in the Java
* programming language.
*
* @param columnName the name of the column
* @return the column value if the value is a SQL <code>NULL the
* value returned is <code>null
* @throws SQLException if a database access error occurs
* @since 6.0
*/
public RowId getRowId(String columnName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Updates the designated column with a <code>RowId value. The updater
* methods are used to update column values in the current row or the insert
* row. The updater methods do not update the underlying database; instead
* the <code>updateRow or value. The updater
* methods are used to update column values in the current row or the insert
* row. The updater methods do not update the underlying database; instead
* the <code>updateRow or type that maps
* to <code>java.sql.Types.NCLOB
* @param columnIndex the first column is 1, the second 2, ...
* @param nClob the value for the column to be updated
* @throws SQLException if a database access error occurs
* @since 6.0
*/
public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* This method is used for updating SQL <code>NCLOB type that maps
* to <code>java.sql.Types.NCLOB
* @param columnName name of the column
* @param nClob the value for the column to be updated
* @throws SQLException if a database access error occurs
* @since 6.0
*/
public void updateNClob(String columnName, NClob nClob) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>ResultSet object as a NClob object
* in the Java programming language.
*
* @param i the first column is 1, the second is 2, ...
* @return a <code>NClob object representing the SQL
* <code>NCLOB value in the specified column
* @exception SQLException if a database access error occurs
* @since 6.0
*/
public NClob getNClob(int i) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>ResultSet object as a NClob object
* in the Java programming language.
*
* @param colName the name of the column from which to retrieve the value
* @return a <code>NClob object representing the SQL NCLOB
* value in the specified column
* @exception SQLException if a database access error occurs
* @since 6.0
*/
public NClob getNClob(String colName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
public <T> T unwrap(java.lang.ClassXML value
* @throws SQLException if a database access error occurs
* @since 1.6
*/
public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.SQLXML object. The driver converts this to an
* <code>SQL XML value when it sends it to the database.
* @param parameterName the name of the parameter
* @param xmlObject a <code>SQLXML object that maps an SQL XML value
* @throws SQLException if a database access error occurs
* @since 1.6
*/
public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.RowId object. The
* driver converts this to a SQL <code>ROWID value when it sends it
* to the database
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param x the parameter value
* @throws SQLException if a database access error occurs
*
* @since 1.6
*/
public void setRowId(int parameterIndex, RowId x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.RowId object. The
* driver converts this to a SQL <code>ROWID when it sends it to the
* database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @throws SQLException if a database access error occurs
* @since 1.6
*/
public void setRowId(String parameterName, RowId x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The
* <code>Reader reads the data till end-of-file is reached. The
* driver does the necessary conversion from Java character format to
* the national character set in the database.
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setNCharacterStream which takes a length parameter.
*
* @param parameterIndex of the first parameter is 1, the second is 2, ...
* @param value the parameter value
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur ; if a database access error occurs; or
* this method is called on a closed <code>PreparedStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>java.sql.NClob object. The object
* implements the <code>java.sql.NClob interface. This NClob
* object maps to a SQL <code>NCLOB.
* @param parameterName the name of the column to be set
* @param value the parameter value
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; or if a database access error occurs
* @since 1.6
*/
public void setNClob(String parameterName, NClob value) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>ResultSet object as a
* <code>java.io.Reader object.
* It is intended for use when
* accessing <code>NCHAR,NVARCHAR
* and <code>LONGNVARCHAR columns.
*
* @return a <code>java.io.Reader object that contains the column
* value; if the value is SQL <code>NULL, the value returned is
* <code>null in the Java programming language.
* @param columnIndex the first column is 1, the second is 2, ...
* @exception SQLException if a database access error occurs
* @since 1.6
*/
public java.io.Reader getNCharacterStream(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>ResultSet object as a
* <code>java.io.Reader object.
* It is intended for use when
* accessing <code>NCHAR,NVARCHAR
* and <code>LONGNVARCHAR columns.
*
* @param columnName the name of the column
* @return a <code>java.io.Reader object that contains the column
* value; if the value is SQL <code>NULL, the value returned is
* <code>null in the Java programming language
* @exception SQLException if a database access error occurs
* @since 1.6
*/
public java.io.Reader getNCharacterStream(String columnName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Updates the designated column with a <code>java.sql.SQLXML value.
* The updater
* methods are used to update column values in the current row or the insert
* row. The updater methods do not update the underlying database; instead
* the <code>updateRow or insertRow methods are called
* to update the database.
* @param columnIndex the first column is 1, the second 2, ...
* @param xmlObject the value for the column to be updated
* @throws SQLException if a database access error occurs
* @since 1.6
*/
public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Updates the designated column with a <code>java.sql.SQLXML value.
* The updater
* methods are used to update column values in the current row or the insert
* row. The updater methods do not update the underlying database; instead
* the <code>updateRow or insertRow methods are called
* to update the database.
*
* @param columnName the name of the column
* @param xmlObject the column value
* @throws SQLException if a database access occurs
* @since 1.6
*/
public void updateSQLXML(String columnName, SQLXML xmlObject) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>ResultSet object as
* a <code>String in the Java programming language.
* It is intended for use when
* accessing <code>NCHAR,NVARCHAR
* and <code>LONGNVARCHAR columns.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @return the column value; if the value is SQL <code>NULL, the
* value returned is <code>null
* @exception SQLException if a database access error occurs
* @since 1.6
*/
public String getNString(int columnIndex) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Retrieves the value of the designated column in the current row
* of this <code>ResultSet object as
* a <code>String in the Java programming language.
* It is intended for use when
* accessing <code>NCHAR,NVARCHAR
* and <code>LONGNVARCHAR columns.
*
* @param columnName the SQL name of the column
* @return the column value; if the value is SQL <code>NULL, the
* value returned is <code>null
* @exception SQLException if a database access error occurs
* @since 1.6
*/
public String getNString(String columnName) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Updates the designated column with a character stream value, which will
* have the specified number of bytes. The driver does the necessary conversion
* from Java character format to the national character set in the database.
* It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
* The updater methods are used to update column values in the current row or
* the insert row. The updater methods do not update the underlying database;
* instead the updateRow or insertRow methods are called to update the database.
*
* @param columnIndex - the first column is 1, the second is 2, ...
* @param x - the new column value
* @param length - the length of the stream
* @exception SQLException if a database access error occurs
* @since 1.6
*/
public void updateNCharacterStream(int columnIndex,
java.io.Reader x,
long length)
throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Updates the designated column with a character stream value, which will
* have the specified number of bytes. The driver does the necessary conversion
* from Java character format to the national character set in the database.
* It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns.
* The updater methods are used to update column values in the current row or
* the insert row. The updater methods do not update the underlying database;
* instead the updateRow or insertRow methods are called to update the database.
*
* @param columnName - name of the Column
* @param x - the new column value
* @param length - the length of the stream
* @exception SQLException if a database access error occurs
* @since 1.6
*/
public void updateNCharacterStream(String columnName,
java.io.Reader x,
long length)
throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.opnotysupp").toString());
}
/**
* Updates the designated column with a character stream value. The
* driver does the necessary conversion from Java character format to
* the national character set in the database.
* It is intended for use when
* updating <code>NCHAR,NVARCHAR
* and <code>LONGNVARCHAR columns.
*
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateNCharacterStream which takes a length parameter.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNCharacterStream(int columnIndex,
java.io.Reader x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with a character stream value. The
* driver does the necessary conversion from Java character format to
* the national character set in the database.
* It is intended for use when
* updating <code>NCHAR,NVARCHAR
* and <code>LONGNVARCHAR columns.
*
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateNCharacterStream which takes a length parameter.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param reader the <code>java.io.Reader object containing
* the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNCharacterStream(String columnLabel,
java.io.Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
//////////////////////////
/**
* Updates the designated column using the given input stream, which
* will have the specified number of bytes.
* When a very large ASCII value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream. Data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from ASCII to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param inputStream An object that contains the data to set the parameter
* value to.
* @param length the number of bytes in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given input stream, which
* will have the specified number of bytes.
* When a very large ASCII value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream. Data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from ASCII to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
* @param inputStream An object that contains the data to set the parameter
* value to.
* @param length the number of bytes in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given input stream.
* When a very large ASCII value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream. Data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from ASCII to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateBlob which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param inputStream An object that contains the data to set the parameter
* value to.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given input stream.
* When a very large ASCII value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream. Data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from ASCII to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateBlob which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param inputStream An object that contains the data to set the parameter
* value to.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object, which is the given number of characters long.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object, which is the given number of characters long.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateClob which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(int columnIndex, Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateClob which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param reader An object that contains the data to set the parameter value to.
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(String columnLabel, Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object, which is the given number of characters long.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set,
* if a database access error occurs or
* the result set concurrency is <code>CONCUR_READ_ONLY
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object, which is the given number of characters long.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set;
* if a database access error occurs or
* the result set concurrency is <code>CONCUR_READ_ONLY
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateNClob which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set,
* if a database access error occurs or
* the result set concurrency is <code>CONCUR_READ_ONLY
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(int columnIndex, Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column using the given <code>Reader
* object.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateNClob which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set;
* if a database access error occurs or
* the result set concurrency is <code>CONCUR_READ_ONLY
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(String columnLabel, Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with an ascii stream value, which will have
* the specified number of bytes.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @param length the length of the stream
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateAsciiStream(int columnIndex,
java.io.InputStream x,
long length) throws SQLException {
}
/**
* Updates the designated column with a binary stream value, which will have
* the specified number of bytes.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @param length the length of the stream
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBinaryStream(int columnIndex,
java.io.InputStream x,
long length) throws SQLException {
}
/**
* Updates the designated column with a character stream value, which will have
* the specified number of bytes.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @param length the length of the stream
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateCharacterStream(int columnIndex,
java.io.Reader x,
long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with a character stream value, which will have
* the specified number of bytes.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param reader the <code>java.io.Reader object containing
* the new column value
* @param length the length of the stream
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateCharacterStream(String columnLabel,
java.io.Reader reader,
long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with an ascii stream value, which will have
* the specified number of bytes..
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
* @param x the new column value
* @param length the length of the stream
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateAsciiStream(String columnLabel,
java.io.InputStream x,
long length) throws SQLException {
}
/**
* Updates the designated column with a binary stream value, which will have
* the specified number of bytes.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
* @param x the new column value
* @param length the length of the stream
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBinaryStream(String columnLabel,
java.io.InputStream x,
long length) throws SQLException {
}
/**
* Updates the designated column with a binary stream value.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateBinaryStream which takes a length parameter.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBinaryStream(int columnIndex,
java.io.InputStream x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with a binary stream value.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateBinaryStream which takes a length parameter.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param x the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBinaryStream(String columnLabel,
java.io.InputStream x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with a character stream value.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateCharacterStream which takes a length parameter.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateCharacterStream(int columnIndex,
java.io.Reader x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with a character stream value.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateCharacterStream which takes a length parameter.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param reader the <code>java.io.Reader object containing
* the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateCharacterStream(String columnLabel,
java.io.Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with an ascii stream value.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateAsciiStream which takes a length parameter.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param x the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateAsciiStream(int columnIndex,
java.io.InputStream x) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Updates the designated column with an ascii stream value.
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the <code>updateRow or
* <code>insertRow methods are called to update the database.
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>updateAsciiStream which takes a length parameter.
*
* @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la
bel is the name of the column
* @param x the new column value
* @exception SQLException if a database access error occurs,
* the result set concurrency is <code>CONCUR_READ_ONLY
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateAsciiStream(String columnLabel,
java.io.InputStream x) throws SQLException {
}
/**
* Sets the designated parameter to the given <code>java.net.URL value.
* The driver converts this to an SQL <code>DATALINK value
* when it sends it to the database.
*
* @param parameterIndex the first parameter is 1, the second is 2, ...
* @param x the <code>java.net.URL object to be set
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>PreparedStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.4
*/
public void setURL(int parameterIndex, java.net.URL x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object.
* This method differs from the <code>setCharacterStream (int, Reader) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>NCLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGNVARCHAR or a NCLOB
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setNClob which takes a length parameter.
*
* @param parameterIndex index of the first parameter is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if parameterIndex does not correspond to a parameter
* marker in the SQL statement;
* if the driver does not support national character sets;
* if the driver can detect that a data conversion
* error could occur; if a database access error occurs or
* this method is called on a closed <code>PreparedStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
*
* @since 1.6
*/
public void setNClob(int parameterIndex, Reader reader)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The reader must contain the number
* of characters specified by length otherwise a <code>SQLException will be
* generated when the <code>CallableStatement is executed.
* This method differs from the <code>setCharacterStream (int, Reader, int) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>NCLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be send to the server as a <code>LONGNVARCHAR or a NCLOB
*
* @param parameterName the name of the parameter to be set
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if parameterIndex does not correspond to a parameter
* marker in the SQL statement; if the length specified is less than zero;
* if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void setNClob(String parameterName, Reader reader, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object.
* This method differs from the <code>setCharacterStream (int, Reader) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>NCLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be send to the server as a <code>LONGNVARCHAR or a NCLOB
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setNClob which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if the driver does not support national character sets;
* if the driver can detect that a data conversion
* error could occur; if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
*
* @since 1.6
*/
public void setNClob(String parameterName, Reader reader)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The reader must contain the number
* of characters specified by length otherwise a <code>SQLException will be
* generated when the <code>PreparedStatement is executed.
* This method differs from the <code>setCharacterStream (int, Reader, int) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>NCLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGNVARCHAR or a NCLOB
* @param parameterIndex index of the first parameter is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if parameterIndex does not correspond to a parameter
* marker in the SQL statement; if the length specified is less than zero;
* if the driver does not support national character sets;
* if the driver can detect that a data conversion
* error could occur; if a database access error occurs or
* this method is called on a closed <code>PreparedStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
*
* @since 1.6
*/
public void setNClob(int parameterIndex, Reader reader, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>java.sql.NClob object. The driver converts this to
a
* SQL <code>NCLOB value when it sends it to the database.
* @param parameterIndex of the first parameter is 1, the second is 2, ...
* @param value the parameter value
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur ; or if a database access error occurs
* @since 1.6
*/
public void setNClob(int parameterIndex, NClob value) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>String object.
* The driver converts this to a SQL <code>NCHAR or
* <code>NVARCHAR or LONGNVARCHAR value
* (depending on the argument's
* size relative to the driver's limits on <code>NVARCHAR values)
* when it sends it to the database.
*
* @param parameterIndex of the first parameter is 1, the second is 2, ...
* @param value the parameter value
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur ; or if a database access error occurs
* @since 1.6
*/
public void setNString(int parameterIndex, String value) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>String object.
* The driver converts this to a SQL <code>NCHAR or
* <code>NVARCHAR or LONGNVARCHAR
* @param parameterName the name of the column to be set
* @param value the parameter value
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; or if a database access error occurs
* @since 1.6
*/
public void setNString(String parameterName, String value)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The
* <code>Reader reads the data till end-of-file is reached. The
* driver does the necessary conversion from Java character format to
* the national character set in the database.
* @param parameterIndex of the first parameter is 1, the second is 2, ...
* @param value the parameter value
* @param length the number of characters in the parameter data.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur ; or if a database access error occurs
* @since 1.6
*/
public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The
* <code>Reader reads the data till end-of-file is reached. The
* driver does the necessary conversion from Java character format to
* the national character set in the database.
* @param parameterName the name of the column to be set
* @param value the parameter value
* @param length the number of characters in the parameter data.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; or if a database access error occurs
* @since 1.6
*/
public void setNCharacterStream(String parameterName, Reader value, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The
* <code>Reader reads the data till end-of-file is reached. The
* driver does the necessary conversion from Java character format to
* the national character set in the database.
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setNCharacterStream which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param value the parameter value
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur ; if a database access error occurs; or
* this method is called on a closed <code>CallableStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setNCharacterStream(String parameterName, Reader value) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Timestamp value,
* using the given <code>Calendar object. The driver uses
* the <code>Calendar object to construct an SQL TIMESTAMP value,
* which the driver then sends to the database. With a
* a <code>Calendar object, the driver can calculate the timestamp
* taking into account a custom timezone. If no
* <code>Calendar object is specified, the driver uses the default
* timezone, which is that of the virtual machine running the application.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @param cal the <code>Calendar object the driver will use
* to construct the timestamp
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getTimestamp
* @since 1.4
*/
public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The reader must contain the number
* of characters specified by length otherwise a <code>SQLException will be
* generated when the <code>CallableStatement is executed.
* This method differs from the <code>setCharacterStream (int, Reader, int) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>CLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be send to the server as a <code>LONGVARCHAR or a CLOB
* @param parameterName the name of the parameter to be set
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if parameterIndex does not correspond to a parameter
* marker in the SQL statement; if the length specified is less than zero;
* a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
*
* @since 1.6
*/
public void setClob(String parameterName, Reader reader, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Clob object.
* The driver converts this to an SQL <code>CLOB value when it
* sends it to the database.
*
* @param parameterName the name of the parameter
* @param x a <code>Clob object that maps an SQL CLOB value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void setClob (String parameterName, Clob x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object.
* This method differs from the <code>setCharacterStream (int, Reader) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>CLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be send to the server as a <code>LONGVARCHAR or a CLOB
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setClob which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if a database access error occurs or this method is called on
* a closed <code>CallableStatement
*
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setClob(String parameterName, Reader reader)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Date value
* using the default time zone of the virtual machine that is running
* the application.
* The driver converts this
* to an SQL <code>DATE value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getDate
* @since 1.4
*/
public void setDate(String parameterName, java.sql.Date x)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Date value,
* using the given <code>Calendar object. The driver uses
* the <code>Calendar object to construct an SQL DATE value,
* which the driver then sends to the database. With a
* a <code>Calendar object, the driver can calculate the date
* taking into account a custom timezone. If no
* <code>Calendar object is specified, the driver uses the default
* timezone, which is that of the virtual machine running the application.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @param cal the <code>Calendar object the driver will use
* to construct the date
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getDate
* @since 1.4
*/
public void setDate(String parameterName, java.sql.Date x, Calendar cal)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Time value.
* The driver converts this
* to an SQL <code>TIME value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getTime
* @since 1.4
*/
public void setTime(String parameterName, java.sql.Time x)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Time value,
* using the given <code>Calendar object. The driver uses
* the <code>Calendar object to construct an SQL TIME value,
* which the driver then sends to the database. With a
* a <code>Calendar object, the driver can calculate the time
* taking into account a custom timezone. If no
* <code>Calendar object is specified, the driver uses the default
* timezone, which is that of the virtual machine running the application.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @param cal the <code>Calendar object the driver will use
* to construct the time
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getTime
* @since 1.4
*/
public void setTime(String parameterName, java.sql.Time x, Calendar cal)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object.
* This method differs from the <code>setCharacterStream (int, Reader) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>CLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGVARCHAR or a CLOB
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setClob which takes a length parameter.
*
* @param parameterIndex index of the first parameter is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if a database access error occurs, this method is called on
* a closed <code>PreparedStatementor if parameterIndex does not correspond to a parameter
* marker in the SQL statement
*
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setClob(int parameterIndex, Reader reader)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>Reader object. The reader must contain the number
* of characters specified by length otherwise a <code>SQLException will be
* generated when the <code>PreparedStatement is executed.
*This method differs from the <code>setCharacterStream (int, Reader, int) method
* because it informs the driver that the parameter value should be sent to
* the server as a <code>CLOB. When the setCharacterStream method is used, the
* driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGVARCHAR or a CLOB
* @param parameterIndex index of the first parameter is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if a database access error occurs, this method is called on
* a closed <code>PreparedStatement, if parameterIndex does not correspond to a parameter
* marker in the SQL statement, or if the length specified is less than zero.
*
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setClob(int parameterIndex, Reader reader, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>InputStream object. The inputstream must contain the number
* of characters specified by length otherwise a <code>SQLException will be
* generated when the <code>PreparedStatement is executed.
* This method differs from the <code>setBinaryStream (int, InputStream, int)
* method because it informs the driver that the parameter value should be
* sent to the server as a <code>BLOB. When the setBinaryStream method is used,
* the driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGVARBINARY or a BLOB
* @param parameterIndex index of the first parameter is 1,
* the second is 2, ...
* @param inputStream An object that contains the data to set the parameter
* value to.
* @param length the number of bytes in the parameter data.
* @throws SQLException if a database access error occurs,
* this method is called on a closed <code>PreparedStatement,
* if parameterIndex does not correspond
* to a parameter marker in the SQL statement, if the length specified
* is less than zero or if the number of bytes in the inputstream does not match
* the specified length.
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
*
* @since 1.6
*/
public void setBlob(int parameterIndex, InputStream inputStream, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>InputStream object.
* This method differs from the <code>setBinaryStream (int, InputStream)
* method because it informs the driver that the parameter value should be
* sent to the server as a <code>BLOB. When the setBinaryStream method is used,
* the driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGVARBINARY or a BLOB
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setBlob which takes a length parameter.
*
* @param parameterIndex index of the first parameter is 1,
* the second is 2, ...
* @param inputStream An object that contains the data to set the parameter
* value to.
* @throws SQLException if a database access error occurs,
* this method is called on a closed <code>PreparedStatement or
* if parameterIndex does not correspond
* to a parameter marker in the SQL statement,
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
*
* @since 1.6
*/
public void setBlob(int parameterIndex, InputStream inputStream)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>InputStream object. The inputstream must contain the number
* of characters specified by length, otherwise a <code>SQLException will be
* generated when the <code>CallableStatement is executed.
* This method differs from the <code>setBinaryStream (int, InputStream, int)
* method because it informs the driver that the parameter value should be
* sent to the server as a <code>BLOB. When the setBinaryStream method is used,
* the driver may have to do extra work to determine whether the parameter
* data should be sent to the server as a <code>LONGVARBINARY or a BLOB
*
* @param parameterName the name of the parameter to be set
* the second is 2, ...
*
* @param inputStream An object that contains the data to set the parameter
* value to.
* @param length the number of bytes in the parameter data.
* @throws SQLException if parameterIndex does not correspond
* to a parameter marker in the SQL statement, or if the length specified
* is less than zero; if the number of bytes in the inputstream does not match
* the specified length; if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
*
* @since 1.6
*/
public void setBlob(String parameterName, InputStream inputStream, long length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Blob object.
* The driver converts this to an SQL <code>BLOB value when it
* sends it to the database.
*
* @param parameterName the name of the parameter
* @param x a <code>Blob object that maps an SQL BLOB value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void setBlob (String parameterName, Blob x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to a <code>InputStream object.
* This method differs from the <code>setBinaryStream (int, InputStream)
* method because it informs the driver that the parameter value should be
* sent to the server as a <code>BLOB. When the setBinaryStream method is used,
* the driver may have to do extra work to determine whether the parameter
* data should be send to the server as a <code>LONGVARBINARY or a BLOB
*
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setBlob which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param inputStream An object that contains the data to set the parameter
* value to.
* @throws SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
*
* @since 1.6
*/
public void setBlob(String parameterName, InputStream inputStream)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the value of the designated parameter with the given object. The second
* argument must be an object type; for integral values, the
* <code>java.lang equivalent objects should be used.
*
* <p>The given Java object will be converted to the given targetSqlType
* before being sent to the database.
*
* If the object has a custom mapping (is of a class implementing the
* interface <code>SQLData),
* the JDBC driver should call the method <code>SQLData.writeSQL to write it
* to the SQL data stream.
* If, on the other hand, the object is of a class implementing
* <code>Ref, Blob , Clob , NClob ,
* <code>Struct, java.net.URL ,
* or <code>Array, the driver should pass it to the database as a
* value of the corresponding SQL type.
* <P>
* Note that this method may be used to pass datatabase-
* specific abstract data types.
*
* @param parameterName the name of the parameter
* @param x the object containing the input parameter value
* @param targetSqlType the SQL type (as defined in java.sql.Types) to be
* sent to the database. The scale argument may further qualify this type.
* @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types,
* this is the number of digits after the decimal point. For all other
* types, this value will be ignored.
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if <code>targetSqlType is
* a <code>ARRAY, BLOB , CLOB ,
* <code>DATALINK, JAVA_OBJECT , NCHAR ,
* <code>NCLOB, NVARCHAR , LONGNVARCHAR ,
* <code>REF, ROWID , SQLXML
* or <code>STRUCT data type and the JDBC driver does not support
* this data type
* @see Types
* @see #getObject
* @since 1.4
*/
public void setObject(String parameterName, Object x, int targetSqlType, int scale)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the value of the designated parameter with the given object.
* This method is like the method <code>setObject
* above, except that it assumes a scale of zero.
*
* @param parameterName the name of the parameter
* @param x the object containing the input parameter value
* @param targetSqlType the SQL type (as defined in java.sql.Types) to be
* sent to the database
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if <code>targetSqlType is
* a <code>ARRAY, BLOB , CLOB ,
* <code>DATALINK, JAVA_OBJECT , NCHAR ,
* <code>NCLOB, NVARCHAR , LONGNVARCHAR ,
* <code>REF, ROWID , SQLXML
* or <code>STRUCT data type and the JDBC driver does not support
* this data type
* @see #getObject
* @since 1.4
*/
public void setObject(String parameterName, Object x, int targetSqlType)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the value of the designated parameter with the given object.
* The second parameter must be of type <code>Object; therefore, the
* <code>java.lang equivalent objects should be used for built-in types.
*
* <p>The JDBC specification specifies a standard mapping from
* Java <code>Object types to SQL types. The given argument
* will be converted to the corresponding SQL type before being
* sent to the database.
*
* <p>Note that this method may be used to pass datatabase-
* specific abstract data types, by using a driver-specific Java
* type.
*
* If the object is of a class implementing the interface <code>SQLData,
* the JDBC driver should call the method <code>SQLData.writeSQL
* to write it to the SQL data stream.
* If, on the other hand, the object is of a class implementing
* <code>Ref, Blob , Clob , NClob ,
* <code>Struct, java.net.URL ,
* or <code>Array, the driver should pass it to the database as a
* value of the corresponding SQL type.
* <P>
* This method throws an exception if there is an ambiguity, for example, if the
* object is of a class implementing more than one of the interfaces named above.
*
* @param parameterName the name of the parameter
* @param x the object containing the input parameter value
* @exception SQLException if a database access error occurs,
* this method is called on a closed <code>CallableStatement or if the given
* <code>Object parameter is ambiguous
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getObject
* @since 1.4
*/
public void setObject(String parameterName, Object x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given input stream, which will have
* the specified number of bytes.
* When a very large ASCII value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream. Data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from ASCII to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
*
* @param parameterName the name of the parameter
* @param x the Java input stream that contains the ASCII parameter value
* @param length the number of bytes in the stream
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.4
*/
public void setAsciiStream(String parameterName, java.io.InputStream x, int length)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given input stream, which will have
* the specified number of bytes.
* When a very large binary value is input to a <code>LONGVARBINARY
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream object. The data will be read from the stream
* as needed until end-of-file is reached.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
*
* @param parameterName the name of the parameter
* @param x the java input stream which contains the binary parameter value
* @param length the number of bytes in the stream
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.4
*/
public void setBinaryStream(String parameterName, java.io.InputStream x,
int length) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>Reader
* object, which is the given number of characters long.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
*
* @param parameterName the name of the parameter
* @param reader the <code>java.io.Reader object that
* contains the UNICODE data used as the designated parameter
* @param length the number of characters in the stream
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.4
*/
public void setCharacterStream(String parameterName,
java.io.Reader reader,
int length) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given input stream.
* When a very large ASCII value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream. Data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from ASCII to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setAsciiStream which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param x the Java input stream that contains the ASCII parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setAsciiStream(String parameterName, java.io.InputStream x)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given input stream.
* When a very large binary value is input to a <code>LONGVARBINARY
* parameter, it may be more practical to send it via a
* <code>java.io.InputStream object. The data will be read from the
* stream as needed until end-of-file is reached.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setBinaryStream which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param x the java input stream which contains the binary parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setBinaryStream(String parameterName, java.io.InputStream x)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>Reader
* object.
* When a very large UNICODE value is input to a <code>LONGVARCHAR
* parameter, it may be more practical to send it via a
* <code>java.io.Reader object. The data will be read from the stream
* as needed until end-of-file is reached. The JDBC driver will
* do any necessary conversion from UNICODE to the database char format.
*
* <P>Note: This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P>Note: Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* <code>setCharacterStream which takes a length parameter.
*
* @param parameterName the name of the parameter
* @param reader the <code>java.io.Reader object that contains the
* Unicode data
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method
* @since 1.6
*/
public void setCharacterStream(String parameterName,
java.io.Reader reader) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given
* <code>java.math.BigDecimal value.
* The driver converts this to an SQL <code>NUMERIC value when
* it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getBigDecimal
* @since 1.4
*/
public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>String value.
* The driver converts this
* to an SQL <code>VARCHAR or LONGVARCHAR value
* (depending on the argument's
* size relative to the driver's limits on <code>VARCHAR values)
* when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getString
* @since 1.4
*/
public void setString(String parameterName, String x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java array of bytes.
* The driver converts this to an SQL <code>VARBINARY or
* <code>LONGVARBINARY (depending on the argument's size relative
* to the driver's limits on <code>VARBINARY values) when it sends
* it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getBytes
* @since 1.4
*/
public void setBytes(String parameterName, byte x[]) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given <code>java.sql.Timestamp value.
* The driver
* converts this to an SQL <code>TIMESTAMP value when it sends it to the
* database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getTimestamp
* @since 1.4
*/
public void setTimestamp(String parameterName, java.sql.Timestamp x)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to SQL <code>NULL.
*
* <P>Note: You must specify the parameter's SQL type.
*
* @param parameterName the name of the parameter
* @param sqlType the SQL type code defined in <code>java.sql.Types
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.4
*/
public void setNull(String parameterName, int sqlType) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to SQL <code>NULL.
* This version of the method <code>setNull should
* be used for user-defined types and REF type parameters. Examples
* of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and
* named array types.
*
* <P>Note: To be portable, applications must give the
* SQL type code and the fully-qualified SQL type name when specifying
* a NULL user-defined or REF parameter. In the case of a user-defined type
* the name is the type name of the parameter itself. For a REF
* parameter, the name is the type name of the referenced type. If
* a JDBC driver does not need the type code or type name information,
* it may ignore it.
*
* Although it is intended for user-defined and Ref parameters,
* this method may be used to set a null parameter of any JDBC type.
* If the parameter does not have a user-defined or REF type, the given
* typeName is ignored.
*
*
* @param parameterName the name of the parameter
* @param sqlType a value from <code>java.sql.Types
* @param typeName the fully-qualified name of an SQL user-defined type;
* ignored if the parameter is not a user-defined type or
* SQL <code>REF value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.4
*/
public void setNull (String parameterName, int sqlType, String typeName)
throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>boolean value.
* The driver converts this
* to an SQL <code>BIT or BOOLEAN value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @see #getBoolean
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.4
*/
public void setBoolean(String parameterName, boolean x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>byte value.
* The driver converts this
* to an SQL <code>TINYINT value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getByte
* @since 1.4
*/
public void setByte(String parameterName, byte x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>short value.
* The driver converts this
* to an SQL <code>SMALLINT value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getShort
* @since 1.4
*/
public void setShort(String parameterName, short x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>int value.
* The driver converts this
* to an SQL <code>INTEGER value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getInt
* @since 1.4
*/
public void setInt(String parameterName, int x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>long value.
* The driver converts this
* to an SQL <code>BIGINT value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getLong
* @since 1.4
*/
public void setLong(String parameterName, long x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>float value.
* The driver converts this
* to an SQL <code>FLOAT value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getFloat
* @since 1.4
*/
public void setFloat(String parameterName, float x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* Sets the designated parameter to the given Java <code>double value.
* The driver converts this
* to an SQL <code>DOUBLE value when it sends it to the database.
*
* @param parameterName the name of the parameter
* @param x the parameter value
* @exception SQLException if a database access error occurs or
* this method is called on a closed <code>CallableStatement
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @see #getDouble
* @since 1.4
*/
public void setDouble(String parameterName, double x) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("cachedrowsetimpl.featnotsupp").toString());
}
/**
* 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);
}
}
//------------------------- JDBC 4.1 -----------------------------------
public <T> T getObject(int columnIndex, ClassOther Java examples (source code examples)Here is a short list of links related to this Java CachedRowSetImpl.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.