0N/A/*
2741N/A * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage com.sun.rowset;
0N/A
0N/Aimport java.io.*;
0N/Aimport java.util.*;
0N/Aimport java.sql.*;
0N/Aimport javax.sql.*;
0N/Aimport java.math.*;
0N/A
0N/Aimport javax.sql.rowset.*;
0N/Aimport javax.sql.rowset.spi.*;
0N/Aimport javax.sql.rowset.serial.*;
0N/Aimport com.sun.rowset.providers.*;
0N/Aimport com.sun.rowset.internal.*;
0N/A
0N/A/**
0N/A * The standard implementation of the <code>FilteredRowSet</code> interface. See the interface
0N/A * defintion for full behaviour and implementation requirements.
0N/A *
0N/A * @see javax.sql.rowset.Predicate
0N/A * @author Jonathan Bruce, Amit Handa
0N/A */
0N/A
0N/Apublic class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, Cloneable, FilteredRowSet {
0N/A
0N/A private Predicate p;
0N/A
0N/A private boolean onInsertRow = false;
0N/A
0N/A
0N/A /**
0N/A * Construct a <code>FilteredRowSet</code>
0N/A */
0N/A public FilteredRowSetImpl() throws SQLException {
0N/A super();
0N/A }
0N/A
0N/A /**
0N/A * Construct a <code>FilteredRowSet</code> with a specified synchronization
0N/A * provider.
0N/A *
0N/A * @param env a Hashtable containing a desired synchconizatation provider
0N/A * name-value pair.
0N/A */
0N/A public FilteredRowSetImpl(Hashtable env) throws SQLException {
0N/A super(env);
0N/A }
0N/A
0N/A /**
0N/A * Apply the predicate for this filter
0N/A *
0N/A * @param p an implementation of the predicate interface
0N/A */
0N/A public void setFilter(Predicate p) throws SQLException {
0N/A this.p = p;
0N/A }
0N/A
0N/A /**
0N/A * Retrieve the filter active for this <code>FilteredRowSet</code>
0N/A *
0N/A * @return a <code>Predicate</code> object instance
0N/A */
0N/A public Predicate getFilter() {
0N/A return this.p;
0N/A }
0N/A
0N/A /**
0N/A * Over-riding <code>internalNext()</code> implementation. This method
0N/A * applies the filter on the <code>RowSet</code> each time the cursor is advanced or
0N/A * manipulated. It moves the cursor to the next row according to the set
0N/A * predicate and returns <code>true</code> if the cursor is still within the rowset or
0N/A * <code>false</code> if the cursor position is over the last row
0N/A *
0N/A * @return true if over the valid row in the rowset; false if over the last
0N/A * row
0N/A */
0N/A protected boolean internalNext() throws SQLException {
0N/A // CachedRowSetImpl.next() internally calls
0N/A // this(crs).internalNext() NOTE: this holds crs object
0N/A // So when frs.next() is called,
0N/A // internally this(frs).internalNext() will be called
0N/A // which will be nothing but this method.
0N/A // because this holds frs object
0N/A
0N/A // keep on doing super.internalNext()
0N/A // rather than doing it once.
0N/A
0N/A
0N/A // p.evaluate will help us in changing the cursor
0N/A // and checking the next value by returning true or false.
0N/A // to fit the filter
0N/A
0N/A // So while() loop will have a "random combination" of
0N/A // true and false returned depending upon the records
0N/A // are in or out of filter.
0N/A // We need to traverse from present cursorPos till end,
0N/A // whether true or false and check each row for "filter"
0N/A // "till we get a "true"
0N/A
0N/A
0N/A boolean bool = false;
0N/A
0N/A for(int rows=this.getRow(); rows<=this.size();rows++) {
0N/A bool = super.internalNext();
0N/A
0N/A if( p == null) {
0N/A return bool;
0N/A }
0N/A if(p.evaluate(this)){
0N/A break;
0N/A }
0N/A
0N/A }
0N/A
0N/A return bool;
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Over-riding <code>internalPrevious()</code> implementation. This method
0N/A * applies the filter on the <code>RowSet</code> each time the cursor is moved backward or
0N/A * manipulated. It moves the cursor to the previous row according to the set
0N/A * predicate and returns <code>true</code> if the cursor is still within the rowset or
0N/A * <code>false</code> if the cursor position is over the last row
0N/A *
0N/A * @return true if over the valid row in the rowset; false if over the last
0N/A * row
0N/A */
0N/A protected boolean internalPrevious() throws SQLException {
0N/A boolean bool = false;
0N/A // with previous move backwards,
0N/A // i.e. from any record towards first record
0N/A
0N/A for(int rows=this.getRow(); rows>0;rows--) {
0N/A
0N/A bool = super.internalPrevious();
0N/A
0N/A if( p == null) {
0N/A return bool;
0N/A }
0N/A
0N/A if(p.evaluate(this)){
0N/A break;
0N/A }
0N/A
0N/A }
0N/A
0N/A return bool;
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Over-riding <code>internalFirst()</code> implementation. This method
0N/A * applies the filter on the <code>RowSet</code> each time the cursor is moved to first
0N/A * row. It moves the cursor to the first row according to the set
0N/A * predicate and returns <code>true</code> if the cursor is still within the rowset or
0N/A * <code>false</code> if the cursor position is over the last row
0N/A *
0N/A * @return true if over the valid row in the rowset; false if over the last
0N/A * row
0N/A */
0N/A protected boolean internalFirst() throws SQLException {
0N/A
0N/A // from first till present cursor position(go forward),
0N/A // find the actual first which matches the filter.
0N/A
0N/A boolean bool = super.internalFirst();
0N/A
0N/A if( p == null) {
0N/A return bool;
0N/A }
0N/A
0N/A while(bool) {
0N/A
0N/A if(p.evaluate(this)){
0N/A break;
0N/A }
0N/A bool = super.internalNext();
0N/A }
0N/A return bool;
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Over-riding <code>internalLast()</code> implementation. This method
0N/A * applies the filter on the <code>RowSet</code> each time the cursor is moved to
0N/A * last row. It moves the cursor to the last row according to the set
0N/A * predicate and returns <code>true</code> if the cursor is still within the rowset or
0N/A * <code>false</code> if the cursor position is over the last row
0N/A *
0N/A * @return true if over the valid row in the rowset; false if over the last
0N/A * row
0N/A */
0N/A protected boolean internalLast() throws SQLException {
0N/A // from last to the present cursor position(go backward),
0N/A // find the actual last which matches the filter.
0N/A
0N/A boolean bool = super.internalLast();
0N/A
0N/A if( p == null) {
0N/A return bool;
0N/A }
0N/A
0N/A while(bool) {
0N/A
0N/A if(p.evaluate(this)){
0N/A break;
0N/A }
0N/A
0N/A bool = super.internalPrevious();
0N/A
0N/A }
0N/A return bool;
0N/A
0N/A } // end internalLast()
0N/A /**
0N/A * Moves the cursor the specified number of rows from the current
0N/A * position, with a positive number moving it forward and a
0N/A * negative number moving it backward.
0N/A * <P>
0N/A * If the number is positive, the cursor moves the specified number of
0N/A * rows toward the end of the rowset, starting at the current row.
0N/A * For example, the following command, in which
0N/A * <code>crs</code> is a <code>CachedRowSetImpl</code> object with 100 rows,
0N/A * moves the cursor forward four rows from the current row. If the
0N/A * current row is 50, the cursor would move to row 54.
0N/A * <PRE><code>
0N/A *
0N/A * crs.relative(4);
0N/A *
0N/A * </code> </PRE>
0N/A * <P>
0N/A * If the number is negative, the cursor moves back toward the beginning
0N/A * the specified number of rows, starting at the current row.
0N/A * For example, calling the method
0N/A * <code>absolute(-1)</code> positions the cursor on the last row,
0N/A * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
0N/A * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
0N/A * the following command moves the cursor to the fourth-to-last row, which
0N/A * in the case of a rowset with five rows, is also the second row
0N/A * from the beginning.
0N/A * <PRE><code>
0N/A *
0N/A * crs.absolute(-4);
0N/A *
0N/A * </code> </PRE>
0N/A *
0N/A * If the number specified is larger than the number of rows, the cursor
0N/A * will move to the position after the last row. If the number specified
0N/A * would move the cursor one or more rows before the first row, the cursor
0N/A * moves to the position before the first row. In both cases, this method
0N/A * throws an <code>SQLException</code>.
0N/A * <P>
0N/A * Note: Calling <code>absolute(1)</code> is the same as calling the
0N/A * method <code>first()</code>. Calling <code>absolute(-1)</code> is the
0N/A * same as calling <code>last()</code>. Calling <code>relative(0)</code>
0N/A * is valid, but it does not change the cursor position.
0N/A *
0N/A * @param rows an <code>int</code> indicating the number of rows to move
0N/A * the cursor, starting at the current row; a positive number
0N/A * moves the cursor forward; a negative number moves the cursor
0N/A * backward; must not move the cursor past the valid
0N/A * rows
0N/A * @return <code>true</code> if the cursor is on a row in this
0N/A * <code>CachedRowSetImpl</code> object; <code>false</code>
0N/A * otherwise
0N/A * @throws SQLException if the rowset is type <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean relative(int rows) throws SQLException {
0N/A
0N/A boolean retval;
0N/A boolean bool = false;
0N/A boolean boolval = false;
0N/A
0N/A if(getType() == ResultSet.TYPE_FORWARD_ONLY) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.relative").toString());
0N/A }
0N/A
0N/A if( rows > 0 ) {
0N/A
0N/A int i = 0;
0N/A while( i < (rows)) {
0N/A
0N/A if( isAfterLast() ) {
0N/A return false;
0N/A }
0N/A bool = internalNext();
0N/A i++;
0N/A }
0N/A
0N/A retval = bool;
0N/A } else {
0N/A int j = rows;
0N/A while( (j) < 0 ) {
0N/A
0N/A if( isBeforeFirst() ) {
0N/A return false;
0N/A }
0N/A boolval = internalPrevious();
0N/A j++;
0N/A }
0N/A retval = boolval;
0N/A }
0N/A if(rows != 0)
0N/A notifyCursorMoved();
0N/A return retval;
0N/A }
0N/A
0N/A /**
0N/A * Moves this <code>CachedRowSetImpl</code> object's cursor to the row number
0N/A * specified.
0N/A *
0N/A * <p>If the number is positive, the cursor moves to an absolute row with
0N/A * respect to the beginning of the rowset. The first row is row 1, the second
0N/A * is row 2, and so on. For example, the following command, in which
0N/A * <code>crs</code> is a <code>CachedRowSetImpl</code> object, moves the cursor
0N/A * to the fourth row, starting from the beginning of the rowset.
0N/A * <PRE><code>
0N/A *
0N/A * crs.absolute(4);
0N/A *
0N/A * </code> </PRE>
0N/A * <P>
0N/A * If the number is negative, the cursor moves to an absolute row position
0N/A * with respect to the end of the rowset. For example, calling
0N/A * <code>absolute(-1)</code> positions the cursor on the last row,
0N/A * <code>absolute(-2)</code> moves it on the next-to-last row, and so on.
0N/A * If the <code>CachedRowSetImpl</code> object <code>crs</code> has five rows,
0N/A * the following command moves the cursor to the fourth-to-last row, which
0N/A * in the case of a rowset with five rows, is also the second row, counting
0N/A * from the beginning.
0N/A * <PRE><code>
0N/A *
0N/A * crs.absolute(-4);
0N/A *
0N/A * </code> </PRE>
0N/A *
0N/A * If the number specified is larger than the number of rows, the cursor
0N/A * will move to the position after the last row. If the number specified
0N/A * would move the cursor one or more rows before the first row, the cursor
0N/A * moves to the position before the first row.
0N/A * <P>
0N/A * Note: Calling <code>absolute(1)</code> is the same as calling the
0N/A * method <code>first()</code>. Calling <code>absolute(-1)</code> is the
0N/A * same as calling <code>last()</code>.
0N/A *
0N/A * @param rows a positive number to indicate the row, starting row numbering from
0N/A * the first row, which is <code>1</code>; a negative number to indicate
0N/A * the row, starting row numbering from the last row, which is
0N/A * <code>-1</code>; it must not be <code>0</code>
0N/A * @return <code>true</code> if the cursor is on the rowset; <code>false</code>
0N/A * otherwise
0N/A * @throws SQLException if the given cursor position is <code>0</code> or the
0N/A * type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
0N/A */
0N/A public boolean absolute(int rows) throws SQLException {
0N/A
0N/A boolean retval;
0N/A boolean bool = false;
0N/A
0N/A if(rows == 0 || getType() == ResultSet.TYPE_FORWARD_ONLY) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.absolute").toString());
0N/A }
0N/A
0N/A if (rows > 0) {
0N/A bool = internalFirst();
0N/A
0N/A int i = 0;
0N/A while(i < (rows-1)) {
0N/A if( isAfterLast() ) {
0N/A return false;
0N/A }
0N/A bool = internalNext();
0N/A i++;
0N/A }
0N/A retval = bool;
0N/A } else {
0N/A bool = internalLast();
0N/A
0N/A int j = rows;
0N/A while((j+1) < 0 ) {
0N/A if( isBeforeFirst() ) {
0N/A return false;
0N/A }
0N/A bool = internalPrevious();
0N/A j++;
0N/A }
0N/A retval = bool;
0N/A }
0N/A notifyCursorMoved();
0N/A return retval;
0N/A }
0N/A
0N/A /**
0N/A * Moves the cursor for this <code>CachedRowSetImpl</code> object
0N/A * to the insert row. The current row in the rowset is remembered
0N/A * while the cursor is on the insert row.
0N/A * <P>
0N/A * The insert row is a special row associated with an updatable
0N/A * rowset. It is essentially a buffer where a new row may
0N/A * be constructed by calling the appropriate <code>updateXXX</code>
0N/A * methods to assign a value to each column in the row. A complete
0N/A * row must be constructed; that is, every column that is not nullable
0N/A * must be assigned a value. In order for the new row to become part
0N/A * of this rowset, the method <code>insertRow</code> must be called
0N/A * before the cursor is moved back to the rowset.
0N/A * <P>
0N/A * Only certain methods may be invoked while the cursor is on the insert
0N/A * row; many methods throw an exception if they are called while the
0N/A * cursor is there. In addition to the <code>updateXXX</code>
0N/A * and <code>insertRow</code> methods, only the <code>getXXX</code> methods
0N/A * may be called when the cursor is on the insert row. A <code>getXXX</code>
0N/A * method should be called on a column only after an <code>updateXXX</code>
0N/A * method has been called on that column; otherwise, the value returned is
0N/A * undetermined.
0N/A *
0N/A * @throws SQLException if this <code>CachedRowSetImpl</code> object is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void moveToInsertRow() throws SQLException {
0N/A
0N/A onInsertRow = true;
0N/A super.moveToInsertRow();
0N/A }
0N/A
0N/A /**
0N/A * This is explanation for the overriding of the updateXXX functions.
0N/A * These functions have been overriden to ensure that only correct
0N/A * values that pass the criteria for the filter are actaully inserted.
0N/A * The evaluation of whether a particular value passes the criteria
0N/A * of the filter is done using the evaluate function in the Predicate
0N/A * interface.
0N/A *
0N/A * The checking can will done in the evaluate function which is implemented
0N/A * in the class that implements the Predicate interface. So the checking
0N/A * can vary from one implementation to another.
0N/A *
0N/A * Some additional points here on the following:
0N/A * 1. updateBytes() - since the evaluate function takes Object as parameter
0N/A * a String is constructed from the byte array and would
0N/A * passed to the evaluate function.
0N/A * 2. updateXXXstream() - here it would suffice to pass the stream handle
0N/A * to the evaluate function and the implementation
0N/A * of the evaluate function can do the comparision
0N/A * based on the stream and also type of data.
0N/A */
0N/A
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>int</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateInt(int columnIndex , int x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
2828N/A bool = p.evaluate(Integer.valueOf(x),columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateInt(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>int</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateInt(String columnName , int x) throws SQLException {
0N/A
0N/A this.updateInt(findColumn(columnName), x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>boolean</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBoolean(int columnIndex, boolean x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
2828N/A bool = p.evaluate(Boolean.valueOf(x) , columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateBoolean(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>boolean</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBoolean(String columnName , boolean x) throws SQLException {
0N/A
0N/A this.updateBoolean(findColumn(columnName),x);
0N/A }
0N/A
0N/A
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>byte</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateByte(int columnIndex , byte x) throws SQLException {
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
2828N/A bool = p.evaluate(Byte.valueOf(x),columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateByte(columnIndex,x);
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>byte</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateByte(String columnName , byte x) throws SQLException {
0N/A
0N/A this.updateByte(findColumn(columnName),x);
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>short</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateShort( int columnIndex , short x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
2828N/A bool = p.evaluate(Short.valueOf(x), columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateShort(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>short</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateShort( String columnName , short x) throws SQLException {
0N/A
0N/A this.updateShort(findColumn(columnName),x);
0N/A }
0N/A
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>long</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateLong(int columnIndex , long x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
2828N/A bool = p.evaluate(Long.valueOf(x), columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateLong(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>long</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateLong( String columnName , long x) throws SQLException {
0N/A
0N/A this.updateLong(findColumn(columnName) , x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>float</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateFloat(int columnIndex , float x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(new Float(x) , columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateFloat(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>float</code> value.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateFloat(String columnName , float x) throws SQLException {
0N/A
0N/A this.updateFloat(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>double</code> value.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDouble(int columnIndex , double x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(new Double(x) , columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateDouble(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>double</code> value.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDouble(String columnName , double x) throws SQLException {
0N/A
0N/A this.updateDouble(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>java.math.BigDecimal</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBigDecimal(int columnIndex , BigDecimal x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateBigDecimal(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>java.math.BigDecimal</code> object.
0N/A * <P>
0N/A * This method updates a column value in the current row or the insert
0N/A * row of this rowset, but it does not update the database.
0N/A * If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBigDecimal(String columnName , BigDecimal x) throws SQLException {
0N/A
0N/A this.updateBigDecimal(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>String</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to mark the row as updated.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called to insert the new row into this rowset and mark it
0N/A * as inserted. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A * <P>
0N/A * The method <code>acceptChanges</code> must be called if the
0N/A * updated values are to be written back to the underlying database.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateString(int columnIndex , String x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateString(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>String</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateString(String columnName , String x) throws SQLException {
0N/A
0N/A this.updateString(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>byte</code> array.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBytes(int columnIndex , byte []x) throws SQLException {
0N/A
0N/A boolean bool;
2823N/A String val = "";
0N/A
0N/A Byte [] obj_arr = new Byte[x.length];
0N/A
0N/A for(int i = 0; i < x.length; i++) {
2828N/A obj_arr[i] = Byte.valueOf(x[i]);
0N/A val = val.concat(obj_arr[i].toString());
0N/A }
0N/A
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(val,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateBytes(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>byte</code> array.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBytes(String columnName , byte []x) throws SQLException {
0N/A
0N/A this.updateBytes(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Date</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the type of the designated column is not
0N/A * an SQL <code>DATE</code> or <code>TIMESTAMP</code>, or
0N/A * (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDate(int columnIndex , java.sql.Date x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateDate(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Date</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the type
0N/A * of the designated column is not an SQL <code>DATE</code> or
0N/A * <code>TIMESTAMP</code>, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateDate(String columnName , java.sql.Date x) throws SQLException {
0N/A
0N/A this.updateDate(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Time</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the type of the designated column is not
0N/A * an SQL <code>TIME</code> or <code>TIMESTAMP</code>, or
0N/A * (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTime(int columnIndex , Time x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x, columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateTime(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Time</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the type
0N/A * of the designated column is not an SQL <code>TIME</code> or
0N/A * <code>TIMESTAMP</code>, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTime(String columnName , Time x) throws SQLException {
0N/A
0N/A this.updateTime(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Timestamp</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the type of the designated column is not
0N/A * an SQL <code>DATE</code>, <code>TIME</code>, or
0N/A * <code>TIMESTAMP</code>, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTimestamp(int columnIndex , Timestamp x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateTimestamp(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Timestamp</code> object.
0N/A *
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if the given column index is out of bounds or
0N/A * the cursor is not on one of this rowset's rows or its
0N/A * insert row
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the type
0N/A * of the designated column is not an SQL <code>DATE</code>,
0N/A * <code>TIME</code>, or <code>TIMESTAMP</code>, or (4) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateTimestamp(String columnName , Timestamp x) throws SQLException {
0N/A
0N/A this.updateTimestamp(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * ASCII stream value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @param length the number of one-byte ASCII characters in the stream
0N/A * @throws SQLException if this method is invoked
0N/A */
0N/A public void updateAsciiStream(int columnIndex , java.io.InputStream x ,int length) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateAsciiStream(columnIndex,x,length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * ASCII stream value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @param length the number of one-byte ASCII characters in the stream
0N/A */
0N/A public void updateAsciiStream(String columnName , java.io.InputStream x , int length) throws SQLException {
0N/A
0N/A this.updateAsciiStream(findColumn(columnName),x,length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>java.io.Reader</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value; must be a <code>java.io.Reader</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>,
0N/A * <code>LONGVARBINARY</code>, <code>CHAR</code>, <code>VARCHAR</code>,
0N/A * or <code>LONGVARCHAR</code> data
0N/A * @param length the length of the stream in characters
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the data in the stream is not a binary or
0N/A * character type, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateCharacterStream(int columnIndex , java.io.Reader x , int length) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateCharacterStream(columnIndex,x,length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>java.io.Reader</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param reader the new column value; must be a
0N/A * <code>java.io.Reader</code> containing <code>BINARY</code>,
0N/A * <code>VARBINARY</code>, <code>LONGVARBINARY</code>, <code>CHAR</code>,
0N/A * <code>VARCHAR</code>, or <code>LONGVARCHAR</code> data
0N/A * @param length the length of the stream in characters
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the data
0N/A * in the stream is not a binary or character type, or (4) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateCharacterStream(String columnName , java.io.Reader reader, int length) throws SQLException {
0N/A this.updateCharacterStream(findColumn(columnName), reader, length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>java.io.InputStream</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value; must be a <code>java.io.InputStream</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>, or
0N/A * <code>LONGVARBINARY</code> data
0N/A * @param length the length of the stream in bytes
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, (3) the data in the stream is not binary, or
0N/A * (4) this rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBinaryStream(int columnIndex , java.io.InputStream x , int length) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateBinaryStream(columnIndex,x,length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>java.io.InputStream</code> object.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value; must be a <code>java.io.InputStream</code>
0N/A * containing <code>BINARY</code>, <code>VARBINARY</code>, or
0N/A * <code>LONGVARBINARY</code> data
0N/A * @param length the length of the stream in bytes
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, (3) the data
0N/A * in the stream is not binary, or (4) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateBinaryStream(String columnName , java.io.InputStream x, int length) throws SQLException {
0N/A
0N/A this.updateBinaryStream(findColumn(columnName),x,length);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(int columnIndex , Object x) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateObject(columnIndex,x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Object</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(String columnName , Object x) throws SQLException {
0N/A
0N/A this.updateObject(findColumn(columnName),x);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Object</code> value. The <code>scale</code> parameter indicates
0N/A * the number of digits to the right of the decimal point and is ignored
0N/A * if the new column value is not a type that will be mapped to an SQL
0N/A * <code>DECIMAL</code> or <code>NUMERIC</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnIndex the first column is <code>1</code>, the second
0N/A * is <code>2</code>, and so on; must be <code>1</code> or larger
0N/A * and equal to or less than the number of columns in this rowset
0N/A * @param x the new column value
0N/A * @param scale the number of digits to the right of the decimal point (for
0N/A * <code>DECIMAL</code> and <code>NUMERIC</code> types only)
0N/A * @throws SQLException if (1) the given column index is out of bounds,
0N/A * (2) the cursor is not on one of this rowset's rows or its
0N/A * insert row, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(int columnIndex , Object x , int scale) throws SQLException {
0N/A
0N/A boolean bool;
0N/A
0N/A if(onInsertRow) {
0N/A if(p != null) {
0N/A bool = p.evaluate(x,columnIndex);
0N/A
0N/A if(!bool) {
0N/A throw new SQLException(resBundle.handleGetObject("filteredrowsetimpl.notallowed").toString());
0N/A }
0N/A }
0N/A }
0N/A
0N/A super.updateObject(columnIndex,x,scale);
0N/A }
0N/A
0N/A /**
0N/A * Sets the designated column in either the current row or the insert
0N/A * row of this <code>CachedRowSetImpl</code> object with the given
0N/A * <code>Object</code> value. The <code>scale</code> parameter
0N/A * indicates the number of digits to the right of the decimal point
0N/A * and is ignored if the new column value is not a type that will be
0N/A * mapped to an SQL <code>DECIMAL</code> or <code>NUMERIC</code> value.
0N/A * <P>
0N/A * This method updates a column value in either the current row or
0N/A * the insert row of this rowset, but it does not update the
0N/A * database. If the cursor is on a row in the rowset, the
0N/A * method {@link #updateRow} must be called to update the database.
0N/A * If the cursor is on the insert row, the method {@link #insertRow}
0N/A * must be called, which will insert the new row into both this rowset
0N/A * and the database. Both of these methods must be called before the
0N/A * cursor moves to another row.
0N/A *
0N/A * @param columnName a <code>String</code> object that must match the
0N/A * SQL name of a column in this rowset, ignoring case
0N/A * @param x the new column value
0N/A * @param scale the number of digits to the right of the decimal point (for
0N/A * <code>DECIMAL</code> and <code>NUMERIC</code> types only)
0N/A * @throws SQLException if (1) the given column name does not match the
0N/A * name of a column in this rowset, (2) the cursor is not on
0N/A * one of this rowset's rows or its insert row, or (3) this
0N/A * rowset is <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void updateObject(String columnName , Object x, int scale) throws SQLException {
0N/A
0N/A this.updateObject(findColumn(columnName),x,scale);
0N/A }
0N/A
0N/A /**
0N/A * Inserts the contents of this <code>CachedRowSetImpl</code> object's insert
0N/A * row into this rowset immediately following the current row.
0N/A * If the current row is the
0N/A * position after the last row or before the first row, the new row will
0N/A * be inserted at the end of the rowset. This method also notifies
0N/A * listeners registered with this rowset that the row has changed.
0N/A * <P>
0N/A * The cursor must be on the insert row when this method is called.
0N/A *
0N/A * @throws SQLException if (1) the cursor is not on the insert row,
0N/A * (2) one or more of the non-nullable columns in the insert
0N/A * row has not been given a value, or (3) this rowset is
0N/A * <code>ResultSet.CONCUR_READ_ONLY</code>
0N/A */
0N/A public void insertRow() throws SQLException {
0N/A
0N/A onInsertRow = false;
0N/A super.insertRow();
0N/A }
2741N/A
2741N/A /**
2741N/A * This method re populates the resBundle
2741N/A * during the deserialization process
2741N/A *
2741N/A */
2741N/A private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
2741N/A // Default state initialization happens here
2741N/A ois.defaultReadObject();
2741N/A // Initialization of transient Res Bundle happens here .
2741N/A try {
2741N/A resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle();
2741N/A } catch(IOException ioe) {
2741N/A throw new RuntimeException(ioe);
2741N/A }
2741N/A
2741N/A }
2741N/A
2741N/A static final long serialVersionUID = 6178454588413509360L;
0N/A} // end FilteredRowSetImpl class