/*
* Copyright (c) 2003, 2019, 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<Integer> iMatchColumns;
/**
* The Vector that will hold the Match Column names.
*/
private Vector<String> 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.
* <P>
* The following is true of a default {@code JdbcRowSet} instance:
* <UL>
* <LI>Does not show deleted rows
* <LI>Has no time limit for how long a driver may take to
* execute the rowset's command
* <LI>Has no limit for the number of rows it may contain
* <LI>Has no limit for the number of bytes a column may contain
* <LI>Has a scrollable cursor and does not show changes
* made by others
* <LI>Will not see uncommitted data (make "dirty" reads)
* <LI>Has escape processing turned on
* <LI>Has its connection's type map set to {@code null}
* <LI>Has an empty {@code Hashtable} object for storing any
* parameters that are set
* </UL>
* 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<Integer>(10);
for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,Integer.valueOf(-1));
}
strMatchColumns = new Vector<String>(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.
* <P>
* The following is true of a default {@code JdbcRowSet} instance:
* <UL>
* <LI>Does not show deleted rows
* <LI>Has no time limit for how long a driver may take to
* execute the rowset's command
* <LI>Has no limit for the number of rows it may contain
* <LI>Has no limit for the number of bytes a column may contain
* <LI>Has a scrollable cursor and does not show changes
* made by others
* <LI>Will not see uncommitted data (make "dirty" reads)
* <LI>Has escape processing turned on
* <LI>Has its connection's type map set to {@code null}
* <LI>Has an empty {@code Hashtable} object for storing any
* parameters that are set
* </UL>
* 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<Integer>(10);
for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,Integer.valueOf(-1));
}
strMatchColumns = new Vector<String>(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.
*
* <P>
* The following is true of a default {@code JdbcRowSet} instance:
* <UL>
* <LI>Does not show deleted rows
* <LI>Has no time limit for how long a driver may take to
* execute the rowset's command
* <LI>Has no limit for the number of rows it may contain
* <LI>Has no limit for the number of bytes a column may contain
* <LI>Has a scrollable cursor and does not show changes
* made by others
* <LI>Will not see uncommitted data (make "dirty" reads)
* <LI>Has escape processing turned on
* <LI>Has its connection's type map set to {@code null}
* <LI>Has an empty {@code Hashtable} object for storing any
* parameters that are set
* </UL>
*
* @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<Integer>(10);
for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,Integer.valueOf(-1));
}
strMatchColumns = new Vector<String>(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.
*
* <P>
* The following is true of a default {@code JdbcRowSet} instance:
* <UL>
* <LI>Does not show deleted rows
* <LI>Has no time limit for how long a driver may take to
* execute the rowset's command
* <LI>Has no limit for the number of rows it may contain
* <LI>Has no limit for the number of bytes a column may contain
* <LI>Has a scrollable cursor and does not show changes
* made by others
* <LI>Will not see uncommitted data (make "dirty" reads)
* <LI>Has escape processing turned on
* <LI>Has its connection's type map set to {@code null}
* <LI>Has an empty {@code Hashtable} object for storing any
* parameters that are set
* </UL>
*
* @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<Integer>(10);
for(int i = 0; i < 10 ; i++) {
iMatchColumns.add(i,Integer.valueOf(-1));
}
strMatchColumns = new Vector<String>(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.
* <P>
* 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.
* <P>
* 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<String, Class<?>> 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.
*
* <P>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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> All the data in the returned stream must be
* read prior to getting the value of any other column. The next
* call to a {@code getXXX} 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.
*
* <P><B>Note:</B> All the data in the returned stream must be
* read prior to getting the value of any other column. The next
* call to a {@code getXXX} 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.
*
* <P><B>Note:</B> All the data in the returned stream must be
* read prior to getting the value of any other column. The next
* call to a {@code getXXX} 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.
*
* <P><B>Note:</B> All the data in the returned stream must be
* read prior to getting the value of any other column. The next
* call to a {@code getXXX} 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.
*
* <P><B>Note:</B> All the data in the returned stream must be
* read prior to getting the value of any other column. The next
* call to a {@code getXXX} 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.
*
* <P><B>Note:</B> All the data in the returned stream must be
* read prior to getting the value of any other column. The next
* call to a {@code getXXX} 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.
*
* <P>The warning chain is automatically cleared each time a new
* row is read.
*
* <P><B>Note:</B> This warning chain only covers warnings caused
* by {@code ResultSet} 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.
*
* <P>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.
*
* <P>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.
*
* <P><B>Note:</B> 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();
}
/**
* <p>Gets the value of the designated column in the current row
* of this rowset's {@code ResultSet} object as
* an {@code Object}.
*
* <p>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.
*
* <p>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);
}
/**
* <p>Gets the value of the designated column in the current row
* of this rowset's {@code ResultSet} object as
* an {@code Object}.
*
* <p>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.
*
* <p>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.
*
* <p>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.
*
* <p>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.
*
* <p>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.
*
* <p><B>Note:</B> 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.
*
* <p>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.
*
* <p><B>Note:</B> 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.
*
* <P>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.
*
* <P> 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<String,Class<?>> 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<String,Class<?>> 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.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnIdxes the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnIdx is
* not the same as set using {@code setMatchColumn(int [])}
*/
public void unsetMatchColumn(int[] columnIdxes) throws SQLException {
int i_val;
for( int j= 0 ;j < columnIdxes.length; j++) {
i_val = (Integer.parseInt(iMatchColumns.get(j).toString()));
if(columnIdxes[j] != i_val) {
throw new SQLException(resBundle.handleGetObject("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.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnIdxes the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnName is
* not the same as set using {@code setMatchColumn(String [])}
*/
public void unsetMatchColumn(String[] columnIdxes) throws SQLException {
for(int j = 0 ;j < columnIdxes.length; j++) {
if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){
throw new SQLException(resBundle.handleGetObject("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.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method {@code getMatchColumnIndexes} is called.
*
* @param columnIdxes the indexes into this rowset
* object's internal representation of parameter values; the
* first parameter is 0, the second is 1, and so on; must be
* {@code 0} or greater
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(int[] columnIdxes) throws SQLException {
for(int j = 0 ; j < columnIdxes.length; j++) {
if( columnIdxes[j] < 0 ) {
throw new SQLException(resBundle.handleGetObject("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.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method {@code getMatchColumn} is called.
*
* @param columnNames the name of the column into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(String[] columnNames) throws SQLException {
for(int j = 0; j < columnNames.length; j++) {
if( columnNames[j] == null || columnNames[j].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.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method {@code getMatchColumn} is called.
*
* @param columnIdx the index into this rowset
* object's internal representation of parameter values; the
* first parameter is 0, the second is 1, and so on; must be
* {@code 0} or greater
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(int columnIdx) throws SQLException {
// validate, if col is ok to be set
if(columnIdx < 0) {
throw new SQLException(resBundle.handleGetObject("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.
* <P>
* The parameter value set by this method is stored internally and
* will be supplied as the appropriate parameter in this rowset's
* command when the method {@code getMatchColumn} is called.
*
* @param columnName the name of the column into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds
*/
public void setMatchColumn(String columnName) throws SQLException {
// validate, if col is ok to be set
if(columnName == null || (columnName= columnName.trim()).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.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnIdx the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnIdx is
* not the same as set using {@code setMatchColumn(int)}
*/
public void unsetMatchColumn(int columnIdx) throws SQLException {
// check if we are unsetting the SAME column
if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) ) ) {
throw new SQLException(resBundle.handleGetObject("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.
* <P>
* The parameter value unset by this method should be same
* as was set.
*
* @param columnName the index into this rowset
* object's internal representation of parameter values
* @throws SQLException if an error occurs or the
* parameter index is out of bounds or if the columnName is
* not the same as set using {@code setMatchColumn(String)}
*
*/
public void unsetMatchColumn(String columnName) throws SQLException {
// check if we are unsetting the same column
columnName = columnName.trim();
if(!((strMatchColumns.get(0)).equals(columnName))) {
throw new SQLException(resBundle.handleGetObject("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.)
* <P>
* 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.)
* <P>
* 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.
* <P>
* 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.)
* <P>
* 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).
* <P>
* 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> T unwrap(java.lang.Class<T> 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.
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param inputStream An object that contains the data to set the parameter
* value to.
* @param length the number of bytes in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is {@code CONCUR_READ_ONLY}
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause.
* If the SQL AS clause was not specified,
* then the label is the name of the column.
* @param inputStream An object that contains the data to set the parameter
* value to.
* @param length the number of bytes in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is {@code CONCUR_READ_ONLY}
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
*
* <P><B>Note:</B> Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* {@code updateBlob} which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param inputStream An object that contains the data to set the parameter
* value to.
* @exception SQLException if a database access error occurs,
* the result set concurrency is {@code CONCUR_READ_ONLY}
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* {@code updateBlob} which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause.
* If the SQL AS clause was not specified, then the 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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is {@code CONCUR_READ_ONLY}
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause.
* If the SQL AS clause was not specified, then the label is the name of the column
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @exception SQLException if a database access error occurs,
* the result set concurrency is {@code CONCUR_READ_ONLY}
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* {@code updateClob} which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnIndex the first column is 1, the second is 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @exception SQLException if a database access error occurs,
* the result set concurrency is {@code CONCUR_READ_ONLY}
* or this method is called on a closed result set
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateClob(int columnIndex, Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* {@code updateClob} which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause.
* If the SQL AS clause was not specified, then the 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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnIndex the first column is 1, the second 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set,
* if a database access error occurs or
* the result set concurrency is {@code CONCUR_READ_ONLY}
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause.
* If the SQL AS clause was not specified, then the label is the name of the column
* @param reader An object that contains the data to set the parameter value to.
* @param length the number of characters in the parameter data.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set;
* if a database access error occurs or
* the result set concurrency is {@code CONCUR_READ_ONLY}
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* {@code updateNClob} which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnIndex the first column is 1, the second 2, ...
* @param reader An object that contains the data to set the parameter value to.
* @throws SQLException if the driver does not support national
* character sets; if the driver can detect that a data conversion
* error could occur; this method is called on a closed result set,
* if a database access error occurs or
* the result set concurrency is {@code CONCUR_READ_ONLY}
* @exception SQLFeatureNotSupportedException if the JDBC driver does not support
* this method
* @since 1.6
*/
public void updateNClob(int columnIndex, Reader reader) throws SQLException {
throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("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.
*
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> Consult your JDBC driver documentation to determine if
* it might be more efficient to use a version of
* {@code updateNClob} which takes a length parameter.
* <p>
* The updater methods are used to update column values in the
* current row or the insert row. The updater methods do not
* update the underlying database; instead the {@code updateRow} or
* {@code insertRow} methods are called to update the database.
*
* @param columnLabel the label for the column specified with the SQL AS clause.
* If the SQL AS clause was not specified, then
* the 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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.
*
* <P><B>Note:</B> 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}
* <P><B>Note:</B> 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}
* <P><B>Note:</B> 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.
* <P><B>Note:</B> This stream object can either be a standard
* Java stream object or your own subclass that implements the
* standard interface.
* <P><B>Note:</B> 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}
*
* <P><B>Note:</B> 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}
*
* <P><B>Note:</B> 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}
*
* <P><B>Note:</B> 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
/**代码未完, 请加载全部代码(NowJava.com).**/