/*
* Craftsman Spy.
* Copyright (C) 2005 S�bastien LECACHEUR
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package craftsman.spy;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.Date;
import java.sql.Ref;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Calendar;
import java.util.Map;
/**
* A table of data representing a database result set, which is usually
* generated by executing a statement that queries the database.
*
* @author S�bastien LECACHEUR
*/
public class SpyResultSet extends SpyEntity implements ResultSet {
/**
* The real result set instance.
*/
private ResultSet real = null;
/**
* The SQL statement which create this SQL result set.
*/
private Statement statement = null;
/**
* The index of the current row.
*/
private int rowCount = 0;
/**
* The index of the maximum getted row.
*/
private int maxRowCount = 0;
/**
* Constructs a new Spy JDBC result set.
*
* @param c Connection The used connection.
* @param stmt Statement The used statement.
* @param rs ResultSet The real JDBC result set.
*/
protected SpyResultSet ( Connection c, Statement stmt, ResultSet rs) {
super(c);
statement = stmt;
real = rs;
}
/**
* Retrieves the the string representation of the current
* row of the result set.
*
* @return String The string representation of the current row.
*/
private String getDisplayableResultSetRow() {
StringBuffer displayableResultSetRow = new StringBuffer();
try {
ResultSetMetaData md = real.getMetaData();
for ( int i = 1; i <= md.getColumnCount(); i++) {
displayableResultSetRow.append(md.getColumnName(i))
.append('=');
switch ( md.getColumnType(i)) {
case Types.ARRAY:
case Types.BLOB:
case Types.CHAR:
case Types.CLOB:
case Types.DATALINK:
case Types.DATE:
case Types.JAVA_OBJECT:
case Types.LONGVARBINARY:
case Types.LONGVARCHAR:
case Types.REF:
case Types.TIME:
case Types.TIMESTAMP:
case Types.VARBINARY:
case Types.VARCHAR: if ( real.getString(i)!=null) {
displayableResultSetRow.append('\'').append(real.getString(i)).append('\'');
} else {
displayableResultSetRow.append("NULL");
}
break;
case Types.NULL: displayableResultSetRow.append("NULL");
break;
default: if ( real.getString(i)!=null) {
displayableResultSetRow.append(real.getString(i));
} else {
displayableResultSetRow.append("NULL");
}
break;
}
displayableResultSetRow.append(',');
}
if ( md.getColumnCount() >= 1) {
displayableResultSetRow.deleteCharAt(displayableResultSetRow.length()-1);
}
} catch ( SQLException e) {
if ( log.isErrorEnabled()) log.error(getId()+":unable to display resultset row",e);
}
return displayableResultSetRow.toString();
}
/**
* @see ResultSet#getConcurrency()
*/
public int getConcurrency() throws SQLException {
return real.getConcurrency();
}
/**
* @see ResultSet#getFetchDirection()
*/
public int getFetchDirection() throws SQLException {
return real.getFetchDirection();
}
/**
* @see ResultSet#getFetchSize()
*/
public int getFetchSize() throws SQLException {
return real.getFetchSize();
}
/**
* @see ResultSet#getRow()
*/
public int getRow() throws SQLException {
return real.getRow();
}
/**
* @see ResultSet#getType()
*/
public int getType() throws SQLException {
return real.getType();
}
/**
* @see ResultSet#afterLast()
*/
public void afterLast() throws SQLException {
real.afterLast();
}
/**
* @see ResultSet#beforeFirst()
*/
public void beforeFirst() throws SQLException {
real.beforeFirst();
}
/**
* @see ResultSet#cancelRowUpdates()
*/
public void cancelRowUpdates() throws SQLException {
real.cancelRowUpdates();
}
/**
* @see ResultSet#clearWarnings()
*/
public void clearWarnings() throws SQLException {
real.clearWarnings();
}
/**
* @see ResultSet#close()
*/
public void close() throws SQLException {
real.close();
}
/**
* @see ResultSet#deleteRow()
*/
public void deleteRow() throws SQLException {
//TODO log row deletion
real.deleteRow();
}
/**
* @see ResultSet#insertRow()
*/
public void insertRow() throws SQLException {
//TODO log row insertion
real.insertRow();
}
/**
* @see ResultSet#moveToCurrentRow()
*/
public void moveToCurrentRow() throws SQLException {
real.moveToCurrentRow();
}
/**
* @see ResultSet#moveToInsertRow()
*/
public void moveToInsertRow() throws SQLException {
real.moveToInsertRow();
}
/**
* @see ResultSet#refreshRow()
*/
public void refreshRow() throws SQLException {
real.refreshRow();
}
/**
* @see ResultSet#updateRow()
*/
public void updateRow() throws SQLException {
//TODO log row updating
real.updateRow();
}
/**
* @see ResultSet#first()
*/
public boolean first() throws SQLException {
return real.first();
}
/**
* @see ResultSet#isAfterLast()
*/
public boolean isAfterLast() throws SQLException {
return real.isAfterLast();
}
/**
* @see ResultSet#isBeforeFirst()
*/
public boolean isBeforeFirst() throws SQLException {
return real.isBeforeFirst();
}
/**
* @see ResultSet#isFirst()
*/
public boolean isFirst() throws SQLException {
return real.isFirst();
}
/**
* @see ResultSet#isLast()
*/
public boolean isLast() throws SQLException {
return real.isLast();
}
/**
* @see ResultSet#last()
*/
public boolean last() throws SQLException {
return real.last();
}
/**
* @see ResultSet#next()
*/
public boolean next() throws SQLException {
boolean result = false;
try {
result = real.next();
if ( result) {
rowCount++;
// Log the row only if it was never been logged
if ( rowCount > maxRowCount) {
maxRowCount++;
if ( log.isInfoEnabled()) log.info(getId()+":"+getDisplayableResultSetRow()+" (row "+rowCount+")");
}
} else {
if ( log.isInfoEnabled()) log.info(getId()+":total rowcount is "+rowCount);
}
} catch ( SQLException e) {
if ( log.isErrorEnabled()) log.error(getId()+": state="+e.getSQLState()+",code="+e.getErrorCode(),e);
throw e;
}
return result;
}
/**
* @see ResultSet#previous()
*/
public boolean previous() throws SQLException {
boolean result = real.previous();
if ( result) {
rowCount--;
}
return result;
}
/**
* @see ResultSet#rowDeleted()
*/
public boolean rowDeleted() throws SQLException {
return real.rowDeleted();
}
/**
* @see ResultSet#rowInserted()
*/
public boolean rowInserted() throws SQLException {
return real.rowInserted();
}
/**
* @see ResultSet#rowUpdated()
*/
public boolean rowUpdated() throws SQLException {
return real.rowUpdated();
}
/**
* @see ResultSet#wasNull()
*/
public boolean wasNull() throws SQLException {
return real.wasNull();
}
/**
* @see ResultSet#getByte(int)
*/
public byte getByte(int columnIndex) throws SQLException {
return real.getByte(columnIndex);
}
/**
* @see ResultSet#getDouble(int)
*/
public double getDouble(int columnIndex) throws SQLException {
return real.getByte(columnIndex);
}
/**
* @see ResultSet#getFloat(int)
*/
public float getFloat(int columnIndex) throws SQLException {
return real.getFloat(columnIndex);
}
/**
* @see ResultSet#getInt(int)
*/
public int getInt(int columnIndex) throws SQLException {
return real.getInt(columnIndex);
}
/**
* @see ResultSet#getLong(int)
*/
public long getLong(int columnIndex) throws SQLException {
return real.getLong(columnIndex);
}
/**
* @see ResultSet#getShort(int)
*/
public short getShort(int columnIndex) throws SQLException {
return real.getShort(columnIndex);
}
/**
* @see ResultSet#setFetchDirection(int)
*/
public void setFetchDirection(int direction) throws SQLException {
real.setFetchDirection(direction);
}
/**
* @see ResultSet#setFetchSize(int)
*/
public void setFetchSize(int rows) throws SQLException {
real.setFetchSize(rows);
}
/**
* @see ResultSet#updateNull(int)
*/
public void updateNull(int columnIndex) throws SQLException {
real.updateNull(columnIndex);
}
/**
* @see ResultSet#absolute(int)
*/
public boolean absolute(int row) throws SQLException {
return real.absolute(row);
}
/**
* @see ResultSet#getBoolean(int)
*/
public boolean getBoolean(int columnIndex) throws SQLException {
return real.getBoolean(columnIndex);
}
/**
* @see ResultSet#relative(int)
*/
public boolean relative(int rows) throws SQLException {
return real.relative(rows);
}
/**
* @see ResultSet#getBytes(int)
*/
public byte[] getBytes(int columnIndex) throws SQLException {
return real.getBytes(columnIndex);
}
/**
* @see ResultSet#updateByte(int, byte)
*/
public void updateByte(int columnIndex, byte x) throws SQLException {
real.updateByte(columnIndex,x);
}
/**
* @see ResultSet#updateDouble(int, double)
*/
public void updateDouble(int columnIndex, double x) throws SQLException {
real.updateDouble(columnIndex,x);
}
/**
* @see ResultSet#updateFloat(int, float)
*/
public void updateFloat(int columnIndex, float x) throws SQLException {
real.updateFloat(columnIndex,x);
}
/**
* @see ResultSet#updateInt(int, int)
*/
public void updateInt(int columnIndex, int x) throws SQLException {
real.updateInt(columnIndex,x);
}
/**
* @see ResultSet#updateLong(int, long)
*/
public void updateLong(int columnIndex, long x) throws SQLException {
real.updateLong(columnIndex,x);
}
/**
* @see ResultSet#updateShort(int, short)
*/
public void updateShort(int columnIndex, short x) throws SQLException {
real.updateShort(columnIndex,x);
}
/**
* @see ResultSet#updateBoolean(int, boolean)
*/
public void updateBoolean(int columnIndex, boolean x) throws SQLException {
real.updateBoolean(columnIndex,x);
}
/**
* @see ResultSet#updateBytes(int, byte[])
*/
public void updateBytes(int columnIndex, byte[] x) throws SQLException {
real.updateBytes(columnIndex,x);
}
/**
* @see ResultSet#getAsciiStream(int)
*/
public InputStream getAsciiStream(int columnIndex) throws SQLException {
return real.getAsciiStream(columnIndex);
}
/**
* @see ResultSet#getBinaryStream(int)
*/
public InputStream getBinaryStream(int columnIndex) throws SQLException {
return real.getBinaryStream(columnIndex);
}
/**
* @see ResultSet#getUnicodeStream(int)
*/
public InputStream getUnicodeStream(int columnIndex) throws SQLException {
return real.getUnicodeStream(columnIndex);
}
/**
* @see ResultSet#updateAsciiStream(int, java.io.InputStream, int)
*/
public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
real.updateAsciiStream(columnIndex,x,length);
}
/**
* @see ResultSet#updateBinaryStream(int, java.io.InputStream, int)
*/
public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
real.updateBinaryStream(columnIndex,x,length);
}
/**
* @see ResultSet#getCharacterStream(int)
*/
public Reader getCharacterStream(int columnIndex) throws SQLException {
return real.getCharacterStream(columnIndex);
}
/**
* @see ResultSet#updateCharacterStream(int, java.io.Reader, int)
*/
public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
real.updateCharacterStream(columnIndex,x,length);
}
/**
* @see ResultSet#getObject(int)
*/
public Object getObject(int columnIndex) throws SQLException {
return real.getObject(columnIndex);
}
/**
* @see ResultSet#updateObject(int, Object)
*/
public void updateObject(int columnIndex, Object x) throws SQLException {
real.updateObject(columnIndex,x);
}
/**
* @see ResultSet#updateObject(int, Object, int)
*/
public void updateObject(int columnIndex, Object x, int scale) throws SQLException {
real.updateObject(columnIndex,x,scale);
}
/**
* @see ResultSet#getCursorName()
*/
public String getCursorName() throws SQLException {
return real.getCursorName();
}
/**
* @see ResultSet#getString(int)
*/
public String getString(int columnIndex) throws SQLException {
return real.getString(columnIndex);
}
/**
* @see ResultSet#updateString(int, String)
*/
public void updateString(int columnIndex, String x) throws SQLException {
real.updateString(columnIndex,x);
}
/**
* @see ResultSet#getByte(String)
*/
public byte getByte(String columnName) throws SQLException {
return real.getByte(columnName);
}
/**
* @see ResultSet#getDouble(String)
*/
public double getDouble(String columnName) throws SQLException {
return real.getDouble(columnName);
}
/**
* @see ResultSet#getFloat(String)
*/
public float getFloat(String columnName) throws SQLException {
return real.getFloat(columnName);
}
/**
* @see ResultSet#findColumn(String)
*/
public int findColumn(String columnName) throws SQLException {
return real.findColumn(columnName);
}
/**
* @see ResultSet#getInt(String)
*/
public int getInt(String columnName) throws SQLException {
return real.getInt(columnName);
}
/**
* @see ResultSet#getLong(String)
*/
public long getLong(String columnName) throws SQLException {
return real.getLong(columnName);
}
/**
* @see ResultSet#getShort(String)
*/
public short getShort(String columnName) throws SQLException {
return real.getShort(columnName);
}
/**
* @see ResultSet#updateNull(String)
*/
public void updateNull(String columnName) throws SQLException {
real.updateNull(columnName);
}
/**
* @see ResultSet#getBoolean(String)
*/
public boolean getBoolean(String columnName) throws SQLException {
return real.getBoolean(columnName);
}
/**
* @see ResultSet#getBytes(String)
*/
public byte[] getBytes(String columnName) throws SQLException {
return real.getBytes(columnName);
}
/**
* @see ResultSet#updateByte(String, byte)
*/
public void updateByte(String columnName, byte x) throws SQLException {
real.updateByte(columnName,x);
}
/**
* @see ResultSet#updateDouble(String, double)
*/
public void updateDouble(String columnName, double x) throws SQLException {
real.updateDouble(columnName,x);
}
/**
* @see ResultSet#updateFloat(String, float)
*/
public void updateFloat(String columnName, float x) throws SQLException {
real.updateFloat(columnName,x);
}
/**
* @see ResultSet#updateInt(String, int)
*/
public void updateInt(String columnName, int x) throws SQLException {
real.updateInt(columnName,x);
}
/**
* @see ResultSet#updateLong(String, long)
*/
public void updateLong(String columnName, long x) throws SQLException {
real.updateLong(columnName,x);
}
/**
* @see ResultSet#updateShort(String, short)
*/
public void updateShort(String columnName, short x) throws SQLException {
real.updateShort(columnName,x);
}
/**
* @see ResultSet#updateBoolean(String, boolean)
*/
public void updateBoolean(String columnName, boolean x) throws SQLException {
real.updateBoolean(columnName,x);
}
/**
* @see ResultSet#updateBytes(String, byte[])
*/
public void updateBytes(String columnName, byte[] x) throws SQLException {
real.updateBytes(columnName,x);
}
/**
* @see ResultSet#getBigDecimal(int)
*/
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
return real.getBigDecimal(columnIndex);
}
/**
* @see ResultSet#getBigDecimal(int, int)
*/
public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
return real.getBigDecimal(columnIndex,scale);
}
/**
* @see ResultSet#updateBigDecimal(int, java.math.BigDecimal)
*/
public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
real.updateBigDecimal(columnIndex,x);
}
/**
* @see ResultSet#getURL(int)
*/
public URL getURL(int columnIndex) throws SQLException {
return real.getURL(columnIndex);
}
/**
* @see ResultSet#getArray(int)
*/
public Array getArray(int i) throws SQLException {
return real.getArray(i);
}
/**
* @see ResultSet#updateArray(int, Array)
*/
public void updateArray(int columnIndex, Array x) throws SQLException {
real.updateArray(columnIndex,x);
}
/**
* @see ResultSet#getBlob(int)
*/
public Blob getBlob(int i) throws SQLException {
return real.getBlob(i);
}
/**
* @see ResultSet#updateBlob(int, Blob)
*/
public void updateBlob(int columnIndex, Blob x) throws SQLException {
real.updateBlob(columnIndex,x);
}
/**
* @see ResultSet#getClob(int)
*/
public Clob getClob(int i) throws SQLException {
return real.getClob(i);
}
/**
* @see ResultSet#updateClob(int, Clob)
*/
public void updateClob(int columnIndex, Clob x) throws SQLException {
real.updateClob(columnIndex,x);
}
/**
* @see ResultSet#getDate(int)
*/
public Date getDate(int columnIndex) throws SQLException {
return real.getDate(columnIndex);
}
/**
* @see ResultSet#updateDate(int, Date)
*/
public void updateDate(int columnIndex, Date x) throws SQLException {
real.updateDate(columnIndex,x);
}
/**
* @see ResultSet#getRef(int)
*/
public Ref getRef(int i) throws SQLException {
return real.getRef(i);
}
/**
* @see ResultSet#updateRef(int, Ref)
*/
public void updateRef(int columnIndex, Ref x) throws SQLException {
real.updateRef(columnIndex,x);
}
/**
* @see ResultSet#getMetaData()
*/
public ResultSetMetaData getMetaData() throws SQLException {
return real.getMetaData();
}
/**
* @see ResultSet#getWarnings()
*/
public SQLWarning getWarnings() throws SQLException {
SQLWarning current, sw = real.getWarnings();
if ( (current = sw)!=null) {
do {
if ( log.isInfoEnabled()) log.info(getId()+":sql warning state="+current.getSQLState()+",code="+current.getErrorCode()+",message="+current.getMessage());
} while ( (current = current.getNextWarning())!=null);
}
return sw;
}
/**
* @see ResultSet#getStatement()
*/
public Statement getStatement() throws SQLException {
return statement;
}
/**
* @see ResultSet#getTime(int)
*/
public Time getTime(int columnIndex) throws SQLException {
return real.getTime(columnIndex);
}
/**
* @see ResultSet#updateTime(int, Time)
*/
public void updateTime(int columnIndex, Time x) throws SQLException {
real.updateTime(columnIndex,x);
}
/**
* @see ResultSet#getTimestamp(int)
*/
public Timestamp getTimestamp(int columnIndex) throws SQLException {
return real.getTimestamp(columnIndex);
}
/**
* @see ResultSet#updateTimestamp(int, Timestamp)
*/
public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
real.updateTimestamp(columnIndex,x);
}
/**
* @see ResultSet#getAsciiStream(String)
*/
public InputStream getAsciiStream(String columnName) throws SQLException {
return real.getAsciiStream(columnName);
}
/**
* @see ResultSet#getBinaryStream(String)
*/
public InputStream getBinaryStream(String columnName) throws SQLException {
return real.getBinaryStream(columnName);
}
/**
* @see ResultSet#getUnicodeStream(String)
*/
public InputStream getUnicodeStream(String columnName) throws SQLException {
return real.getUnicodeStream(columnName);
}
/**
* @see ResultSet#updateAsciiStream(String, java.io.InputStream, int)
*/
public void updateAsciiStream(String columnName, InputStream x, int length) throws SQLException {
real.updateAsciiStream(columnName,x,length);
}
/**
* @see ResultSet#updateBinaryStream(String, java.io.InputStream, int)
*/
public void updateBinaryStream(String columnName, InputStream x, int length) throws SQLException {
real.updateBinaryStream(columnName,x,length);
}
/**
* @see ResultSet#getCharacterStream(String)
*/
public Reader getCharacterStream(String columnName) throws SQLException {
return real.getCharacterStream(columnName);
}
/**
* @see ResultSet#updateCharacterStream(String, java.io.Reader, int)
*/
public void updateCharacterStream(String columnName, Reader reader, int length) throws SQLException {
real.updateCharacterStream(columnName,reader,length);
}
/**
* @see ResultSet#getObject(String)
*/
public Object getObject(String columnName) throws SQLException {
return real.getObject(columnName);
}
/**
* @see ResultSet#updateObject(String, Object)
*/
public void updateObject(String columnName, Object x) throws SQLException {
real.updateObject(columnName,x);
}
/**
* @see ResultSet#updateObject(String, Object, int)
*/
public void updateObject(String columnName, Object x, int scale) throws SQLException {
real.updateObject(columnName,x,scale);
}
/**
* @see ResultSet#getObject(int, Map)
*/
public Object getObject(int i, Map map) throws SQLException {
return real.getObject(i,map);
}
/**
* @see ResultSet#getString(String)
*/
public String getString(String columnName) throws SQLException {
return real.getString(columnName);
}
/**
* @see ResultSet#updateString(String, String)
*/
public void updateString(String columnName, String x) throws SQLException {
real.updateString(columnName,x);
}
/**
* @see ResultSet#getBigDecimal(String)
*/
public BigDecimal getBigDecimal(String columnName) throws SQLException {
return real.getBigDecimal(columnName);
}
/**
* @see ResultSet#getBigDecimal(String, int)
*/
public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
return real.getBigDecimal(columnName,scale);
}
/**
* @see ResultSet#updateBigDecimal(String, java.math.BigDecimal)
*/
public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException {
real.updateBigDecimal(columnName,x);
}
/**
* @see ResultSet#getURL(String)
*/
public URL getURL(String columnName) throws SQLException {
return real.getURL(columnName);
}
/**
* @see ResultSet#getArray(String)
*/
public Array getArray(String colName) throws SQLException {
return real.getArray(colName);
}
/**
* @see ResultSet#updateArray(String, Array)
*/
public void updateArray(String columnName, Array x) throws SQLException {
real.updateArray(columnName,x);
}
/**
* @see ResultSet#getBlob(String)
*/
public Blob getBlob(String colName) throws SQLException {
return real.getBlob(colName);
}
/**
* @see ResultSet#updateBlob(String, Blob)
*/
public void updateBlob(String columnName, Blob x) throws SQLException {
real.updateBlob(columnName,x);
}
/**
* @see ResultSet#getClob(String)
*/
public Clob getClob(String colName) throws SQLException {
return real.getClob(colName);
}
/**
* @see ResultSet#updateClob(String, Clob)
*/
public void updateClob(String columnName, Clob x) throws SQLException {
real.updateClob(columnName,x);
}
/**
* @see ResultSet#getDate(String)
*/
public Date getDate(String columnName) throws SQLException {
return real.getDate(columnName);
}
/**
* @see ResultSet#updateDate(String, Date)
*/
public void updateDate(String columnName, Date x) throws SQLException {
real.updateDate(columnName,x);
}
/**
* @see ResultSet#getDate(int, Calendar)
*/
public Date getDate(int columnIndex, Calendar cal) throws SQLException {
return real.getDate(columnIndex,cal);
}
/**
* @see ResultSet#getRef(String)
*/
public Ref getRef(String colName) throws SQLException {
return real.getRef(colName);
}
/**
* @see ResultSet#updateRef(String, Ref)
*/
public void updateRef(String columnName, Ref x) throws SQLException {
real.updateRef(columnName,x);
}
/**
* @see ResultSet#getTime(String)
*/
public Time getTime(String columnName) throws SQLException {
return real.getTime(columnName);
}
/**
* @see ResultSet#updateTime(String, Time)
*/
public void updateTime(String columnName, Time x) throws SQLException {
real.updateTime(columnName,x);
}
/**
* @see ResultSet#getTime(int, Calendar)
*/
public Time getTime(int columnIndex, Calendar cal) throws SQLException {
return real.getTime(columnIndex,cal);
}
/**
* @see ResultSet#getTimestamp(String)
*/
public Timestamp getTimestamp(String columnName) throws SQLException {
return real.getTimestamp(columnName);
}
/**
* @see ResultSet#updateTimestamp(String, Timestamp)
*/
public void updateTimestamp(String columnName, Timestamp x) throws SQLException {
real.updateTimestamp(columnName,x);
}
/**
* @see ResultSet#getTimestamp(int, Calendar)
*/
public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
return real.getTimestamp(columnIndex,cal);
}
/**
* @see ResultSet#getObject(String, Map)
*/
public Object getObject(String colName, Map map) throws SQLException {
return real.getObject(colName,map);
}
/**
* @see ResultSet#getDate(String, Calendar)
*/
public Date getDate(String columnName, Calendar cal) throws SQLException {
return real.getDate(columnName,cal);
}
/**
* @see ResultSet#getTime(String, Calendar)
*/
public Time getTime(String columnName, Calendar cal) throws SQLException {
return real.getTime(columnName,cal);
}
/**
* @see ResultSet#getTimestamp(String, Calendar)
*/
public Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException {
return real.getTimestamp(columnName,cal);
}
}