/* * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.rowset; import java.sql.*; import javax.sql.*; import javax.naming.*; import java.io.*; import java.math.*; import java.util.*; import javax.sql.rowset.*; /** * The standard implementation of the {@code JdbcRowSet} interface. See the interface * definition for full behavior and implementation requirements. * * @author Jonathan Bruce, Amit Handa */ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { /** * The {@code Connection} object that is this rowset's * current connection to the database. This field is set * internally when the connection is established. */ private Connection conn; /** * The {@code PreparedStatement} object that is this rowset's * current command. This field is set internally when the method * {@code execute} creates the {@code PreparedStatement} * object. */ private PreparedStatement ps; /** * The {@code ResultSet} object that is this rowset's * current result set. This field is set internally when the method * {@code execute} executes the rowset's command and thereby * creates the rowset's {@code ResultSet} object. */ private ResultSet rs; /** * The {@code RowSetMetaDataImpl} object that is constructed when * a {@code ResultSet} object is passed to the {@code JdbcRowSet} * constructor. This helps in constructing all metadata associated * with the {@code ResultSet} object using the setter methods of * {@code RowSetMetaDataImpl}. */ private RowSetMetaDataImpl rowsMD; /** * The {@code ResultSetMetaData} object from which this * {@code RowSetMetaDataImpl} is formed and which helps in getting * the metadata information. */ private ResultSetMetaData resMD; /** * The Vector holding the Match Columns */ private Vector iMatchColumns; /** * The Vector that will hold the Match Column names. */ private Vector strMatchColumns; protected transient JdbcRowSetResourceBundle resBundle; /** * Constructs a default {@code JdbcRowSet} object. * The new instance of {@code JdbcRowSet} will serve as a proxy * for the {@code ResultSet} object it creates, and by so doing, * it will make it possible to use the result set as a JavaBeans * component. *

* The following is true of a default {@code JdbcRowSet} instance: *

* A newly created {@code JdbcRowSet} object must have its * {@code execute} method invoked before other public methods * are called on it; otherwise, such method calls will cause an * exception to be thrown. * * @throws SQLException [1] if any of its public methods are called prior * to calling the {@code execute} method; [2] if invalid JDBC driver * properties are set or [3] if no connection to a data source exists. */ public JdbcRowSetImpl() { conn = null; ps = null; rs = null; try { resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } initParams(); // set the defaults try { setShowDeleted(false); } catch(SQLException sqle) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setshowdeleted").toString() + sqle.getLocalizedMessage()); } try { setQueryTimeout(0); } catch(SQLException sqle) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + sqle.getLocalizedMessage()); } try { setMaxRows(0); } catch(SQLException sqle) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + sqle.getLocalizedMessage()); } try { setMaxFieldSize(0); } catch(SQLException sqle) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + sqle.getLocalizedMessage()); } try { setEscapeProcessing(true); } catch(SQLException sqle) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + sqle.getLocalizedMessage()); } try { setConcurrency(ResultSet.CONCUR_UPDATABLE); } catch (SQLException sqle) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setconcurrency").toString() + sqle.getLocalizedMessage()); } setTypeMap(null); try { setType(ResultSet.TYPE_SCROLL_INSENSITIVE); } catch(SQLException sqle){ System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settype").toString() + sqle.getLocalizedMessage()); } setReadOnly(true); try { setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); } catch(SQLException sqle){ System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settransactionisolation").toString() + sqle.getLocalizedMessage()); } //Instantiating the vector for MatchColumns iMatchColumns = new Vector(10); for(int i = 0; i < 10 ; i++) { iMatchColumns.add(i,Integer.valueOf(-1)); } strMatchColumns = new Vector(10); for(int j = 0; j < 10; j++) { strMatchColumns.add(j,null); } } /** * Constructs a default {@code JdbcRowSet} object given a * valid {@code Connection} object. The new * instance of {@code JdbcRowSet} will serve as a proxy for * the {@code ResultSet} object it creates, and by so doing, * it will make it possible to use the result set as a JavaBeans * component. *

* The following is true of a default {@code JdbcRowSet} instance: *

    *
  • Does not show deleted rows *
  • Has no time limit for how long a driver may take to * execute the rowset's command *
  • Has no limit for the number of rows it may contain *
  • Has no limit for the number of bytes a column may contain *
  • Has a scrollable cursor and does not show changes * made by others *
  • Will not see uncommitted data (make "dirty" reads) *
  • Has escape processing turned on *
  • Has its connection's type map set to {@code null} *
  • Has an empty {@code Hashtable} object for storing any * parameters that are set *
* A newly created {@code JdbcRowSet} object must have its * {@code execute} method invoked before other public methods * are called on it; otherwise, such method calls will cause an * exception to be thrown. * * @throws SQLException [1] if any of its public methods are called prior * to calling the {@code execute} method, [2] if invalid JDBC driver * properties are set, or [3] if no connection to a data source exists. */ public JdbcRowSetImpl(Connection con) throws SQLException { conn = con; ps = null; rs = null; try { resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } initParams(); // set the defaults setShowDeleted(false); setQueryTimeout(0); setMaxRows(0); setMaxFieldSize(0); setParams(); setReadOnly(true); setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); setEscapeProcessing(true); setTypeMap(null); //Instantiating the vector for MatchColumns iMatchColumns = new Vector(10); for(int i = 0; i < 10 ; i++) { iMatchColumns.add(i,Integer.valueOf(-1)); } strMatchColumns = new Vector(10); for(int j = 0; j < 10; j++) { strMatchColumns.add(j,null); } } /** * Constructs a default {@code JdbcRowSet} object using the * URL, username, and password arguments supplied. The new * instance of {@code JdbcRowSet} will serve as a proxy for * the {@code ResultSet} object it creates, and by so doing, * it will make it possible to use the result set as a JavaBeans * component. * *

* The following is true of a default {@code JdbcRowSet} instance: *

    *
  • Does not show deleted rows *
  • Has no time limit for how long a driver may take to * execute the rowset's command *
  • Has no limit for the number of rows it may contain *
  • Has no limit for the number of bytes a column may contain *
  • Has a scrollable cursor and does not show changes * made by others *
  • Will not see uncommitted data (make "dirty" reads) *
  • Has escape processing turned on *
  • Has its connection's type map set to {@code null} *
  • Has an empty {@code Hashtable} object for storing any * parameters that are set *
* * @param url a JDBC URL for the database to which this {@code JdbcRowSet} * object will be connected. The form for a JDBC URL is * {@code jdbc:subprotocol:subname}. * @param user the database user on whose behalf the connection * is being made * @param password the user's password * * @throws SQLException if a database access error occurs * */ public JdbcRowSetImpl(String url, String user, String password) throws SQLException { conn = null; ps = null; rs = null; try { resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } initParams(); // Pass the arguments to BaseRowSet // setter methods now. setUsername(user); setPassword(password); setUrl(url); // set the defaults setShowDeleted(false); setQueryTimeout(0); setMaxRows(0); setMaxFieldSize(0); setParams(); setReadOnly(true); setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); setEscapeProcessing(true); setTypeMap(null); //Instantiating the vector for MatchColumns iMatchColumns = new Vector(10); for(int i = 0; i < 10 ; i++) { iMatchColumns.add(i,Integer.valueOf(-1)); } strMatchColumns = new Vector(10); for(int j = 0; j < 10; j++) { strMatchColumns.add(j,null); } } /** * Constructs a {@code JdbcRowSet} object using the given valid * {@code ResultSet} object. The new * instance of {@code JdbcRowSet} will serve as a proxy for * the {@code ResultSet} object, and by so doing, * it will make it possible to use the result set as a JavaBeans * component. * *

* The following is true of a default {@code JdbcRowSet} instance: *

    *
  • Does not show deleted rows *
  • Has no time limit for how long a driver may take to * execute the rowset's command *
  • Has no limit for the number of rows it may contain *
  • Has no limit for the number of bytes a column may contain *
  • Has a scrollable cursor and does not show changes * made by others *
  • Will not see uncommitted data (make "dirty" reads) *
  • Has escape processing turned on *
  • Has its connection's type map set to {@code null} *
  • Has an empty {@code Hashtable} object for storing any * parameters that are set *
* * @param res a valid {@code ResultSet} object * * @throws SQLException if a database access occurs due to a non * valid ResultSet handle. */ public JdbcRowSetImpl(ResultSet res) throws SQLException { // A ResultSet handle encapsulates a connection handle. // But there is no way we can retrieve a Connection handle // from a ResultSet object. // So to avoid any anomalies we keep the conn = null // The passed rs handle will be a wrapper around for // "this" object's all operations. conn = null; ps = null; rs = res; try { resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } initParams(); // get the values from the resultset handle. setShowDeleted(false); setQueryTimeout(0); setMaxRows(0); setMaxFieldSize(0); setParams(); setReadOnly(true); setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); setEscapeProcessing(true); setTypeMap(null); // Get a handle to ResultSetMetaData // Construct RowSetMetaData out of it. resMD = rs.getMetaData(); rowsMD = new RowSetMetaDataImpl(); initMetaData(rowsMD, resMD); //Instantiating the vector for MatchColumns iMatchColumns = new Vector(10); for(int i = 0; i < 10 ; i++) { iMatchColumns.add(i,Integer.valueOf(-1)); } strMatchColumns = new Vector(10); for(int j = 0; j < 10; j++) { strMatchColumns.add(j,null); } } /** * Initializes the given {@code RowSetMetaData} object with the values * in the given {@code ResultSetMetaData} object. * * @param md the {@code RowSetMetaData} object for this * {@code JdbcRowSetImpl} object, which will be set with * values from rsmd * @param rsmd the {@code ResultSetMetaData} object from which new * values for md will be read * @throws SQLException if an error occurs */ protected void initMetaData(RowSetMetaData md, ResultSetMetaData rsmd) throws SQLException { int numCols = rsmd.getColumnCount(); md.setColumnCount(numCols); for (int col=1; col <= numCols; col++) { md.setAutoIncrement(col, rsmd.isAutoIncrement(col)); md.setCaseSensitive(col, rsmd.isCaseSensitive(col)); md.setCurrency(col, rsmd.isCurrency(col)); md.setNullable(col, rsmd.isNullable(col)); md.setSigned(col, rsmd.isSigned(col)); md.setSearchable(col, rsmd.isSearchable(col)); md.setColumnDisplaySize(col, rsmd.getColumnDisplaySize(col)); md.setColumnLabel(col, rsmd.getColumnLabel(col)); md.setColumnName(col, rsmd.getColumnName(col)); md.setSchemaName(col, rsmd.getSchemaName(col)); md.setPrecision(col, rsmd.getPrecision(col)); md.setScale(col, rsmd.getScale(col)); md.setTableName(col, rsmd.getTableName(col)); md.setCatalogName(col, rsmd.getCatalogName(col)); md.setColumnType(col, rsmd.getColumnType(col)); md.setColumnTypeName(col, rsmd.getColumnTypeName(col)); } } protected void checkState() throws SQLException { // If all the three i.e. conn, ps & rs are // simultaneously null implies we are not connected // to the db, implies undesirable state so throw exception if (conn == null && ps == null && rs == null ) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.invalstate").toString()); } } //--------------------------------------------------------------------- // Reading and writing data //--------------------------------------------------------------------- /** * Creates the internal {@code ResultSet} object for which this * {@code JdbcRowSet} object is a wrapper, effectively * making the result set a JavaBeans component. *

* Certain properties must have been set before this method is called * so that it can establish a connection to a database and execute the * query that will create the result set. If a {@code DataSource} * object will be used to create the connection, properties for the * data source name, user name, and password must be set. If the * {@code DriverManager} will be used, the properties for the * URL, user name, and password must be set. In either case, the * property for the command must be set. If the command has placeholder * parameters, those must also be set. This method throws * an exception if the required properties are not set. *

* Other properties have default values that may optionally be set * to new values. The {@code execute} method will use the value * for the command property to create a {@code PreparedStatement} * object and set its properties (escape processing, maximum field * size, maximum number of rows, and query timeout limit) to be those * of this rowset. * * @throws SQLException if (1) a database access error occurs, * (2) any required JDBC properties are not set, or (3) if an * invalid connection exists. */ public void execute() throws SQLException { /* * To execute based on the properties: * i) determine how to get a connection * ii) prepare the statement * iii) set the properties of the statement * iv) parse the params. and set them * v) execute the statement * * During all of this try to tolerate as many errors * as possible, many drivers will not support all of * the properties and will/should throw SQLException * at us... * */ prepare(); // set the properties of our shiny new statement setProperties(ps); // set the parameters decodeParams(getParams(), ps); // execute the statement rs = ps.executeQuery(); // notify listeners notifyRowSetChanged(); } protected void setProperties(PreparedStatement ps) throws SQLException { try { ps.setEscapeProcessing(getEscapeProcessing()); } catch (SQLException ex) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + ex.getLocalizedMessage()); } try { ps.setMaxFieldSize(getMaxFieldSize()); } catch (SQLException ex) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + ex.getLocalizedMessage()); } try { ps.setMaxRows(getMaxRows()); } catch (SQLException ex) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + ex.getLocalizedMessage()); } try { ps.setQueryTimeout(getQueryTimeout()); } catch (SQLException ex) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + ex.getLocalizedMessage()); } } private Connection connect() throws SQLException { // Get a JDBC connection. // First check for Connection handle object as such if // "this" initialized using conn. if(conn != null) { return conn; } else if (getDataSourceName() != null) { // Connect using JNDI. try { Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup (getDataSourceName()); //return ds.getConnection(getUsername(),getPassword()); if(getUsername() != null && !getUsername().isEmpty()) { return ds.getConnection(getUsername(),getPassword()); } else { return ds.getConnection(); } } catch (javax.naming.NamingException ex) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.connect").toString()); } } else if (getUrl() != null) { // Check only for getUrl() != null because // user, passwd can be null // Connect using the driver manager. return DriverManager.getConnection (getUrl(), getUsername(), getPassword()); } else { return null; } } protected PreparedStatement prepare() throws SQLException { // get a connection conn = connect(); try { Map> aMap = getTypeMap(); if( aMap != null) { conn.setTypeMap(aMap); } ps = conn.prepareStatement(getCommand(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); } catch (SQLException ex) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.prepare").toString() + ex.getLocalizedMessage()); if (ps != null) ps.close(); if (conn != null) conn.close(); throw new SQLException(ex.getMessage()); } return ps; } @SuppressWarnings("deprecation") private void decodeParams(Object[] params, PreparedStatement ps) throws SQLException { // There is a corresponding decodeParams in JdbcRowSetImpl // which does the same as this method. This is a design flaw. // Update the CachedRowsetReader.decodeParams when you update // this method. // Adding the same comments to CachedRowsetReader.decodeParams. int arraySize; Object[] param = null; for (int i=0; i < params.length; i++) { if (params[i] instanceof Object[]) { param = (Object[])params[i]; if (param.length == 2) { if (param[0] == null) { ps.setNull(i + 1, ((Integer)param[1]).intValue()); continue; } if (param[0] instanceof java.sql.Date || param[0] instanceof java.sql.Time || param[0] instanceof java.sql.Timestamp) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detecteddate")); if (param[1] instanceof java.util.Calendar) { System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detectedcalendar")); ps.setDate(i + 1, (java.sql.Date)param[0], (java.util.Calendar)param[1]); continue; } else { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); } } if (param[0] instanceof Reader) { ps.setCharacterStream(i + 1, (Reader)param[0], ((Integer)param[1]).intValue()); continue; } /* * What's left should be setObject(int, Object, scale) */ if (param[1] instanceof Integer) { ps.setObject(i + 1, param[0], ((Integer)param[1]).intValue()); continue; } } else if (param.length == 3) { if (param[0] == null) { ps.setNull(i + 1, ((Integer)param[1]).intValue(), (String)param[2]); continue; } if (param[0] instanceof java.io.InputStream) { switch (((Integer)param[2]).intValue()) { case JdbcRowSetImpl.UNICODE_STREAM_PARAM: ps.setUnicodeStream(i + 1, (java.io.InputStream)param[0], ((Integer)param[1]).intValue()); break; case JdbcRowSetImpl.BINARY_STREAM_PARAM: ps.setBinaryStream(i + 1, (java.io.InputStream)param[0], ((Integer)param[1]).intValue()); break; case JdbcRowSetImpl.ASCII_STREAM_PARAM: ps.setAsciiStream(i + 1, (java.io.InputStream)param[0], ((Integer)param[1]).intValue()); break; default: throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); } } /* * no point at looking at the first element now; * what's left must be the setObject() cases. */ if (param[1] instanceof Integer && param[2] instanceof Integer) { ps.setObject(i + 1, param[0], ((Integer)param[1]).intValue(), ((Integer)param[2]).intValue()); continue; } throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); } else { // common case - this catches all SQL92 types ps.setObject(i + 1, params[i]); continue; } } else { // Try to get all the params to be set here ps.setObject(i + 1, params[i]); } } } /** * Moves the cursor for this rowset's {@code ResultSet} * object down one row from its current position. * A {@code ResultSet} cursor is initially positioned * before the first row; the first call to the method * {@code next} makes the first row the current row; the * second call makes the second row the current row, and so on. * *

If an input stream is open for the current row, a call * to the method {@code next} will * implicitly close it. A {@code ResultSet} object's * warning chain is cleared when a new row is read. * * @return {@code true} if the new current row is valid; * {@code false} if there are no more rows * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public boolean next() throws SQLException { checkState(); boolean b = rs.next(); notifyCursorMoved(); return b; } /** * Releases this rowset's {@code ResultSet} object's database and * JDBC resources immediately instead of waiting for * this to happen when it is automatically closed. * *

Note: A {@code ResultSet} object * is automatically closed by the * {@code Statement} object that generated it when * that {@code Statement} object is closed, * re-executed, or is used to retrieve the next result from a * sequence of multiple results. A {@code ResultSet} object * is also automatically closed when it is garbage collected. * * @throws SQLException if a database access error occurs */ public void close() throws SQLException { if (rs != null) rs.close(); if (ps != null) ps.close(); if (conn != null) conn.close(); } /** * Reports whether the last column read from this rowset's * {@code ResultSet} object had a value of SQL {@code NULL}. * Note that you must first call one of the {@code getXXX} methods * on a column to try to read its value and then call * the method {@code wasNull} to see if the value read was * SQL {@code NULL}. * * @return {@code true} if the last column value read was SQL * {@code NULL} and {@code false} otherwise * @throws SQLException if a database access error occurs * or this rowset does not have a currently valid connection, * prepared statement, and result set */ public boolean wasNull() throws SQLException { checkState(); return rs.wasNull(); } //====================================================================== // Methods for accessing results by column index //====================================================================== /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code String}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public String getString(int columnIndex) throws SQLException { checkState(); return rs.getString(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code boolean}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code false} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public boolean getBoolean(int columnIndex) throws SQLException { checkState(); return rs.getBoolean(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code byte}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public byte getByte(int columnIndex) throws SQLException { checkState(); return rs.getByte(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code short}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public short getShort(int columnIndex) throws SQLException { checkState(); return rs.getShort(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * an {@code int}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public int getInt(int columnIndex) throws SQLException { checkState(); return rs.getInt(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code long}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public long getLong(int columnIndex) throws SQLException { checkState(); return rs.getLong(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code float}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public float getFloat(int columnIndex) throws SQLException { checkState(); return rs.getFloat(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code double}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public double getDouble(int columnIndex) throws SQLException { checkState(); return rs.getDouble(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.BigDecimal}. * * @param columnIndex the first column is 1, the second is 2, and so on * @param scale the number of digits to the right of the decimal point * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set * @deprecated */ @Deprecated public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException { checkState(); return rs.getBigDecimal(columnIndex, scale); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code byte} array in the Java programming language. * The bytes represent the raw values returned by the driver. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public byte[] getBytes(int columnIndex) throws SQLException { checkState(); return rs.getBytes(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.Date} object in the Java programming language. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.sql.Date getDate(int columnIndex) throws SQLException { checkState(); return rs.getDate(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.Time} object in the Java programming language. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.sql.Time getTime(int columnIndex) throws SQLException { checkState(); return rs.getTime(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.Timestamp} object in the Java programming language. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException { checkState(); return rs.getTimestamp(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a stream of ASCII characters. The value can then be read in chunks from the * stream. This method is particularly * suitable for retrieving large {@code LONGVARCHAR} values. * The JDBC driver will * do any necessary conversion from the database format into ASCII. * *

Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next * call to a {@code getXXX} method implicitly closes the stream. Also, a * stream may return {@code 0} when the method * {@code InputStream.available} * is called whether there is data available or not. * * @param columnIndex the first column is 1, the second is 2, and so on * @return a Java input stream that delivers the database column value * as a stream of one-byte ASCII characters; * if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) database access error occurs * (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException { checkState(); return rs.getAsciiStream(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * as a stream of Unicode characters. * The value can then be read in chunks from the * stream. This method is particularly * suitable for retrieving large{@code LONGVARCHAR}values. The JDBC driver will * do any necessary conversion from the database format into Unicode. * The byte format of the Unicode stream must be Java UTF-8, * as specified in the Java virtual machine specification. * *

Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next * call to a {@code getXXX} method implicitly closes the stream. Also, a * stream may return {@code 0} when the method * {@code InputStream.available} * is called whether there is data available or not. * * @param columnIndex the first column is 1, the second is 2, and so on * @return a Java input stream that delivers the database column value * as a stream in Java UTF-8 byte format; * if the value is SQL {@code NULL}, the value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set * @deprecated use {@code getCharacterStream} in place of * {@code getUnicodeStream} */ @Deprecated public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException { checkState(); return rs.getUnicodeStream(columnIndex); } /** * Gets the value of a column in the current row as a stream of * the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a binary stream of * uninterpreted bytes. The value can then be read in chunks from the * stream. This method is particularly * suitable for retrieving large {@code LONGVARBINARY} values. * *

Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next * call to a {@code getXXX} method implicitly closes the stream. Also, a * stream may return {@code 0} when the method * {@code InputStream.available} * is called whether there is data available or not. * * @param columnIndex the first column is 1, the second is 2, and so on * @return a Java input stream that delivers the database column value * as a stream of uninterpreted bytes; * if the value is SQL {@code NULL}, the value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException { checkState(); return rs.getBinaryStream(columnIndex); } //====================================================================== // Methods for accessing results by column name //====================================================================== /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code String}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public String getString(String columnName) throws SQLException { return getString(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code boolean}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code false} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public boolean getBoolean(String columnName) throws SQLException { return getBoolean(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code byte}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public byte getByte(String columnName) throws SQLException { return getByte(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code short}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public short getShort(String columnName) throws SQLException { return getShort(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * an {@code int}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public int getInt(String columnName) throws SQLException { return getInt(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code long}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if a database access error occurs * or this rowset does not have a currently valid connection, * prepared statement, and result set */ public long getLong(String columnName) throws SQLException { return getLong(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code float}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public float getFloat(String columnName) throws SQLException { return getFloat(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code double}. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code 0} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public double getDouble(String columnName) throws SQLException { return getDouble(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.math.BigDecimal}. * * @param columnName the SQL name of the column * @param scale the number of digits to the right of the decimal point * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) adatabase access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set * @deprecated */ @Deprecated public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException { return getBigDecimal(findColumn(columnName), scale); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code byte} array in the Java programming language. * The bytes represent the raw values returned by the driver. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public byte[] getBytes(String columnName) throws SQLException { return getBytes(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.Date} object in the Java programming language. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.sql.Date getDate(String columnName) throws SQLException { return getDate(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.Time} object in the Java programming language. * * @param columnName the SQL name of the column * @return the column value; * if the value is SQL {@code NULL}, * the value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.sql.Time getTime(String columnName) throws SQLException { return getTime(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * a {@code java.sql.Timestamp} object. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.sql.Timestamp getTimestamp(String columnName) throws SQLException { return getTimestamp(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a stream of * ASCII characters. The value can then be read in chunks from the * stream. This method is particularly * suitable for retrieving large {@code LONGVARCHAR} values. * The JDBC driver will * do any necessary conversion from the database format into ASCII. * *

Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next * call to a {@code getXXX} method implicitly closes the stream. Also, a * stream may return {@code 0} when the method {@code available} * is called whether there is data available or not. * * @param columnName the SQL name of the column * @return a Java input stream that delivers the database column value * as a stream of one-byte ASCII characters. * If the value is SQL {@code NULL}, * the value returned is {@code null}. * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.io.InputStream getAsciiStream(String columnName) throws SQLException { return getAsciiStream(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a stream of * Unicode characters. The value can then be read in chunks from the * stream. This method is particularly * suitable for retrieving large {@code LONGVARCHAR} values. * The JDBC driver will * do any necessary conversion from the database format into Unicode. * The byte format of the Unicode stream must be Java UTF-8, * as defined in the Java virtual machine specification. * *

Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next * call to a {@code getXXX} method implicitly closes the stream. Also, a * stream may return {@code 0} when the method {@code available} * is called whether there is data available or not. * * @param columnName the SQL name of the column * @return a Java input stream that delivers the database column value * as a stream of two-byte Unicode characters. * If the value is SQL {@code NULL}, * the value returned is {@code null}. * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set * @deprecated */ @Deprecated public java.io.InputStream getUnicodeStream(String columnName) throws SQLException { return getUnicodeStream(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a stream of uninterpreted * {@code byte}s. * The value can then be read in chunks from the * stream. This method is particularly * suitable for retrieving large {@code LONGVARBINARY} * values. * *

Note: All the data in the returned stream must be * read prior to getting the value of any other column. The next * call to a {@code getXXX} method implicitly closes the stream. Also, a * stream may return {@code 0} when the method {@code available} * is called whether there is data available or not. * * @param columnName the SQL name of the column * @return a Java input stream that delivers the database column value * as a stream of uninterpreted bytes; * if the value is SQL {@code NULL}, the result is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public java.io.InputStream getBinaryStream(String columnName) throws SQLException { return getBinaryStream(findColumn(columnName)); } //===================================================================== // Advanced features: //===================================================================== /** * Returns the first warning reported by calls on this rowset's * {@code ResultSet} object. * Subsequent warnings on this rowset's {@code ResultSet} object * will be chained to the {@code SQLWarning} object that * this method returns. * *

The warning chain is automatically cleared each time a new * row is read. * *

Note: This warning chain only covers warnings caused * by {@code ResultSet} methods. Any warning caused by * {@code Statement} methods * (such as reading OUT parameters) will be chained on the * {@code Statement} object. * * @return the first {@code SQLWarning} object reported or {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public SQLWarning getWarnings() throws SQLException { checkState(); return rs.getWarnings(); } /** * Clears all warnings reported on this rowset's {@code ResultSet} object. * After this method is called, the method {@code getWarnings} * returns {@code null} until a new warning is * reported for this rowset's {@code ResultSet} object. * * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public void clearWarnings() throws SQLException { checkState(); rs.clearWarnings(); } /** * Gets the name of the SQL cursor used by this rowset's {@code ResultSet} * object. * *

In SQL, a result table is retrieved through a cursor that is * named. The current row of a result set can be updated or deleted * using a positioned update/delete statement that references the * cursor name. To insure that the cursor has the proper isolation * level to support update, the cursor's {@code select} statement should be * of the form 'select for update'. If the 'for update' clause is * omitted, the positioned updates may fail. * *

The JDBC API supports this SQL feature by providing the name of the * SQL cursor used by a {@code ResultSet} object. * The current row of a {@code ResultSet} object * is also the current row of this SQL cursor. * *

Note: If positioned update is not supported, a * {@code SQLException} is thrown. * * @return the SQL name for this rowset's {@code ResultSet} object's cursor * @throws SQLException if (1) a database access error occurs * or (2) xthis rowset does not have a currently valid connection, * prepared statement, and result set */ public String getCursorName() throws SQLException { checkState(); return rs.getCursorName(); } /** * Retrieves the number, types and properties of * this rowset's {@code ResultSet} object's columns. * * @return the description of this rowset's {@code ResultSet} * object's columns * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public ResultSetMetaData getMetaData() throws SQLException { checkState(); // It may be the case that JdbcRowSet might not have been // initialized with ResultSet handle and may be by PreparedStatement // internally when we set JdbcRowSet.setCommand(). // We may require all the basic properties of setEscapeProcessing // setMaxFieldSize etc. which an application can use before we call // execute. try { checkState(); } catch(SQLException sqle) { prepare(); // will return ResultSetMetaData return ps.getMetaData(); } return rs.getMetaData(); } /** *

Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * an {@code Object}. * *

This method will return the value of the given column as a * Java object. The type of the Java object will be the default * Java object type corresponding to the column's SQL type, * following the mapping for built-in types specified in the JDBC * specification. * *

This method may also be used to read datatabase-specific * abstract data types. * * In the JDBC 3.0 API, the behavior of method * {@code getObject} is extended to materialize * data of SQL user-defined types. When a column contains * a structured or distinct value, the behavior of this method is as * if it were a call to: {@code getObject(columnIndex, * this.getStatement().getConnection().getTypeMap())}. * * @param columnIndex the first column is 1, the second is 2, and so on * @return a {@code java.lang.Object} holding the column value * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Object getObject(int columnIndex) throws SQLException { checkState(); return rs.getObject(columnIndex); } /** *

Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as * an {@code Object}. * *

This method will return the value of the given column as a * Java object. The type of the Java object will be the default * Java object type corresponding to the column's SQL type, * following the mapping for built-in types specified in the JDBC * specification. * *

This method may also be used to read datatabase-specific * abstract data types. * * In the JDBC 3.0 API, the behavior of the method * {@code getObject} is extended to materialize * data of SQL user-defined types. When a column contains * a structured or distinct value, the behavior of this method is as * if it were a call to: {@code getObject(columnIndex, * this.getStatement().getConnection().getTypeMap())}. * * @param columnName the SQL name of the column * @return a {@code java.lang.Object} holding the column value * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Object getObject(String columnName) throws SQLException { return getObject(findColumn(columnName)); } //---------------------------------------------------------------- /** * Maps the given {@code JdbcRowSetImpl} column name to its * {@code JdbcRowSetImpl} column index and reflects this on * the internal {@code ResultSet} object. * * @param columnName the name of the column * @return the column index of the given column name * @throws SQLException if (1) a database access error occurs * (2) this rowset does not have a currently valid connection, * prepared statement, and result set */ public int findColumn(String columnName) throws SQLException { checkState(); return rs.findColumn(columnName); } //--------------------------JDBC 2.0----------------------------------- //--------------------------------------------------------------------- // Getters and Setters //--------------------------------------------------------------------- /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a * {@code java.io.Reader} object. * @return a {@code java.io.Reader} object that contains the column * value; if the value is SQL {@code NULL}, the value returned is * {@code null}. * @param columnIndex the first column is 1, the second is 2, and so on * */ public java.io.Reader getCharacterStream(int columnIndex) throws SQLException { checkState(); return rs.getCharacterStream(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a * {@code java.io.Reader} object. * * @return a {@code java.io.Reader} object that contains the column * value; if the value is SQL {@code NULL}, the value returned is * {@code null}. * @param columnName the name of the column * @return the value in the specified column as a {@code java.io.Reader} * */ public java.io.Reader getCharacterStream(String columnName) throws SQLException { return getCharacterStream(findColumn(columnName)); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a * {@code java.math.BigDecimal} with full precision. * * @param columnIndex the first column is 1, the second is 2, and so on * @return the column value (full precision); * if the value is SQL {@code NULL}, the value returned is * {@code null}. * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid * connection, prepared statement, and result set */ public BigDecimal getBigDecimal(int columnIndex) throws SQLException { checkState(); return rs.getBigDecimal(columnIndex); } /** * Gets the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a * {@code java.math.BigDecimal} with full precision. * * @param columnName the column name * @return the column value (full precision); * if the value is SQL {@code NULL}, the value returned is * {@code null}. * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid * connection, prepared statement, and result set */ public BigDecimal getBigDecimal(String columnName) throws SQLException { return getBigDecimal(findColumn(columnName)); } //--------------------------------------------------------------------- // Traversal/Positioning //--------------------------------------------------------------------- /** * Indicates whether the cursor is before the first row in * this rowset's {@code ResultSet} object. * * @return {@code true} if the cursor is before the first row; * {@code false} if the cursor is at any other position or the * result set contains no rows * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid * connection, prepared statement, and result set */ public boolean isBeforeFirst() throws SQLException { checkState(); return rs.isBeforeFirst(); } /** * Indicates whether the cursor is after the last row in * this rowset's {@code ResultSet} object. * * @return {@code true} if the cursor is after the last row; * {@code false} if the cursor is at any other position or the * result set contains no rows * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid * connection, prepared statement, and result set */ public boolean isAfterLast() throws SQLException { checkState(); return rs.isAfterLast(); } /** * Indicates whether the cursor is on the first row of * this rowset's {@code ResultSet} object. * * @return {@code true} if the cursor is on the first row; * {@code false} otherwise * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid * connection, prepared statement, and result set */ public boolean isFirst() throws SQLException { checkState(); return rs.isFirst(); } /** * Indicates whether the cursor is on the last row of * this rowset's {@code ResultSet} object. * Note: Calling the method {@code isLast} may be expensive * because the JDBC driver * might need to fetch ahead one row in order to determine * whether the current row is the last row in the result set. * * @return {@code true} if the cursor is on the last row; * {@code false} otherwise * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid * connection, prepared statement, and result set * */ public boolean isLast() throws SQLException { checkState(); return rs.isLast(); } /** * Moves the cursor to the front of * this rowset's {@code ResultSet} object, just before the * first row. This method has no effect if the result set contains no rows. * * @throws SQLException if (1) a database access error occurs, * (2) the result set type is {@code TYPE_FORWARD_ONLY}, * or (3) this rowset does not currently have a valid * connection, prepared statement, and result set */ public void beforeFirst() throws SQLException { checkState(); rs.beforeFirst(); notifyCursorMoved(); } /** * Moves the cursor to the end of * this rowset's {@code ResultSet} object, just after the * last row. This method has no effect if the result set contains no rows. * @throws SQLException if (1) a database access error occurs, * (2) the result set type is {@code TYPE_FORWARD_ONLY}, * or (3) this rowset does not currently have a valid * connection, prepared statement, and result set */ public void afterLast() throws SQLException { checkState(); rs.afterLast(); notifyCursorMoved(); } /** * Moves the cursor to the first row in * this rowset's {@code ResultSet} object. * * @return {@code true} if the cursor is on a valid row; * {@code false} if there are no rows in the result set * @throws SQLException if (1) a database access error occurs, * (2) the result set type is {@code TYPE_FORWARD_ONLY}, * or (3) this rowset does not currently have a valid * connection, prepared statement, and result set */ public boolean first() throws SQLException { checkState(); boolean b = rs.first(); notifyCursorMoved(); return b; } /** * Moves the cursor to the last row in * this rowset's {@code ResultSet} object. * * @return {@code true} if the cursor is on a valid row; * {@code false} if there are no rows in the result set * @throws SQLException if (1) a database access error occurs, * (2) the result set type is {@code TYPE_FORWARD_ONLY}, * or (3) this rowset does not currently have a valid * connection, prepared statement, and result set */ public boolean last() throws SQLException { checkState(); boolean b = rs.last(); notifyCursorMoved(); return b; } /** * Retrieves the current row number. The first row is number 1, the * second is number 2, and so on. * * @return the current row number; {@code 0} if there is no current row * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public int getRow() throws SQLException { checkState(); return rs.getRow(); } /** * Moves the cursor to the given row number in * this rowset's internal {@code ResultSet} object. * *

If the row number is positive, the cursor moves to * the given row number with respect to the * beginning of the result set. The first row is row 1, the second * is row 2, and so on. * *

If the given row number is negative, the cursor moves to * an absolute row position with respect to * the end of the result set. For example, calling the method * {@code absolute(-1)} positions the * cursor on the last row, calling the method {@code absolute(-2)} * moves the cursor to the next-to-last row, and so on. * *

An attempt to position the cursor beyond the first/last row in * the result set leaves the cursor before the first row or after * the last row. * *

Note: Calling {@code absolute(1)} is the same * as calling {@code first()}. Calling {@code absolute(-1)} * is the same as calling {@code last()}. * * @return {@code true} if the cursor is on the result set; * {@code false} otherwise * @throws SQLException if (1) a database access error occurs, * (2) the row is {@code 0}, (3) the result set * type is {@code TYPE_FORWARD_ONLY}, or (4) this * rowset does not currently have a valid connection, * prepared statement, and result set */ public boolean absolute(int row) throws SQLException { checkState(); boolean b = rs.absolute(row); notifyCursorMoved(); return b; } /** * Moves the cursor a relative number of rows, either positive or negative. * Attempting to move beyond the first/last row in the * result set positions the cursor before/after the * the first/last row. Calling {@code relative(0)} is valid, but does * not change the cursor position. * *

Note: Calling the method {@code relative(1)} * is different from calling the method {@code next()} * because is makes sense to call {@code next()} when there * is no current row, * for example, when the cursor is positioned before the first row * or after the last row of the result set. * * @return {@code true} if the cursor is on a row; * {@code false} otherwise * @throws SQLException if (1) a database access error occurs, * (2) there is no current row, (3) the result set * type is {@code TYPE_FORWARD_ONLY}, or (4) this * rowset does not currently have a valid connection, * prepared statement, and result set */ public boolean relative(int rows) throws SQLException { checkState(); boolean b = rs.relative(rows); notifyCursorMoved(); return b; } /** * Moves the cursor to the previous row in this * {@code ResultSet} object. * *

Note: Calling the method {@code previous()} is not the same as * calling the method {@code relative(-1)} because it * makes sense to call {@code previous()} when there is no current row. * * @return {@code true} if the cursor is on a valid row; * {@code false} if it is off the result set * @throws SQLException if (1) a database access error occurs, * (2) the result set type is {@code TYPE_FORWARD_ONLY}, * or (3) this rowset does not currently have a valid * connection, prepared statement, and result set */ public boolean previous() throws SQLException { checkState(); boolean b = rs.previous(); notifyCursorMoved(); return b; } /** * Gives a hint as to the direction in which the rows in this * {@code ResultSet} object will be processed. * The initial value is determined by the * {@code Statement} object * that produced this rowset's {@code ResultSet} object. * The fetch direction may be changed at any time. * * @throws SQLException if (1) a database access error occurs, * (2) the result set type is {@code TYPE_FORWARD_ONLY} * and the fetch direction is not {@code FETCH_FORWARD}, * or (3) this rowset does not currently have a valid * connection, prepared statement, and result set * @see java.sql.Statement#setFetchDirection */ public void setFetchDirection(int direction) throws SQLException { checkState(); rs.setFetchDirection(direction); } /** * Returns the fetch direction for this * {@code ResultSet} object. * * @return the current fetch direction for this rowset's * {@code ResultSet} object * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public int getFetchDirection() throws SQLException { try { checkState(); } catch(SQLException sqle) { super.getFetchDirection(); } return rs.getFetchDirection(); } /** * Gives the JDBC driver a hint as to the number of rows that should * be fetched from the database when more rows are needed for this * {@code ResultSet} object. * If the fetch size specified is zero, the JDBC driver * ignores the value and is free to make its own best guess as to what * the fetch size should be. The default value is set by the * {@code Statement} object * that created the result set. The fetch size may be changed at any time. * * @param rows the number of rows to fetch * @throws SQLException if (1) a database access error occurs, (2) the * condition {@code 0 <= rows <= this.getMaxRows()} is not * satisfied, or (3) this rowset does not currently have a valid * connection, prepared statement, and result set * */ public void setFetchSize(int rows) throws SQLException { checkState(); rs.setFetchSize(rows); } /** * * Returns the fetch size for this * {@code ResultSet} object. * * @return the current fetch size for this rowset's {@code ResultSet} object * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public int getType() throws SQLException { try { checkState(); } catch(SQLException sqle) { return super.getType(); } // If the ResultSet has not been created, then return the default type // otherwise return the type from the ResultSet. if(rs == null) { return super.getType(); } else { int rstype = rs.getType(); return rstype; } } /** * Returns the concurrency mode of this rowset's {@code ResultSet} object. * The concurrency used is determined by the * {@code Statement} object that created the result set. * * @return the concurrency type, either {@code CONCUR_READ_ONLY} * or {@code CONCUR_UPDATABLE} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public int getConcurrency() throws SQLException { try { checkState(); } catch(SQLException sqle) { super.getConcurrency(); } return rs.getConcurrency(); } //--------------------------------------------------------------------- // Updates //--------------------------------------------------------------------- /** * Indicates whether the current row has been updated. The value returned * depends on whether or not the result set can detect updates. * * @return {@code true} if the row has been visibly updated * by the owner or another, and updates are detected * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * @see java.sql.DatabaseMetaData#updatesAreDetected */ public boolean rowUpdated() throws SQLException { checkState(); return rs.rowUpdated(); } /** * Indicates whether the current row has had an insertion. * The value returned depends on whether or not this * {@code ResultSet} object can detect visible inserts. * * @return {@code true} if a row has had an insertion * and insertions are detected; {@code false} otherwise * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * @see java.sql.DatabaseMetaData#insertsAreDetected * */ public boolean rowInserted() throws SQLException { checkState(); return rs.rowInserted(); } /** * Indicates whether a row has been deleted. A deleted row may leave * a visible "hole" in a result set. This method can be used to * detect holes in a result set. The value returned depends on whether * or not this rowset's {@code ResultSet} object can detect deletions. * * @return {@code true} if a row was deleted and deletions are detected; * {@code false} otherwise * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * @see java.sql.DatabaseMetaData#deletesAreDetected */ public boolean rowDeleted() throws SQLException { checkState(); return rs.rowDeleted(); } /** * Gives a nullable column a null value. * * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} * or {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public void updateNull(int columnIndex) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateNull(columnIndex); } /** * Updates the designated column with a {@code boolean} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateBoolean(int columnIndex, boolean x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateBoolean(columnIndex, x); } /** * Updates the designated column with a {@code byte} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateByte(int columnIndex, byte x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateByte(columnIndex, x); } /** * Updates the designated column with a {@code short} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateShort(int columnIndex, short x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateShort(columnIndex, x); } /** * Updates the designated column with an {@code int} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public void updateInt(int columnIndex, int x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateInt(columnIndex, x); } /** * Updates the designated column with a {@code long} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateLong(int columnIndex, long x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateLong(columnIndex, x); } /** * Updates the designated column with a {@code float} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateFloat(int columnIndex, float x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateFloat(columnIndex, x); } /** * Updates the designated column with a {@code double} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateDouble(int columnIndex, double x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateDouble(columnIndex, x); } /** * Updates the designated column with a {@code java.math.BigDecimal} * value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateBigDecimal(columnIndex, x); } /** * Updates the designated column with a {@code String} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateString(int columnIndex, String x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateString(columnIndex, x); } /** * Updates the designated column with a {@code byte} array value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateBytes(int columnIndex, byte x[]) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateBytes(columnIndex, x); } /** * Updates the designated column with a {@code java.sql.Date} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateDate(int columnIndex, java.sql.Date x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateDate(columnIndex, x); } /** * Updates the designated column with a {@code java.sql.Time} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateTime(int columnIndex, java.sql.Time x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateTime(columnIndex, x); } /** * Updates the designated column with a {@code java.sql.Timestamp} * value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateTimestamp(columnIndex, x); } /** * Updates the designated column with an ascii stream value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @param length the length of the stream * @throws SQLException if (1) a database access error occurs * (2) or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateAsciiStream(columnIndex, x, length); } /** * Updates the designated column with a binary stream value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @param length the length of the stream * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateBinaryStream(int columnIndex, java.io.InputStream x, int length) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateBinaryStream(columnIndex, x, length); } /** * Updates the designated column with a character stream value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @param length the length of the stream * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateCharacterStream(columnIndex, x, length); } /** * Updates the designated column with an {@code Object} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @param scale for {@code java.sql.Types.DECIMAl} * or {@code java.sql.Types.NUMERIC} types, * this is the number of digits after the decimal point. For all other * types this value will be ignored. * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateObject(int columnIndex, Object x, int scale) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateObject(columnIndex, x, scale); } /** * Updates the designated column with an {@code Object} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, and so on * @param x the new column value * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateObject(int columnIndex, Object x) throws SQLException { checkState(); // To check the type and concurrency of the ResultSet // to verify whether updates are possible or not checkTypeConcurrency(); rs.updateObject(columnIndex, x); } /** * Updates the designated column with a {@code null} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public void updateNull(String columnName) throws SQLException { updateNull(findColumn(columnName)); } /** * Updates the designated column with a {@code boolean} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateBoolean(String columnName, boolean x) throws SQLException { updateBoolean(findColumn(columnName), x); } /** * Updates the designated column with a {@code byte} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateByte(String columnName, byte x) throws SQLException { updateByte(findColumn(columnName), x); } /** * Updates the designated column with a {@code short} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateShort(String columnName, short x) throws SQLException { updateShort(findColumn(columnName), x); } /** * Updates the designated column with an {@code int} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateInt(String columnName, int x) throws SQLException { updateInt(findColumn(columnName), x); } /** * Updates the designated column with a {@code long} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateLong(String columnName, long x) throws SQLException { updateLong(findColumn(columnName), x); } /** * Updates the designated column with a {@code float } value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateFloat(String columnName, float x) throws SQLException { updateFloat(findColumn(columnName), x); } /** * Updates the designated column with a {@code double} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateDouble(String columnName, double x) throws SQLException { updateDouble(findColumn(columnName), x); } /** * Updates the designated column with a {@code java.sql.BigDecimal} * value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException { updateBigDecimal(findColumn(columnName), x); } /** * Updates the designated column with a {@code String} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateString(String columnName, String x) throws SQLException { updateString(findColumn(columnName), x); } /** * Updates the designated column with a {@code boolean} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * JDBC 2.0 * * Updates a column with a byte array value. * * The {@code updateXXX} methods are used to update column values in the * current row, or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or {@code insertRow} * methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateBytes(String columnName, byte x[]) throws SQLException { updateBytes(findColumn(columnName), x); } /** * Updates the designated column with a {@code java.sql.Date} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateDate(String columnName, java.sql.Date x) throws SQLException { updateDate(findColumn(columnName), x); } /** * Updates the designated column with a {@code java.sql.Time} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateTime(String columnName, java.sql.Time x) throws SQLException { updateTime(findColumn(columnName), x); } /** * Updates the designated column with a {@code java.sql.Timestamp} * value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException { updateTimestamp(findColumn(columnName), x); } /** * Updates the designated column with an ascii stream value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @param length the length of the stream * @throws SQLException if a database access error occurs * */ public void updateAsciiStream(String columnName, java.io.InputStream x, int length) throws SQLException { updateAsciiStream(findColumn(columnName), x, length); } /** * Updates the designated column with a binary stream value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @param length the length of the stream * @throws SQLException if a database access error occurs * */ public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException { updateBinaryStream(findColumn(columnName), x, length); } /** * Updates the designated column with a character stream value. * The {@code updateXXX} methods are used to update column values * in the current row or the insert row. The {@code updateXXX} * methods do not update the underlying database; instead the * {@code updateRow} or {@code insertRow} methods are called * to update the database. * * @param columnName the name of the column * @param reader the new column {@code Reader} stream value * @param length the length of the stream * @throws SQLException if a database access error occurs * */ public void updateCharacterStream(String columnName, java.io.Reader reader, int length) throws SQLException { updateCharacterStream(findColumn(columnName), reader, length); } /** * Updates the designated column with an {@code Object} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @param scale for {@code java.sql.Types.DECIMAL} * or {@code java.sql.Types.NUMERIC} types, * this is the number of digits after the decimal point. For all other * types this value will be ignored. * @throws SQLException if a database access error occurs * */ public void updateObject(String columnName, Object x, int scale) throws SQLException { updateObject(findColumn(columnName), x, scale); } /** * Updates the designated column with an {@code Object} value. * The {@code updateXXX} methods are used to update column values in the * current row or the insert row. The {@code updateXXX} methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnName the name of the column * @param x the new column value * @throws SQLException if a database access error occurs * */ public void updateObject(String columnName, Object x) throws SQLException { updateObject(findColumn(columnName), x); } /** * Inserts the contents of the insert row into this * {@code ResultSet} object and into the database * and also notifies listeners that a row has changed. * The cursor must be on the insert row when this method is called. * * @throws SQLException if (1) a database access error occurs, * (2) this method is called when the cursor is not * on the insert row, (3) not all non-nullable columns in * the insert row have been given a value, or (4) this * rowset does not currently have a valid connection, * prepared statement, and result set */ public void insertRow() throws SQLException { checkState(); rs.insertRow(); notifyRowChanged(); } /** * Updates the underlying database with the new contents of the * current row of this rowset's {@code ResultSet} object * and notifies listeners that a row has changed. * This method cannot be called when the cursor is on the insert row. * * @throws SQLException if (1) a database access error occurs, * (2) this method is called when the cursor is * on the insert row, (3) the concurrency of the result * set is {@code ResultSet.CONCUR_READ_ONLY}, or * (4) this rowset does not currently have a valid connection, * prepared statement, and result set */ public void updateRow() throws SQLException { checkState(); rs.updateRow(); notifyRowChanged(); } /** * Deletes the current row from this rowset's {@code ResultSet} object * and from the underlying database and also notifies listeners that a row * has changed. This method cannot be called when the cursor is on the insert * row. * * @throws SQLException if a database access error occurs * or if this method is called when the cursor is on the insert row * @throws SQLException if (1) a database access error occurs, * (2) this method is called when the cursor is before the * first row, after the last row, or on the insert row, * (3) the concurrency of this rowset's result * set is {@code ResultSet.CONCUR_READ_ONLY}, or * (4) this rowset does not currently have a valid connection, * prepared statement, and result set */ public void deleteRow() throws SQLException { checkState(); rs.deleteRow(); notifyRowChanged(); } /** * Refreshes the current row of this rowset's {@code ResultSet} * object with its most recent value in the database. This method * cannot be called when the cursor is on the insert row. * *

The {@code refreshRow} method provides a way for an * application to explicitly tell the JDBC driver to refetch * a row(s) from the database. An application may want to call * {@code refreshRow} when caching or prefetching is being * done by the JDBC driver to fetch the latest value of a row * from the database. The JDBC driver may actually refresh multiple * rows at once if the fetch size is greater than one. * *

All values are refetched subject to the transaction isolation * level and cursor sensitivity. If {@code refreshRow} is called after * calling an {@code updateXXX} method, but before calling * the method {@code updateRow}, then the * updates made to the row are lost. Calling the method * {@code refreshRow} frequently will likely slow performance. * * @throws SQLException if (1) a database access error occurs, * (2) this method is called when the cursor is * on the insert row, or (3) this rowset does not * currently have a valid connection, prepared statement, * and result set * */ public void refreshRow() throws SQLException { checkState(); rs.refreshRow(); } /** * Cancels the updates made to the current row in this * {@code ResultSet} object and notifies listeners that a row * has changed. This method may be called after calling an * {@code updateXXX} method(s) and before calling * the method {@code updateRow} to roll back * the updates made to a row. If no updates have been made or * {@code updateRow} has already been called, this method has no * effect. * * @throws SQLException if (1) a database access error occurs, * (2) this method is called when the cursor is * on the insert row, or (3) this rowset does not * currently have a valid connection, prepared statement, * and result set */ public void cancelRowUpdates() throws SQLException { checkState(); rs.cancelRowUpdates(); notifyRowChanged(); } /** * Moves the cursor to the insert row. The current cursor position is * remembered while the cursor is positioned on the insert row. * * The insert row is a special row associated with an updatable * result set. It is essentially a buffer where a new row may * be constructed by calling the {@code updateXXX} methods prior to * inserting the row into the result set. * * Only the {@code updateXXX}, {@code getXXX}, * and {@code insertRow} methods may be * called when the cursor is on the insert row. All of the columns in * a result set must be given a value each time this method is * called before calling {@code insertRow}. * An {@code updateXXX} method must be called before a * {@code getXXX} method can be called on a column value. * * @throws SQLException if (1) a database access error occurs, * (2) this rowset's {@code ResultSet} object is * not updatable, or (3) this rowset does not * currently have a valid connection, prepared statement, * and result set * */ public void moveToInsertRow() throws SQLException { checkState(); rs.moveToInsertRow(); } /** * Moves the cursor to the remembered cursor position, usually the * current row. This method has no effect if the cursor is not on * the insert row. * * @throws SQLException if (1) a database access error occurs, * (2) this rowset's {@code ResultSet} object is * not updatable, or (3) this rowset does not * currently have a valid connection, prepared statement, * and result set */ public void moveToCurrentRow() throws SQLException { checkState(); rs.moveToCurrentRow(); } /** * Returns the {@code Statement} object that produced this * {@code ResultSet} object. * If the result set was generated some other way, such as by a * {@code DatabaseMetaData} method, this method returns * {@code null}. * * @return the {@code Statement} object that produced * this rowset's {@code ResultSet} object or {@code null} * if the result set was produced some other way * @throws SQLException if a database access error occurs */ public java.sql.Statement getStatement() throws SQLException { if(rs != null) { return rs.getStatement(); } else { return null; } } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as an {@code Object}. * This method uses the given {@code Map} object * for the custom mapping of the * SQL structured or distinct type that is being retrieved. * * @param i the first column is 1, the second is 2, and so on * @param map a {@code java.util.Map} object that contains the mapping * from SQL type names to classes in the Java programming language * @return an {@code Object} in the Java programming language * representing the SQL value * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Object getObject(int i, java.util.Map> map) throws SQLException { checkState(); return rs.getObject(i, map); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code Ref} object. * * @param i the first column is 1, the second is 2, and so on * @return a {@code Ref} object representing an SQL {@code REF} value * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Ref getRef(int i) throws SQLException { checkState(); return rs.getRef(i); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code Blob} object. * * @param i the first column is 1, the second is 2, and so on * @return a {@code Blob} object representing the SQL {@code BLOB} * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Blob getBlob(int i) throws SQLException { checkState(); return rs.getBlob(i); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code Clob} object. * * @param i the first column is 1, the second is 2, and so on * @return a {@code Clob} object representing the SQL {@code CLOB} * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Clob getClob(int i) throws SQLException { checkState(); return rs.getClob(i); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as an {@code Array} object. * * @param i the first column is 1, the second is 2, and so on. * @return an {@code Array} object representing the SQL {@code ARRAY} * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Array getArray(int i) throws SQLException { checkState(); return rs.getArray(i); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as an {@code Object}. * This method uses the specified {@code Map} object for * custom mapping if appropriate. * * @param colName the name of the column from which to retrieve the value * @param map a {@code java.util.Map} object that contains the mapping * from SQL type names to classes in the Java programming language * @return an {@code Object} representing the SQL * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Object getObject(String colName, java.util.Map> map) throws SQLException { return getObject(findColumn(colName), map); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code Ref} object. * * @param colName the column name * @return a {@code Ref} object representing the SQL {@code REF} value in * the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Ref getRef(String colName) throws SQLException { return getRef(findColumn(colName)); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code Blob} object. * * @param colName the name of the column from which to retrieve the value * @return a {@code Blob} object representing the SQL {@code BLOB} * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Blob getBlob(String colName) throws SQLException { return getBlob(findColumn(colName)); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code Clob} object. * * @param colName the name of the column from which to retrieve the value * @return a {@code Clob} object representing the SQL {@code CLOB} * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Clob getClob(String colName) throws SQLException { return getClob(findColumn(colName)); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as an {@code Array} object. * * @param colName the name of the column from which to retrieve the value * @return an {@code Array} object representing the SQL {@code ARRAY} * value in the specified column * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public Array getArray(String colName) throws SQLException { return getArray(findColumn(colName)); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code java.sql.Date} * object. This method uses the given calendar to construct an appropriate * millisecond value for the date if the underlying database does not store * timezone information. * * @param columnIndex the first column is 1, the second is 2, and so on * @param cal the {@code java.util.Calendar} object * to use in constructing the date * @return the column value as a {@code java.sql.Date} object; * if the value is SQL {@code NULL}, * the value returned is {@code null} * @throws SQLException if (1) a database access error occurs * or (2) this rowset does not currently have a valid connection, * prepared statement, and result set */ public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException { checkState(); return rs.getDate(columnIndex, cal); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code java.sql.Date} * object. This method uses the given calendar to construct an appropriate * millisecond value for the date if the underlying database does not store * timezone information. * * @param columnName the SQL name of the column from which to retrieve the value * @param cal the {@code java.util.Calendar} object * to use in constructing the date * @return the column value as a {@code java.sql.Date} object; * if the value is SQL {@code NULL}, * the value returned is {@code null} * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set * */ public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException { return getDate(findColumn(columnName), cal); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code java.sql.Time} * object. This method uses the given calendar to construct an appropriate * millisecond value for the date if the underlying database does not store * timezone information. * * @param columnIndex the first column is 1, the second is 2, and so on * @param cal the {@code java.util.Calendar} object * to use in constructing the time * @return the column value as a {@code java.sql.Time} object; * if the value is SQL {@code NULL}, * the value returned is {@code null} in the Java programming language * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException { checkState(); return rs.getTime(columnIndex, cal); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a {@code java.sql.Time} * object. This method uses the given calendar to construct an appropriate * millisecond value for the date if the underlying database does not store * timezone information. * * @param columnName the SQL name of the column * @param cal the {@code java.util.Calendar} object * to use in constructing the time * @return the column value as a {@code java.sql.Time} object; * if the value is SQL {@code NULL}, * the value returned is {@code null} in the Java programming language * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException { return getTime(findColumn(columnName), cal); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a * {@code java.sql.Timestamp} object. * This method uses the given calendar to construct an appropriate millisecond * value for the timestamp if the underlying database does not store * timezone information. * * @param columnIndex the first column is 1, the second is 2, and so on * @param cal the {@code java.util.Calendar} object * to use in constructing the timestamp * @return the column value as a {@code java.sql.Timestamp} object; * if the value is SQL {@code NULL}, * the value returned is {@code null} * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException { checkState(); return rs.getTimestamp(columnIndex, cal); } /** * Returns the value of the designated column in the current row * of this rowset's {@code ResultSet} object as a * {@code java.sql.Timestamp} object. * This method uses the given calendar to construct an appropriate millisecond * value for the timestamp if the underlying database does not store * timezone information. * * @param columnName the SQL name of the column * @param cal the {@code java.util.Calendar} object * to use in constructing the timestamp * @return the column value as a {@code java.sql.Timestamp} object; * if the value is SQL {@code NULL}, * the value returned is {@code null} * @throws SQLException if a database access error occurs * or this rowset does not currently have a valid connection, * prepared statement, and result set */ public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException { return getTimestamp(findColumn(columnName), cal); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code double} value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnIndex the first column is {@code 1}, the second * is {@code 2}, and so on; must be {@code 1} or larger * and equal to or less than the number of columns in this rowset * @param ref the new {@code Ref} column value * @throws SQLException if (1) the given column index is out of bounds, * (2) the cursor is not on one of this rowset's rows or its * insert row, or (3) this rowset is * {@code ResultSet.CONCUR_READ_ONLY} */ public void updateRef(int columnIndex, java.sql.Ref ref) throws SQLException { checkState(); rs.updateRef(columnIndex, ref); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code double} value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnName a {@code String} object that must match the * SQL name of a column in this rowset, ignoring case * @param ref the new column value * @throws SQLException if (1) the given column name does not match the * name of a column in this rowset, (2) the cursor is not on * one of this rowset's rows or its insert row, or (3) this * rowset is {@code ResultSet.CONCUR_READ_ONLY} */ public void updateRef(String columnName, java.sql.Ref ref) throws SQLException { updateRef(findColumn(columnName), ref); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code double} value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnIndex the first column is {@code 1}, the second * is {@code 2}, and so on; must be {@code 1} or larger * and equal to or less than the number of columns in this rowset * @param c the new column {@code Clob} value * @throws SQLException if (1) the given column index is out of bounds, * (2) the cursor is not on one of this rowset's rows or its * insert row, or (3) this rowset is * {@code ResultSet.CONCUR_READ_ONLY} */ public void updateClob(int columnIndex, Clob c) throws SQLException { checkState(); rs.updateClob(columnIndex, c); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code double} value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnName a {@code String} object that must match the * SQL name of a column in this rowset, ignoring case * @param c the new column {@code Clob} value * @throws SQLException if (1) the given column name does not match the * name of a column in this rowset, (2) the cursor is not on * one of this rowset's rows or its insert row, or (3) this * rowset is {@code ResultSet.CONCUR_READ_ONLY} */ public void updateClob(String columnName, Clob c) throws SQLException { updateClob(findColumn(columnName), c); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code java.sql.Blob} value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnIndex the first column is {@code 1}, the second * is {@code 2}, and so on; must be {@code 1} or larger * and equal to or less than the number of columns in this rowset * @param b the new column {@code Blob} value * @throws SQLException if (1) the given column index is out of bounds, * (2) the cursor is not on one of this rowset's rows or its * insert row, or (3) this rowset is * {@code ResultSet.CONCUR_READ_ONLY} */ public void updateBlob(int columnIndex, Blob b) throws SQLException { checkState(); rs.updateBlob(columnIndex, b); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code java.sql.Blob } value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnName a {@code String} object that must match the * SQL name of a column in this rowset, ignoring case * @param b the new column {@code Blob} value * @throws SQLException if (1) the given column name does not match the * name of a column in this rowset, (2) the cursor is not on * one of this rowset's rows or its insert row, or (3) this * rowset is {@code ResultSet.CONCUR_READ_ONLY} */ public void updateBlob(String columnName, Blob b) throws SQLException { updateBlob(findColumn(columnName), b); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code java.sql.Array} values. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnIndex the first column is {@code 1}, the second * is {@code 2}, and so on; must be {@code 1} or larger * and equal to or less than the number of columns in this rowset * @param a the new column {@code Array} value * @throws SQLException if (1) the given column index is out of bounds, * (2) the cursor is not on one of this rowset's rows or its * insert row, or (3) this rowset is * {@code ResultSet.CONCUR_READ_ONLY} */ public void updateArray(int columnIndex, Array a) throws SQLException { checkState(); rs.updateArray(columnIndex, a); } /** * Sets the designated column in either the current row or the insert * row of this {@code JdbcRowSetImpl} object with the given * {@code java.sql.Array} value. * * This method updates a column value in either the current row or * the insert row of this rowset, but it does not update the * database. If the cursor is on a row in the rowset, the * method {@link #updateRow} must be called to update the database. * If the cursor is on the insert row, the method {@link #insertRow} * must be called, which will insert the new row into both this rowset * and the database. Both of these methods must be called before the * cursor moves to another row. * * @param columnName a {@code String} object that must match the * SQL name of a column in this rowset, ignoring case * @param a the new column {@code Array} value * @throws SQLException if (1) the given column name does not match the * name of a column in this rowset, (2) the cursor is not on * one of this rowset's rows or its insert row, or (3) this * rowset is {@code ResultSet.CONCUR_READ_ONLY} */ public void updateArray(String columnName, Array a) throws SQLException { updateArray(findColumn(columnName), a); } /** * Provide interface coverage for getURL(int) in {@code ResultSet->RowSet} */ public java.net.URL getURL(int columnIndex) throws SQLException { checkState(); return rs.getURL(columnIndex); } /** * Provide interface coverage for getURL(String) in {@code ResultSet->RowSet} */ public java.net.URL getURL(String columnName) throws SQLException { return getURL(findColumn(columnName)); } /** * Return the RowSetWarning object for the current row of a * {@code JdbcRowSetImpl} */ public RowSetWarning getRowSetWarnings() throws SQLException { return null; } /** * Unsets the designated parameter to the given int array. * This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

* The parameter value unset by this method should be same * as was set. * * @param columnIdxes the index into this rowset * object's internal representation of parameter values * @throws SQLException if an error occurs or the * parameter index is out of bounds or if the columnIdx is * not the same as set using {@code setMatchColumn(int [])} */ public void unsetMatchColumn(int[] columnIdxes) throws SQLException { int i_val; for( int j= 0 ;j < columnIdxes.length; j++) { i_val = (Integer.parseInt(iMatchColumns.get(j).toString())); if(columnIdxes[j] != i_val) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); } } for( int i = 0;i < columnIdxes.length ;i++) { iMatchColumns.set(i,Integer.valueOf(-1)); } } /** * Unsets the designated parameter to the given String array. * This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

* The parameter value unset by this method should be same * as was set. * * @param columnIdxes the index into this rowset * object's internal representation of parameter values * @throws SQLException if an error occurs or the * parameter index is out of bounds or if the columnName is * not the same as set using {@code setMatchColumn(String [])} */ public void unsetMatchColumn(String[] columnIdxes) throws SQLException { for(int j = 0 ;j < columnIdxes.length; j++) { if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){ throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); } } for(int i = 0 ; i < columnIdxes.length; i++) { strMatchColumns.set(i,null); } } /** * Retrieves the column name as {@code String} array * that was set using {@code setMatchColumn(String [])} * for this rowset. * * @return a {@code String} array object that contains the column names * for the rowset which has this the match columns * * @throws SQLException if an error occurs or column name is not set */ public String[] getMatchColumnNames() throws SQLException { String []str_temp = new String[strMatchColumns.size()]; if( strMatchColumns.get(0) == null) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); } strMatchColumns.copyInto(str_temp); return str_temp; } /** * Retrieves the column id as {@code int} array that was set using * {@code setMatchColumn(int [])} for this rowset. * * @return an {@code int} array object that contains the column ids * for the rowset which has this as the match columns. * * @throws SQLException if an error occurs or column index is not set */ public int[] getMatchColumnIndexes() throws SQLException { Integer []int_temp = new Integer[iMatchColumns.size()]; int [] i_temp = new int[iMatchColumns.size()]; int i_val; i_val = iMatchColumns.get(0); if( i_val == -1 ) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); } iMatchColumns.copyInto(int_temp); for(int i = 0; i < int_temp.length; i++) { i_temp[i] = (int_temp[i]).intValue(); } return i_temp; } /** * Sets the designated parameter to the given int array. * This forms the basis of the join for the * {@code JoinRowSet} as the column which will form the basis of the * join. *

* The parameter value set by this method is stored internally and * will be supplied as the appropriate parameter in this rowset's * command when the method {@code getMatchColumnIndexes} is called. * * @param columnIdxes the indexes into this rowset * object's internal representation of parameter values; the * first parameter is 0, the second is 1, and so on; must be * {@code 0} or greater * @throws SQLException if an error occurs or the * parameter index is out of bounds */ public void setMatchColumn(int[] columnIdxes) throws SQLException { for(int j = 0 ; j < columnIdxes.length; j++) { if( columnIdxes[j] < 0 ) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); } } for(int i = 0 ;i < columnIdxes.length; i++) { iMatchColumns.add(i,Integer.valueOf(columnIdxes[i])); } } /** * Sets the designated parameter to the given String array. * This forms the basis of the join for the * {@code JoinRowSet} as the column which will form the basis of the * join. *

* The parameter value set by this method is stored internally and * will be supplied as the appropriate parameter in this rowset's * command when the method {@code getMatchColumn} is called. * * @param columnNames the name of the column into this rowset * object's internal representation of parameter values * @throws SQLException if an error occurs or the * parameter index is out of bounds */ public void setMatchColumn(String[] columnNames) throws SQLException { for(int j = 0; j < columnNames.length; j++) { if( columnNames[j] == null || columnNames[j].isEmpty()) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); } } for( int i = 0; i < columnNames.length; i++) { strMatchColumns.add(i,columnNames[i]); } } /** * Sets the designated parameter to the given {@code int} * object. This forms the basis of the join for the * {@code JoinRowSet} as the column which will form the basis of the * join. *

* The parameter value set by this method is stored internally and * will be supplied as the appropriate parameter in this rowset's * command when the method {@code getMatchColumn} is called. * * @param columnIdx the index into this rowset * object's internal representation of parameter values; the * first parameter is 0, the second is 1, and so on; must be * {@code 0} or greater * @throws SQLException if an error occurs or the * parameter index is out of bounds */ public void setMatchColumn(int columnIdx) throws SQLException { // validate, if col is ok to be set if(columnIdx < 0) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); } else { // set iMatchColumn iMatchColumns.set(0, Integer.valueOf(columnIdx)); //strMatchColumn = null; } } /** * Sets the designated parameter to the given {@code String} * object. This forms the basis of the join for the * {@code JoinRowSet} as the column which will form the basis of the * join. *

* The parameter value set by this method is stored internally and * will be supplied as the appropriate parameter in this rowset's * command when the method {@code getMatchColumn} is called. * * @param columnName the name of the column into this rowset * object's internal representation of parameter values * @throws SQLException if an error occurs or the * parameter index is out of bounds */ public void setMatchColumn(String columnName) throws SQLException { // validate, if col is ok to be set if(columnName == null || (columnName= columnName.trim()).isEmpty()) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); } else { // set strMatchColumn strMatchColumns.set(0, columnName); //iMatchColumn = -1; } } /** * Unsets the designated parameter to the given {@code int} * object. This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

* The parameter value unset by this method should be same * as was set. * * @param columnIdx the index into this rowset * object's internal representation of parameter values * @throws SQLException if an error occurs or the * parameter index is out of bounds or if the columnIdx is * not the same as set using {@code setMatchColumn(int)} */ public void unsetMatchColumn(int columnIdx) throws SQLException { // check if we are unsetting the SAME column if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) ) ) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); } else if(strMatchColumns.get(0) != null) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString()); } else { // that is, we are unsetting it. iMatchColumns.set(0, Integer.valueOf(-1)); } } /** * Unsets the designated parameter to the given {@code String} * object. This was set using {@code setMatchColumn} * as the column which will form the basis of the join. *

* The parameter value unset by this method should be same * as was set. * * @param columnName the index into this rowset * object's internal representation of parameter values * @throws SQLException if an error occurs or the * parameter index is out of bounds or if the columnName is * not the same as set using {@code setMatchColumn(String)} * */ public void unsetMatchColumn(String columnName) throws SQLException { // check if we are unsetting the same column columnName = columnName.trim(); if(!((strMatchColumns.get(0)).equals(columnName))) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); } else if(iMatchColumns.get(0) > 0) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolid").toString()); } else { strMatchColumns.set(0, null); // that is, we are unsetting it. } } /** * Retrieves the {@code DatabaseMetaData} associated with * the connection handle associated with this * {@code JdbcRowSet} object. * * @return the {@code DatabaseMetadata} associated * with the rowset's connection. * @throws SQLException if a database access error occurs */ public DatabaseMetaData getDatabaseMetaData() throws SQLException { Connection con = connect(); return con.getMetaData(); } /** * Retrieves the {@code ParameterMetaData} associated with * the connection handle associated with this * {@code JdbcRowSet} object. * * @return the {@code ParameterMetadata} associated * with the rowset's connection. * @throws SQLException if a database access error occurs */ public ParameterMetaData getParameterMetaData() throws SQLException { prepare(); return (ps.getParameterMetaData()); } /** * Commits all updates in this {@code JdbcRowSet} object by * wrapping the internal {@code Connection} object and calling * its {@code commit} method. * This method sets this {@code JdbcRowSet} object's private field * {@code rs} to {@code null} after saving its value to another * object, but only if the {@code ResultSet} * constant {@code HOLD_CURSORS_OVER_COMMIT} has not been set. * (The field {@code rs} is this {@code JdbcRowSet} object's * {@code ResultSet} object.) * * @throws SQLException if autoCommit is set to true or if a database * access error occurs */ public void commit() throws SQLException { conn.commit(); // Checking the holadbility value and making the result set handle null // Added as per Rave requirements if( conn.getHoldability() != HOLD_CURSORS_OVER_COMMIT) { rs = null; } } /** * Sets auto-commit on the internal {@code Connection} object with this * {@code JdbcRowSet} * * @throws SQLException if a database access error occurs */ public void setAutoCommit(boolean autoCommit) throws SQLException { // The connection object should be there // in order to commit the connection handle on or off. if(conn != null) { conn.setAutoCommit(autoCommit); } else { // Coming here means the connection object is null. // So generate a connection handle internally, since // a JdbcRowSet is always connected to a db, it is fine // to get a handle to the connection. // Get hold of a connection handle // and change the autcommit as passesd. conn = connect(); // After setting the below the conn.getAutoCommit() // should return the same value. conn.setAutoCommit(autoCommit); } } /** * Returns the auto-commit status with this {@code JdbcRowSet}. * * @return true if auto commit is true; false otherwise * @throws SQLException if a database access error occurs */ public boolean getAutoCommit() throws SQLException { return conn.getAutoCommit(); } /** * Rolls back all the updates in this {@code JdbcRowSet} object by * wrapping the internal {@code Connection} object and calling its * {@code rollback} method. * This method sets this {@code JdbcRowSet} object's private field * {@code rs} to {@code null} after saving its value to another object. * (The field {@code rs} is this {@code JdbcRowSet} object's * internal {@code ResultSet} object.) * * @throws SQLException if autoCommit is set to true or a database * access error occurs */ public void rollback() throws SQLException { conn.rollback(); // Makes the result ste handle null after rollback // Added as per Rave requirements rs = null; } /** * Rollbacks all the updates in the {@code JdbcRowSet} back to the * last {@code Savepoint} transaction marker. Wraps the internal * {@code Connection} object and call it's rollback method * * @param s the {@code Savepoint} transaction marker to roll the * transaction to. * @throws SQLException if autoCommit is set to true; or ia a database * access error occurs */ public void rollback(Savepoint s) throws SQLException { conn.rollback(s); } // Setting the ResultSet Type and Concurrency protected void setParams() throws SQLException { if(rs == null) { setType(ResultSet.TYPE_SCROLL_INSENSITIVE); setConcurrency(ResultSet.CONCUR_UPDATABLE); } else { setType(rs.getType()); setConcurrency(rs.getConcurrency()); } } // Checking ResultSet Type and Concurrency private void checkTypeConcurrency() throws SQLException { if(rs.getType() == TYPE_FORWARD_ONLY || rs.getConcurrency() == CONCUR_READ_ONLY) { throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.resnotupd").toString()); } } // Returns a Connection Handle // Added as per Rave requirements /** * Gets this {@code JdbcRowSet} object's Connection property * * * @return the {@code Connection} object associated with this rowset; */ protected Connection getConnection() { return conn; } // Sets the connection handle with the parameter // Added as per rave requirements /** * Sets this {@code JdbcRowSet} object's connection property * to the given {@code Connection} object. * * @param connection the {@code Connection} object. */ protected void setConnection(Connection connection) { conn = connection; } // Returns a PreparedStatement Handle // Added as per Rave requirements /** * Gets this {@code JdbcRowSet} object's PreparedStatement property * * * @return the {@code PreparedStatement} object associated with this rowset; */ protected PreparedStatement getPreparedStatement() { return ps; } //Sets the prepared statement handle to the parameter // Added as per Rave requirements /** * Sets this {@code JdbcRowSet} object's preparedtsatement property * to the given {@code PreparedStatemennt} object. * * @param preparedStatement the {@code PreparedStatement} object * */ protected void setPreparedStatement(PreparedStatement preparedStatement) { ps = preparedStatement; } // Returns a ResultSet handle // Added as per Rave requirements /** * Gets this {@code JdbcRowSet} object's ResultSet property * * * @return the {@code ResultSet} object associated with this rowset; */ protected ResultSet getResultSet() throws SQLException { checkState(); return rs; } // Sets the result set handle to the parameter // Added as per Rave requirements /** * Sets this {@code JdbcRowSet} object's resultset property * to the given {@code ResultSet} object. * * @param resultSet the {@code ResultSet} object * */ protected void setResultSet(ResultSet resultSet) { rs = resultSet; } /** * Sets this {@code JdbcRowSet} object's {@code command} property to * the given {@code String} object and clears the parameters, if any, * that were set for the previous command. In addition, * if the {@code command} property has previously been set to a * non-null value and it is * different from the {@code String} object supplied, * this method sets this {@code JdbcRowSet} object's private fields * {@code ps} and {@code rs} to {@code null}. * (The field {@code ps} is its {@code PreparedStatement} object, and * the field {@code rs} is its {@code ResultSet} object.) *

* The {@code command} property may not be needed if the {@code RowSet} * object gets its data from a source that does not support commands, * such as a spreadsheet or other tabular file. * Thus, this property is optional and may be {@code null}. * * @param command a {@code String} object containing an SQL query * that will be set as this {@code RowSet} object's command * property; may be {@code null} but may not be an empty string * @throws SQLException if an empty string is provided as the command value * @see #getCommand */ public void setCommand(String command) throws SQLException { if (getCommand() != null) { if(!getCommand().equals(command)) { super.setCommand(command); ps = null; rs = null; } } else { super.setCommand(command); } } /** * Sets the {@code dataSourceName} property for this {@code JdbcRowSet} * object to the given logical name and sets this {@code JdbcRowSet} object's * Url property to {@code null}. In addition, if the {@code dataSourceName} * property has previously been set and is different from the one supplied, * this method sets this {@code JdbcRowSet} object's private fields * {@code ps}, {@code rs}, and {@code conn} to {@code null}. * (The field {@code ps} is its {@code PreparedStatement} object, * the field {@code rs} is its {@code ResultSet} object, and * the field {@code conn} is its {@code Connection} object.) *

* The name supplied to this method must have been bound to a * {@code DataSource} object in a JNDI naming service so that an * application can do a lookup using that name to retrieve the * {@code DataSource} object bound to it. The {@code DataSource} * object can then be used to establish a connection to the data source it * represents. *

* Users should set either the Url property or the dataSourceName property. * If both properties are set, the driver will use the property set most recently. * * @param dsName a {@code String} object with the name that can be supplied * to a naming service based on JNDI technology to retrieve the * {@code DataSource} object that can be used to get a connection; * may be {@code null} * @throws SQLException if there is a problem setting the * {@code dataSourceName} property * @see #getDataSourceName */ public void setDataSourceName(String dsName) throws SQLException{ if(getDataSourceName() != null) { if(!getDataSourceName().equals(dsName)) { super.setDataSourceName(dsName); conn = null; ps = null; rs = null; } } else { super.setDataSourceName(dsName); } } /** * Sets the Url property for this {@code JdbcRowSet} object * to the given {@code String} object and sets the dataSource name * property to {@code null}. In addition, if the Url property has * previously been set to a non {@code null} value and its value * is different from the value to be set, * this method sets this {@code JdbcRowSet} object's private fields * {@code ps}, {@code rs}, and {@code conn} to {@code null}. * (The field {@code ps} is its {@code PreparedStatement} object, * the field {@code rs} is its {@code ResultSet} object, and * the field {@code conn} is its {@code Connection} object.) *

* The Url property is a JDBC URL that is used when * the connection is created using a JDBC technology-enabled driver * ("JDBC driver") and the {@code DriverManager}. * The correct JDBC URL for the specific driver to be used can be found * in the driver documentation. Although there are guidelines for how * a JDBC URL is formed, * a driver vendor can specify any {@code String} object except * one with a length of {@code 0} (an empty string). *

* Setting the Url property is optional if connections are established using * a {@code DataSource} object instead of the {@code DriverManager}. * The driver will use either the URL property or the * dataSourceName property to create a connection, whichever was * specified most recently. If an application uses a JDBC URL, it * must load a JDBC driver that accepts the JDBC URL before it uses the * {@code RowSet} object to connect to a database. The {@code RowSet} * object will use the URL internally to create a database connection in order * to read or write data. * * @param url a {@code String} object that contains the JDBC URL * that will be used to establish the connection to a database for this * {@code RowSet} object; may be {@code null} but must not * be an empty string * @throws SQLException if an error occurs setting the Url property or the * parameter supplied is a string with a length of {@code 0} (an * empty string) * @see #getUrl */ public void setUrl(String url) throws SQLException { if(getUrl() != null) { if(!getUrl().equals(url)) { super.setUrl(url); conn = null; ps = null; rs = null; } } else { super.setUrl(url); } } /** * Sets the username property for this {@code JdbcRowSet} object * to the given user name. Because it * is not serialized, the username property is set at run time before * calling the method {@code execute}. In addition, * if the {@code username} property is already set with a * non-null value and that value is different from the {@code String} * object to be set, * this method sets this {@code JdbcRowSet} object's private fields * {@code ps}, {@code rs}, and {@code conn} to {@code null}. * (The field {@code ps} is its {@code PreparedStatement} object, * {@code rs} is its {@code ResultSet} object, and * {@code conn} is its {@code Connection} object.) * Setting these fields to {@code null} ensures that only current * values will be used. * * @param uname the {@code String} object containing the user name that * is supplied to the data source to create a connection. It may be null. * @see #getUsername */ public void setUsername(String uname) { if( getUsername() != null) { if(!getUsername().equals(uname)) { super.setUsername(uname); conn = null; ps = null; rs = null; } } else{ super.setUsername(uname); } } /** * Sets the password property for this {@code JdbcRowSet} object * to the given {@code String} object. Because it * is not serialized, the password property is set at run time before * calling the method {@code execute}. Its default valus is * {@code null}. In addition, * if the {@code password} property is already set with a * non-null value and that value is different from the one being set, * this method sets this {@code JdbcRowSet} object's private fields * {@code ps}, {@code rs}, and {@code conn} to {@code null}. * (The field {@code ps} is its {@code PreparedStatement} object, * {@code rs} is its {@code ResultSet} object, and * {@code conn} is its {@code Connection} object.) * Setting these fields to {@code null} ensures that only current * values will be used. * * @param password the {@code String} object that represents the password * that must be supplied to the database to create a connection */ public void setPassword(String password) { if ( getPassword() != null) { if(!getPassword().equals(password)) { super.setPassword(password); conn = null; ps = null; rs = null; } } else{ super.setPassword(password); } } /** * Sets the type for this {@code RowSet} object to the specified type. * The default type is {@code ResultSet.TYPE_SCROLL_INSENSITIVE}. * * @param type one of the following constants: * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @throws SQLException if the parameter supplied is not one of the * following constants: * {@code ResultSet.TYPE_FORWARD_ONLY} or * {@code ResultSet.TYPE_SCROLL_INSENSITIVE} * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @see #getConcurrency * @see #getType */ public void setType(int type) throws SQLException { int oldVal; try { oldVal = getType(); }catch(SQLException ex) { oldVal = 0; } if(oldVal != type) { super.setType(type); } } /** * Sets the concurrency for this {@code RowSet} object to * the specified concurrency. The default concurrency for any {@code RowSet} * object (connected or disconnected) is {@code ResultSet.CONCUR_UPDATABLE}, * but this method may be called at any time to change the concurrency. * * @param concur one of the following constants: * {@code ResultSet.CONCUR_READ_ONLY} or * {@code ResultSet.CONCUR_UPDATABLE} * @throws SQLException if the parameter supplied is not one of the * following constants: * {@code ResultSet.CONCUR_UPDATABLE} or * {@code ResultSet.CONCUR_READ_ONLY} * @see #getConcurrency * @see #isReadOnly */ public void setConcurrency(int concur) throws SQLException { int oldVal; try { oldVal = getConcurrency(); }catch(NullPointerException ex) { oldVal = 0; } if(oldVal != concur) { super.setConcurrency(concur); } } /** * Retrieves the value of the designated {@code SQL XML} parameter as a * {@code SQLXML} object in the Java programming language. * @param columnIndex the first column is 1, the second is 2, ... * @return a SQLXML object that maps an SQL XML value * @throws SQLException if a database access error occurs * @since 1.6 */ public SQLXML getSQLXML(int columnIndex) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated {@code SQL XML} parameter as a * {@code SQLXML} object in the Java programming language. * @param colName the name of the column from which to retrieve the value * @return a SQLXML object that maps an SQL XML value * @throws SQLException if a database access error occurs */ public SQLXML getSQLXML(String colName) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row of this * {@code ResultSet} object as a java.sql.RowId object in the Java * programming language. * * @param columnIndex the first column is 1, the second 2, ... * @return the column value if the value is a SQL {@code NULL} the * value returned is {@code null} * @throws SQLException if a database access error occurs * @since 1.6 */ public RowId getRowId(int columnIndex) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row of this * {@code ResultSet} object as a java.sql.RowId object in the Java * programming language. * * @param columnName the name of the column * @return the column value if the value is a SQL {@code NULL} the * value returned is {@code null} * @throws SQLException if a database access error occurs * @since 1.6 */ public RowId getRowId(String columnName) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a {@code RowId} value. The updater * methods are used to update column values in the current row or the insert * row. The updater methods do not update the underlying database; instead * the {@code updateRow} or {@code insertRow} methods are called * to update the database. * * @param columnIndex the first column is 1, the second 2, ... * @param x the column value * @throws SQLException if a database access occurs * @since 1.6 */ public void updateRowId(int columnIndex, RowId x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a {@code RowId} value. The updater * methods are used to update column values in the current row or the insert * row. The updater methods do not update the underlying database; instead * the {@code updateRow} or {@code insertRow} methods are called * to update the database. * * @param columnName the name of the column * @param x the column value * @throws SQLException if a database access occurs * @since 1.6 */ public void updateRowId(String columnName, RowId x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the holdability of this ResultSet object * @return either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT * @throws SQLException if a database error occurs * @since 1.6 */ public int getHoldability() throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves whether this ResultSet object has been closed. A ResultSet is closed if the * method close has been called on it, or if it is automatically closed. * @return true if this ResultSet object is closed; false if it is still open * @throws SQLException if a database access error occurs * @since 1.6 */ public boolean isClosed() throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * This method is used for updating columns that support National Character sets. * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns. * @param columnIndex the first column is 1, the second 2, ... * @param nString the value for the column to be updated * @throws SQLException if a database access error occurs * @since 1.6 */ public void updateNString(int columnIndex, String nString) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * This method is used for updating columns that support National Character sets. * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns. * @param columnName name of the Column * @param nString the value for the column to be updated * @throws SQLException if a database access error occurs * @since 1.6 */ public void updateNString(String columnName, String nString) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /*o * This method is used for updating SQL {@code NCLOB} type that maps * to {@code java.sql.Types.NCLOB} * @param columnIndex the first column is 1, the second 2, ... * @param nClob the value for the column to be updated * @throws SQLException if a database access error occurs * @since 1.6 */ public void updateNClob(int columnIndex, NClob nClob) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * This method is used for updating SQL {@code NCLOB} type that maps * to {@code java.sql.Types.NCLOB} * @param columnName name of the column * @param nClob the value for the column to be updated * @throws SQLException if a database access error occurs * @since 1.6 */ public void updateNClob(String columnName, NClob nClob) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row * of this {@code ResultSet} object as a {@code NClob} object * in the Java programming language. * * @param i the first column is 1, the second is 2, ... * @return a {@code NClob} object representing the SQL * {@code NCLOB} value in the specified column * @exception SQLException if a database access error occurs * @since 1.6 */ public NClob getNClob(int i) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row * of this {@code ResultSet} object as a {@code NClob} object * in the Java programming language. * * @param colName the name of the column from which to retrieve the value * @return a {@code NClob} object representing the SQL {@code NCLOB} * value in the specified column * @exception SQLException if a database access error occurs * @since 1.6 */ public NClob getNClob(String colName) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } public T unwrap(java.lang.Class iface) throws java.sql.SQLException{ return null; } public boolean isWrapperFor(Class interfaces) throws SQLException { return false; } /** * Sets the designated parameter to the given {@code java.sql.SQLXML} object. The driver converts this to an * SQL {@code XML} value when it sends it to the database. * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @param xmlObject a {@code SQLXML} object that maps an SQL {@code XML} value * @throws SQLException if a database access error occurs * @since 1.6 */ public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.SQLXML} object. The driver converts this to an * {@code SQL XML} value when it sends it to the database. * @param parameterName the name of the parameter * @param xmlObject a {@code SQLXML} object that maps an {@code SQL XML} value * @throws SQLException if a database access error occurs * @since 1.6 */ public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.RowId} object. The * driver converts this to a SQL {@code ROWID} value when it sends it * to the database * * @param parameterIndex the first parameter is 1, the second is 2, ... * @param x the parameter value * @throws SQLException if a database access error occurs * * @since 1.6 */ public void setRowId(int parameterIndex, RowId x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.RowId} object. The * driver converts this to a SQL {@code ROWID} when it sends it to the * database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if a database access error occurs * @since 1.6 */ public void setRowId(String parameterName, RowId x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code String} object. * The driver converts this to a SQL {@code NCHAR} or * {@code NVARCHAR} or {@code LONGNVARCHAR} value * (depending on the argument's * size relative to the driver's limits on {@code NVARCHAR} values) * when it sends it to the database. * * @param parameterIndex of the first parameter is 1, the second is 2, ... * @param value the parameter value * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur ; or if a database access error occurs * @since 1.6 */ public void setNString(int parameterIndex, String value) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter in this {@code RowSet} object's command * to a {@code Reader} object. The * {@code Reader} reads the data till end-of-file is reached. The * driver does the necessary conversion from Java character format to * the national character set in the database. *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setNCharacterStream} which takes a length parameter. * * @param parameterIndex of the first parameter is 1, the second is 2, ... * @param value the parameter value * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur ; if a database access error occurs; or * this method is called on a closed {@code PreparedStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code java.sql.NClob} object. The object * implements the {@code java.sql.NClob} interface. This {@code NClob} * object maps to a SQL {@code NCLOB}. * @param parameterName the name of the column to be set * @param value the parameter value * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; or if a database access error occurs * @since 1.6 */ public void setNClob(String parameterName, NClob value) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row * of this {@code ResultSet} object as a * {@code java.io.Reader} object. * It is intended for use when * accessing {@code NCHAR},{@code NVARCHAR} * and {@code LONGNVARCHAR} columns. * * @return a {@code java.io.Reader} object that contains the column * value; if the value is SQL {@code NULL}, the value returned is * {@code null} in the Java programming language. * @param columnIndex the first column is 1, the second is 2, ... * @exception SQLException if a database access error occurs * @since 1.6 */ public java.io.Reader getNCharacterStream(int columnIndex) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row * of this {@code ResultSet} object as a * {@code java.io.Reader} object. * It is intended for use when * accessing {@code NCHAR},{@code NVARCHAR} * and {@code LONGNVARCHAR} columns. * * @param columnName the name of the column * @return a {@code java.io.Reader} object that contains the column * value; if the value is SQL {@code NULL}, the value returned is * {@code null} in the Java programming language * @exception SQLException if a database access error occurs * @since 1.6 */ public java.io.Reader getNCharacterStream(String columnName) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a {@code java.sql.SQLXML} value. * The updater * methods are used to update column values in the current row or the insert * row. The updater methods do not update the underlying database; instead * the {@code updateRow} or {@code insertRow} methods are called * to update the database. * @param columnIndex the first column is 1, the second 2, ... * @param xmlObject the value for the column to be updated * @throws SQLException if a database access error occurs * @since 1.6 */ public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a {@code java.sql.SQLXML} value. * The updater * methods are used to update column values in the current row or the insert * row. The updater methods do not update the underlying database; instead * the {@code updateRow} or {@code insertRow} methods are called * to update the database. * * @param columnName the name of the column * @param xmlObject the column value * @throws SQLException if a database access occurs * @since 1.6 */ public void updateSQLXML(String columnName, SQLXML xmlObject) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row * of this {@code ResultSet} object as * a {@code String} in the Java programming language. * It is intended for use when * accessing {@code NCHAR},{@code NVARCHAR} * and {@code LONGNVARCHAR} columns. * * @param columnIndex the first column is 1, the second is 2, ... * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @exception SQLException if a database access error occurs * @since 1.6 */ public String getNString(int columnIndex) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Retrieves the value of the designated column in the current row * of this {@code ResultSet} object as * a {@code String} in the Java programming language. * It is intended for use when * accessing {@code NCHAR},{@code NVARCHAR} * and {@code LONGNVARCHAR} columns. * * @param columnName the SQL name of the column * @return the column value; if the value is SQL {@code NULL}, the * value returned is {@code null} * @exception SQLException if a database access error occurs * @since 1.6 */ public String getNString(String columnName) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value, which will * have the specified number of bytes. The driver does the necessary conversion * from Java character format to the national character set in the database. * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns. * The updater methods are used to update column values in the current row or * the insert row. The updater methods do not update the underlying database; * instead the updateRow or insertRow methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs * @since 1.6 */ public void updateNCharacterStream(int columnIndex, java.io.Reader x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value, which will * have the specified number of bytes. The driver does the necessary conversion * from Java character format to the national character set in the database. * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns. * The updater methods are used to update column values in the current row or * the insert row. The updater methods do not update the underlying database; * instead the updateRow or insertRow methods are called to update the database. * * @param columnName name of the Column * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs * @since 1.6 */ public void updateNCharacterStream(String columnName, java.io.Reader x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value. The * driver does the necessary conversion from Java character format to * the national character set in the database. * It is intended for use when * updating {@code NCHAR},{@code NVARCHAR} * and {@code LONGNVARCHAR} columns. * * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateNCharacterStream} which takes a length parameter. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} or this * method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateNCharacterStream(int columnIndex, java.io.Reader x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value. The * driver does the necessary conversion from Java character format to * the national character set in the database. * It is intended for use when * updating {@code NCHAR},{@code NVARCHAR} * and {@code LONGNVARCHAR} columns. * * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateNCharacterStream} which takes a length parameter. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label is the name of the column * @param reader the {@code java.io.Reader} object containing * the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} or * this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateNCharacterStream(String columnLabel, java.io.Reader reader) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given input stream, which * will have the specified number of bytes. * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.InputStream}. Data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param inputStream An object that contains the data to set the parameter * value to. * @param length the number of bytes in the parameter data. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given input stream, which * will have the specified number of bytes. * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.InputStream}. Data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, * then the label is the name of the column. * @param inputStream An object that contains the data to set the parameter * value to. * @param length the number of bytes in the parameter data. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given input stream. * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.InputStream}. Data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateBlob} which takes a length parameter. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param inputStream An object that contains the data to set the parameter * value to. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given input stream. * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.InputStream}. Data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateBlob} which takes a length parameter. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label * is the name of the column * @param inputStream An object that contains the data to set the parameter * value to. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object, which is the given number of characters long. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateClob(int columnIndex, Reader reader, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object, which is the given number of characters long. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label is the name of the column * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateClob(String columnLabel, Reader reader, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateClob} which takes a length parameter. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param reader An object that contains the data to set the parameter value to. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateClob(int columnIndex, Reader reader) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateClob} which takes a length parameter. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label * is the name of the column * @param reader An object that contains the data to set the parameter value to. * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateClob(String columnLabel, Reader reader) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object, which is the given number of characters long. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second 2, ... * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; this method is called on a closed result set, * if a database access error occurs or * the result set concurrency is {@code CONCUR_READ_ONLY} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object, which is the given number of characters long. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label is the name of the column * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; this method is called on a closed result set; * if a database access error occurs or * the result set concurrency is {@code CONCUR_READ_ONLY} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateNClob} which takes a length parameter. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second 2, ... * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; this method is called on a closed result set, * if a database access error occurs or * the result set concurrency is {@code CONCUR_READ_ONLY} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateNClob(int columnIndex, Reader reader) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column using the given {@code Reader} * object. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateNClob} which takes a length parameter. *

* The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then * the label is the name of the column * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; this method is called on a closed result set; * if a database access error occurs or * the result set concurrency is {@code CONCUR_READ_ONLY} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateNClob(String columnLabel, Reader reader) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with an ascii stream value, which will have * the specified number of bytes. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateAsciiStream(int columnIndex, java.io.InputStream x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a binary stream value, which will have * the specified number of bytes. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBinaryStream(int columnIndex, java.io.InputStream x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value, which will have * the specified number of bytes. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateCharacterStream(int columnIndex, java.io.Reader x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with an ascii stream value, which will have * the specified number of bytes.. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then * the label is the name of the column * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateAsciiStream(String columnLabel, java.io.InputStream x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with an ascii stream value. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateAsciiStream} which takes a length parameter. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateAsciiStream(int columnIndex, java.io.InputStream x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with an ascii stream value. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateAsciiStream} which takes a length parameter. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label * is the name of the column * @param x the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateAsciiStream(String columnLabel, java.io.InputStream x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a binary stream value, which will have * the specified number of bytes. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then * the label is the name of the column * @param x the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBinaryStream(String columnLabel, java.io.InputStream x, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a binary stream value. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateBinaryStream} which takes a length parameter. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBinaryStream(int columnIndex, java.io.InputStream x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a binary stream value. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateBinaryStream} which takes a length parameter. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then * the label is the name of the column * @param x the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateBinaryStream(String columnLabel, java.io.InputStream x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value, which will have * the specified number of bytes. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then * the label is the name of the column * @param reader the {@code java.io.Reader} object containing * the new column value * @param length the length of the stream * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateCharacterStream(String columnLabel, java.io.Reader reader, long length) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateCharacterStream} which takes a length parameter. * * @param columnIndex the first column is 1, the second is 2, ... * @param x the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateCharacterStream(int columnIndex, java.io.Reader x) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Updates the designated column with a character stream value. * The updater methods are used to update column values in the * current row or the insert row. The updater methods do not * update the underlying database; instead the {@code updateRow} or * {@code insertRow} methods are called to update the database. * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code updateCharacterStream} which takes a length parameter. * * @param columnLabel the label for the column specified with the SQL AS clause. * If the SQL AS clause was not specified, then the label * is the name of the column * @param reader the {@code java.io.Reader} object containing * the new column value * @exception SQLException if a database access error occurs, * the result set concurrency is {@code CONCUR_READ_ONLY} * or this method is called on a closed result set * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void updateCharacterStream(String columnLabel, java.io.Reader reader) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.net.URL} value. * The driver converts this to an SQL {@code DATALINK} value * when it sends it to the database. * * @param parameterIndex the first parameter is 1, the second is 2, ... * @param x the {@code java.net.URL} object to be set * @exception SQLException if a database access error occurs or * this method is called on a closed {@code PreparedStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ public void setURL(int parameterIndex, java.net.URL x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. * This method differs from the {@code setCharacterStream (int, Reader)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code NCLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGNVARCHAR} or a {@code NCLOB} *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setNClob} which takes a length parameter. * * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if parameterIndex does not correspond to a parameter * marker in the SQL statement; * if the driver does not support national character sets; * if the driver can detect that a data conversion * error could occur; if a database access error occurs or * this method is called on a closed {@code PreparedStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * * @since 1.6 */ public void setNClob(int parameterIndex, Reader reader) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. * The {@code reader} must contain the number * of characters specified by length otherwise a {@code SQLException} will be * generated when the {@code CallableStatement} is executed. * This method differs from the {@code setCharacterStream (int, Reader, int)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code NCLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be send to the server as a {@code LONGNVARCHAR} or a {@code NCLOB} * * @param parameterName the name of the parameter to be set * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if parameterIndex does not correspond to a parameter * marker in the SQL statement; if the length specified is less than zero; * if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void setNClob(String parameterName, Reader reader, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. * This method differs from the {@code setCharacterStream (int, Reader)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code NCLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be send to the server as a {@code LONGNVARCHAR} or a {@code NCLOB} *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setNClob} which takes a length parameter. * * @param parameterName the name of the parameter * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if the driver does not support national character sets; * if the driver can detect that a data conversion * error could occur; if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * * @since 1.6 */ public void setNClob(String parameterName, Reader reader) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. The reader must contain the number * of characters specified by length otherwise a {@code SQLException} will be * generated when the {@code PreparedStatement} is executed. * This method differs from the {@code setCharacterStream (int, Reader, int)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code NCLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGNVARCHAR} or a {@code NCLOB} * * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if parameterIndex does not correspond to a parameter * marker in the SQL statement; if the length specified is less than zero; * if the driver does not support national character sets; * if the driver can detect that a data conversion * error could occur; if a database access error occurs or * this method is called on a closed {@code PreparedStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * * @since 1.6 */ public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code java.sql.NClob} object. * The driver converts this to an * SQL {@code NCLOB} value when it sends it to the database. * @param parameterIndex of the first parameter is 1, the second is 2, ... * @param value the parameter value * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; or if a database access error occurs * @since 1.6 */ public void setNClob(int parameterIndex, NClob value) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code String} object. * The driver converts this to a SQL {@code NCHAR} or * {@code NVARCHAR} or {@code LONGNVARCHAR} * @param parameterName the name of the column to be set * @param value the parameter value * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; or if a database access error occurs * @since 1.6 */ public void setNString(String parameterName, String value) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. The * {@code Reader} reads the data till end-of-file is reached. The * driver does the necessary conversion from Java character format to * the national character set in the database. * @param parameterIndex of the first parameter is 1, the second is 2, ... * @param value the parameter value * @param length the number of characters in the parameter data. * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur ; or if a database access error occurs * @since 1.6 */ public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. The * {@code Reader} reads the data till end-of-file is reached. The * driver does the necessary conversion from Java character format to * the national character set in the database. * @param parameterName the name of the column to be set * @param value the parameter value * @param length the number of characters in the parameter data. * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur; or if a database access error occurs * @since 1.6 */ public void setNCharacterStream(String parameterName, Reader value, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. The * {@code Reader} reads the data till end-of-file is reached. The * driver does the necessary conversion from Java character format to * the national character set in the database. *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setNCharacterStream} which takes a length parameter. * * @param parameterName the name of the parameter * @param value the parameter value * @throws SQLException if the driver does not support national * character sets; if the driver can detect that a data conversion * error could occur ; if a database access error occurs; or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setNCharacterStream(String parameterName, Reader value) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Timestamp} value, * using the given {@code Calendar} object. The driver uses * the {@code Calendar} object to construct an SQL {@code TIMESTAMP} value, * which the driver then sends to the database. With a * a {@code Calendar} object, the driver can calculate the timestamp * taking into account a custom timezone. If no * {@code Calendar} object is specified, the driver uses the default * timezone, which is that of the virtual machine running the application. * * @param parameterName the name of the parameter * @param x the parameter value * @param cal the {@code Calendar} object the driver will use * to construct the timestamp * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getTimestamp * @since 1.4 */ public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. The {@code reader} must contain the number * of characters specified by length otherwise a {@code SQLException} will be * generated when the {@code CallableStatement} is executed. * This method differs from the {@code setCharacterStream (int, Reader, int)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code CLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be send to the server as a {@code LONGVARCHAR} or a {@code CLOB} * * @param parameterName the name of the parameter to be set * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if parameterIndex does not correspond to a parameter * marker in the SQL statement; if the length specified is less than zero; * a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * * @since 1.6 */ public void setClob(String parameterName, Reader reader, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Clob} object. * The driver converts this to an SQL {@code CLOB} value when it * sends it to the database. * * @param parameterName the name of the parameter * @param x a {@code Clob} object that maps an SQL {@code CLOB} value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void setClob (String parameterName, Clob x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. * This method differs from the {@code setCharacterStream (int, Reader)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code CLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be send to the server as a {@code LONGVARCHAR} or a {@code CLOB} * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setClob} which takes a length parameter. * * @param parameterName the name of the parameter * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if a database access error occurs or this method is called on * a closed {@code CallableStatement} * * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setClob(String parameterName, Reader reader) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Date} value * using the default time zone of the virtual machine that is running * the application. * The driver converts this * to an SQL {@code DATE} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getDate * @since 1.4 */ public void setDate(String parameterName, java.sql.Date x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Date} value, * using the given {@code Calendar} object. The driver uses * the {@code Calendar} object to construct an SQL {@code DATE} value, * which the driver then sends to the database. With a * a {@code Calendar} object, the driver can calculate the date * taking into account a custom timezone. If no * {@code Calendar} object is specified, the driver uses the default * timezone, which is that of the virtual machine running the application. * * @param parameterName the name of the parameter * @param x the parameter value * @param cal the {@code Calendar} object the driver will use * to construct the date * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getDate * @since 1.4 */ public void setDate(String parameterName, java.sql.Date x, Calendar cal) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Time} value. * The driver converts this * to an SQL {@code TIME} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getTime * @since 1.4 */ public void setTime(String parameterName, java.sql.Time x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Time} value, * using the given {@code Calendar} object. The driver uses * the {@code Calendar} object to construct an SQL {@code TIME} value, * which the driver then sends to the database. With a * a {@code Calendar} object, the driver can calculate the time * taking into account a custom timezone. If no * {@code Calendar} object is specified, the driver uses the default * timezone, which is that of the virtual machine running the application. * * @param parameterName the name of the parameter * @param x the parameter value * @param cal the {@code Calendar} object the driver will use * to construct the time * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getTime * @since 1.4 */ public void setTime(String parameterName, java.sql.Time x, Calendar cal) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. * This method differs from the {@code setCharacterStream (int, Reader)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code CLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGVARCHAR} or a {@code CLOB} * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setClob} which takes a length parameter. * * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if a database access error occurs, this method is called on * a closed {@code PreparedStatement}or if parameterIndex does not correspond to a parameter * marker in the SQL statement * * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setClob(int parameterIndex, Reader reader) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to a {@code Reader} object. The reader must contain the number * of characters specified by length otherwise a {@code SQLException} will be * generated when the {@code PreparedStatement} is executed. * This method differs from the {@code setCharacterStream (int, Reader, int)} method * because it informs the driver that the parameter value should be sent to * the server as a {@code CLOB}. When the {@code setCharacterStream} method is used, the * driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGVARCHAR} or a {@code CLOB} * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if a database access error occurs, this method is called on * a closed {@code PreparedStatement}, if parameterIndex does not correspond to a parameter * marker in the SQL statement, or if the length specified is less than zero. * * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setClob(int parameterIndex, Reader reader, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to an {@code InputStream} object. The inputstream must contain the number * of characters specified by length otherwise a {@code SQLException} will be * generated when the {@code PreparedStatement} is executed. * This method differs from the {@code setBinaryStream (int, InputStream, int)} * method because it informs the driver that the parameter value should be * sent to the server as a {@code BLOB}. When the {@code setBinaryStream} method is used, * the driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB} * * @param parameterIndex index of the first parameter is 1, * the second is 2, ... * @param inputStream An object that contains the data to set the parameter * value to. * @param length the number of bytes in the parameter data. * @throws SQLException if a database access error occurs, * this method is called on a closed {@code PreparedStatement}, * if parameterIndex does not correspond * to a parameter marker in the SQL statement, if the length specified * is less than zero or if the number of bytes in the inputstream does not match * the specified length. * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * * @since 1.6 */ public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to an {@code InputStream} object. * This method differs from the {@code setBinaryStream (int, InputStream)} * This method differs from the {@code setBinaryStream (int, InputStream)} * method because it informs the driver that the parameter value should be * sent to the server as a {@code BLOB}. When the {@code setBinaryStream} method is used, * the driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB} * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setBlob} which takes a length parameter. * * @param parameterIndex index of the first parameter is 1, * the second is 2, ... * * @param inputStream An object that contains the data to set the parameter * value to. * @throws SQLException if a database access error occurs, * this method is called on a closed {@code PreparedStatement} or * if parameterIndex does not correspond * to a parameter marker in the SQL statement, * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * * @since 1.6 */ public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to an {@code InputStream} object. The {@code inputstream} must contain the number * of characters specified by length, otherwise a {@code SQLException} will be * generated when the {@code CallableStatement} is executed. * This method differs from the {@code setBinaryStream (int, InputStream, int)} * method because it informs the driver that the parameter value should be * sent to the server as a {@code BLOB}. When the {@code setBinaryStream} method is used, * the driver may have to do extra work to determine whether the parameter * data should be sent to the server as a {@code LONGVARBINARY} or a {@code BLOB} * * @param parameterName the name of the parameter to be set * the second is 2, ... * * @param inputStream An object that contains the data to set the parameter * value to. * @param length the number of bytes in the parameter data. * @throws SQLException if parameterIndex does not correspond * to a parameter marker in the SQL statement, or if the length specified * is less than zero; if the number of bytes in the inputstream does not match * the specified length; if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * * @since 1.6 */ public void setBlob(String parameterName, InputStream inputStream, long length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Blob} object. * The driver converts this to an SQL {@code BLOB} value when it * sends it to the database. * * @param parameterName the name of the parameter * @param x a {@code Blob} object that maps an SQL {@code BLOB} value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.6 */ public void setBlob (String parameterName, Blob x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to an {@code InputStream} object. * This method differs from the {@code setBinaryStream (int, InputStream)} * method because it informs the driver that the parameter value should be * sent to the server as a {@code BLOB}. When the {@code setBinaryStream} method is used, * the driver may have to do extra work to determine whether the parameter * data should be send to the server as a {@code LONGVARBINARY} or a {@code BLOB} * *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setBlob} which takes a length parameter. * * @param parameterName the name of the parameter * @param inputStream An object that contains the data to set the parameter * value to. * @throws SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * * @since 1.6 */ public void setBlob(String parameterName, InputStream inputStream) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the value of the designated parameter with the given object. The second * argument must be an object type; for integral values, the * {@code java.lang} equivalent objects should be used. * *

The given Java object will be converted to the given targetSqlType * before being sent to the database. * * If the object has a custom mapping (is of a class implementing the * interface {@code SQLData}), * the JDBC driver should call the method {@code SQLData.writeSQL} to write it * to the SQL data stream. * If, on the other hand, the object is of a class implementing * {@code Ref}, {@code Blob}, {@code Clob}, {@code NClob}, * {@code Struct}, {@code java.net.URL}, * or {@code Array}, the driver should pass it to the database as a * value of the corresponding SQL type. *

* Note that this method may be used to pass datatabase- * specific abstract data types. * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @param targetSqlType the SQL type (as defined in java.sql.Types) to be * sent to the database. The scale argument may further qualify this type. * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types, * this is the number of digits after the decimal point. For all other * types, this value will be ignored. * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if {@code targetSqlType} is * an {@code ARRAY, BLOB, CLOB, * DATALINK, JAVA_OBJECT, NCHAR, * NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML} * or {@code STRUCT} data type and the JDBC driver does not support * this data type * @see Types * @see #getObject * @since 1.4 */ public void setObject(String parameterName, Object x, int targetSqlType, int scale) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the value of the designated parameter with the given object. * This method is like the method {@code setObject} * above, except that it assumes a scale of zero. * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @param targetSqlType the SQL type (as defined in java.sql.Types) to be * sent to the database * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if {@code targetSqlType} is * an {@code ARRAY, BLOB, CLOB, * DATALINK, JAVA_OBJECT, NCHAR, * NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML} * or {@code STRUCT} data type and the JDBC driver does not support * this data type * @see #getObject * @since 1.4 */ public void setObject(String parameterName, Object x, int targetSqlType) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the value of the designated parameter with the given object. * The second parameter must be of type {@code Object}; therefore, the * {@code java.lang} equivalent objects should be used for built-in types. * *

The JDBC specification specifies a standard mapping from * Java {@code Object} types to SQL types. The given argument * will be converted to the corresponding SQL type before being * sent to the database. * *

Note that this method may be used to pass datatabase- * specific abstract data types, by using a driver-specific Java * type. * * If the object is of a class implementing the interface {@code SQLData}, * the JDBC driver should call the method {@code SQLData.writeSQL} * to write it to the SQL data stream. * If, on the other hand, the object is of a class implementing * {@code Ref}, {@code Blob}, {@code Clob}, {@code NClob}, * {@code Struct}, {@code java.net.URL}, * or {@code Array}, the driver should pass it to the database as a * value of the corresponding SQL type. *

* This method throws an exception if there is an ambiguity, for example, if the * object is of a class implementing more than one of the interfaces named above. * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @exception SQLException if a database access error occurs, * this method is called on a closed {@code CallableStatement} or if the given * {@code Object} parameter is ambiguous * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getObject * @since 1.4 */ public void setObject(String parameterName, Object x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given input stream, which will have * the specified number of bytes. * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.InputStream}. Data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. * * @param parameterName the name of the parameter * @param x the Java input stream that contains the ASCII parameter value * @param length the number of bytes in the stream * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ public void setAsciiStream(String parameterName, java.io.InputStream x, int length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given input stream, which will have * the specified number of bytes. * When a very large binary value is input to a {@code LONGVARBINARY} * parameter, it may be more practical to send it via a * {@code java.io.InputStream} object. The data will be read from the stream * as needed until end-of-file is reached. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. * * @param parameterName the name of the parameter * @param x the java input stream which contains the binary parameter value * @param length the number of bytes in the stream * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ public void setBinaryStream(String parameterName, java.io.InputStream x, int length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code Reader} * object, which is the given number of characters long. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. * * @param parameterName the name of the parameter * @param reader the {@code java.io.Reader} object that * contains the UNICODE data used as the designated parameter * @param length the number of characters in the stream * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ public void setCharacterStream(String parameterName, java.io.Reader reader, int length) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given input stream. * When a very large ASCII value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.InputStream}. Data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setAsciiStream} which takes a length parameter. * * @param parameterName the name of the parameter * @param x the Java input stream that contains the ASCII parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setAsciiStream(String parameterName, java.io.InputStream x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given input stream. * When a very large binary value is input to a {@code LONGVARBINARY} * parameter, it may be more practical to send it via a * {@code java.io.InputStream} object. The data will be read from the * stream as needed until end-of-file is reached. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setBinaryStream} which takes a length parameter. * * @param parameterName the name of the parameter * @param x the java input stream which contains the binary parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setBinaryStream(String parameterName, java.io.InputStream x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code Reader} * object. * When a very large UNICODE value is input to a {@code LONGVARCHAR} * parameter, it may be more practical to send it via a * {@code java.io.Reader} object. The data will be read from the stream * as needed until end-of-file is reached. The JDBC driver will * do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard * Java stream object or your own subclass that implements the * standard interface. *

Note: Consult your JDBC driver documentation to determine if * it might be more efficient to use a version of * {@code setCharacterStream} which takes a length parameter. * * @param parameterName the name of the parameter * @param reader the {@code java.io.Reader} object that contains the * Unicode data * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ public void setCharacterStream(String parameterName, java.io.Reader reader) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given * {@code java.math.BigDecimal} value. * The driver converts this to an SQL {@code NUMERIC} value when * it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getBigDecimal * @since 1.4 */ public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code String} value. * The driver converts this * to an SQL {@code VARCHAR} or {@code LONGVARCHAR} value * (depending on the argument's * size relative to the driver's limits on {@code VARCHAR} values) * when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getString * @since 1.4 */ public void setString(String parameterName, String x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java array of bytes. * The driver converts this to an SQL {@code VARBINARY} or * {@code LONGVARBINARY} (depending on the argument's size relative * to the driver's limits on {@code VARBINARY} values) when it sends * it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getBytes * @since 1.4 */ public void setBytes(String parameterName, byte x[]) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given {@code java.sql.Timestamp} value. * The driver * converts this to an SQL {@code TIMESTAMP} value when it sends it to the * database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getTimestamp * @since 1.4 */ public void setTimestamp(String parameterName, java.sql.Timestamp x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to SQL {@code NULL}. * *

Note: You must specify the parameter's SQL type. * * @param parameterName the name of the parameter * @param sqlType the SQL type code defined in {@code java.sql.Types} * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ public void setNull(String parameterName, int sqlType) throws SQLException { throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to SQL {@code NULL}. * This version of the method {@code setNull} should * be used for user-defined types and REF type parameters. Examples * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and * named array types. * *

Note: To be portable, applications must give the * SQL type code and the fully-qualified SQL type name when specifying * a NULL user-defined or REF parameter. In the case of a user-defined type * the name is the type name of the parameter itself. For a REF * parameter, the name is the type name of the referenced type. If * a JDBC driver does not need the type code or type name information, * it may ignore it. * * Although it is intended for user-defined and Ref parameters, * this method may be used to set a null parameter of any JDBC type. * If the parameter does not have a user-defined or REF type, the given * typeName is ignored. * * * @param parameterName the name of the parameter * @param sqlType a value from {@code java.sql.Types} * @param typeName the fully-qualified name of an SQL user-defined type; * ignored if the parameter is not a user-defined type or * SQL {@code REF} value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ public void setNull (String parameterName, int sqlType, String typeName) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code boolean} value. * The driver converts this * to an SQL {@code BIT} or {@code BOOLEAN} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @see #getBoolean * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ public void setBoolean(String parameterName, boolean x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code byte} value. * The driver converts this * to an SQL {@code TINYINT} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getByte * @since 1.4 */ public void setByte(String parameterName, byte x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code short} value. * The driver converts this * to an SQL {@code SMALLINT} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getShort * @since 1.4 */ public void setShort(String parameterName, short x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code int} value. * The driver converts this * to an SQL {@code INTEGER} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getInt * @since 1.4 */ public void setInt(String parameterName, int x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code long} value. * The driver converts this * to an SQL {@code BIGINT} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getLong * @since 1.4 */ public void setLong(String parameterName, long x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code float} value. * The driver converts this * to an SQL {@code FLOAT} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getFloat * @since 1.4 */ public void setFloat(String parameterName, float x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * Sets the designated parameter to the given Java {@code double} value. * The driver converts this * to an SQL {@code DOUBLE} value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @exception SQLException if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @see #getDouble * @since 1.4 */ public void setDouble(String parameterName, double x) throws SQLException{ throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** * This method re populates the resBundle * during the deserialization process */ private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { // Default state initialization happens here ois.defaultReadObject(); // Initialization of transient Res Bundle happens here . try { resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) {} } static final long serialVersionUID = -3591946023893483003L; //------------------------- JDBC 4.1 ----------------------------------- public T getObject(int columnIndex, Class type) throws SQLException { throw new SQLFeatureNotSupportedException("Not supported yet."); } public T getObject(String columnLabel, Class type) throws SQLException { throw new SQLFeatureNotSupportedException("Not supported yet."); } }