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