Package org.apache.tomcat.dbcp.dbcp2

## Class DelegatingStatement

- java.lang.Object
- - org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
  - - org.apache.tomcat.dbcp.dbcp2.DelegatingStatement

All Implemented Interfaces:
  `AutoCloseable`, `Statement`, `Wrapper`, `TrackedUse`

Direct Known Subclasses:
  `DelegatingPreparedStatement`

    public class DelegatingStatement
    extends AbandonedTrace
    implements Statement

A base delegating implementation of `Statement`.

All of the methods from the `Statement` interface simply check to see that the `Statement` is active, and call the corresponding method on the "delegate" provided in my constructor.

Extends AbandonedTrace to implement Statement tracking and logging of code which created the Statement. Tracking the Statement ensures that the Connection which created it can close any open Statement's on Connection close.

Since:
  2.0

### Field Summary

### Fields inherited from interface java.sql.Statement

`CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED, KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS, SUCCESS_NO_INFO`

### Constructor Summary

Constructors
`DelegatingStatement​(DelegatingConnection<?> connection, Statement statement)` Create a wrapper for the Statement which traces this Statement to the Connection which created it and the code which created it.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `activate()`
`void` `addBatch​(String sql)`
`void` `cancel()`
`protected void` `checkOpen()`
`void` `clearBatch()`
`void` `clearWarnings()`
`void` `close()` Close this DelegatingStatement, and close any ResultSets that were not explicitly closed.
`void` `closeOnCompletion()`
`boolean` `execute​(String sql)`
`boolean` `execute​(String sql, int autoGeneratedKeys)`
`boolean` `execute​(String sql, int[] columnIndexes)`
`boolean` `execute​(String sql, String[] columnNames)`
`int[]` `executeBatch()`
`long[]` `executeLargeBatch()`
`long` `executeLargeUpdate​(String sql)`
`long` `executeLargeUpdate​(String sql, int autoGeneratedKeys)`
`long` `executeLargeUpdate​(String sql, int[] columnIndexes)`
`long` `executeLargeUpdate​(String sql, String[] columnNames)`
`ResultSet` `executeQuery​(String sql)`
`int` `executeUpdate​(String sql)`
`int` `executeUpdate​(String sql, int autoGeneratedKeys)`
`int` `executeUpdate​(String sql, int[] columnIndexes)`
`int` `executeUpdate​(String sql, String[] columnNames)`
`protected void` `finalize()`
`Connection` `getConnection()`
`protected DelegatingConnection<?>` `getConnectionInternal()`
`Statement` `getDelegate()` Returns my underlying `Statement`.
`int` `getFetchDirection()`
`int` `getFetchSize()`
`ResultSet` `getGeneratedKeys()`
`Statement` `getInnermostDelegate()` If my underlying `Statement` is not a `DelegatingStatement`, returns it, otherwise recursively invokes this method on my delegate.
`long` `getLargeMaxRows()`
`long` `getLargeUpdateCount()`
`int` `getMaxFieldSize()`
`int` `getMaxRows()`
`boolean` `getMoreResults()`
`boolean` `getMoreResults​(int current)`
`int` `getQueryTimeout()`
`ResultSet` `getResultSet()`
`int` `getResultSetConcurrency()`
`int` `getResultSetHoldability()`
`int` `getResultSetType()`
`int` `getUpdateCount()`
`SQLWarning` `getWarnings()`
`protected void` `handleException​(SQLException e)`
`boolean` `isClosed()`
`protected boolean` `isClosedInternal()`
`boolean` `isCloseOnCompletion()`
`boolean` `isPoolable()`
`boolean` `isWrapperFor​(Class<?> iface)`
`void` `passivate()`
`protected void` `setClosedInternal​(boolean closed)`
`void` `setCursorName​(String name)`
`void` `setDelegate​(Statement statement)` Sets my delegate.
`void` `setEscapeProcessing​(boolean enable)`
`void` `setFetchDirection​(int direction)`
`void` `setFetchSize​(int rows)`
`void` `setLargeMaxRows​(long max)`
`void` `setMaxFieldSize​(int max)`
`void` `setMaxRows​(int max)`
`void` `setPoolable​(boolean poolable)`
`void` `setQueryTimeout​(int seconds)`
`String` `toString()` Returns a String representation of this object.
`<T> T` `unwrap​(Class<T> iface)`

### Methods inherited from class org.apache.tomcat.dbcp.dbcp2.AbandonedTrace

`addTrace, clearTrace, close, getLastUsed, getLastUsedInstant, getTrace, removeThisTrace, removeTrace, setLastUsed, setLastUsed, setLastUsed`

### Methods inherited from class java.lang.Object

`clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.sql.Statement

`enquoteIdentifier, enquoteLiteral, enquoteNCharLiteral, isSimpleIdentifier`

### Constructor Detail

#### DelegatingStatement

    public DelegatingStatement​(DelegatingConnection<?> connection,
                               Statement statement)

Create a wrapper for the Statement which traces this Statement to the Connection which created it and the code which created it.

Parameters:
  `statement` - the `Statement` to delegate all calls to.
  `connection` - the `DelegatingConnection` that created this statement.

### Method Detail

#### activate

    public void activate()
                  throws SQLException

Throws:
  `SQLException` - thrown by the delegating statement.
Since:
  2.4.0 made public, was protected in 2.3.0.

#### addBatch

    public void addBatch​(String sql)
                  throws SQLException

Specified by:
  `addBatch` in interface `Statement`
Throws:
  `SQLException`

#### cancel

    public void cancel()
                throws SQLException

Specified by:
  `cancel` in interface `Statement`
Throws:
  `SQLException`

#### checkOpen

    protected void checkOpen()
                      throws SQLException

Throws:
  `SQLException`

#### clearBatch

    public void clearBatch()
                    throws SQLException

Specified by:
  `clearBatch` in interface `Statement`
Throws:
  `SQLException`

#### clearWarnings

    public void clearWarnings()
                       throws SQLException

Specified by:
  `clearWarnings` in interface `Statement`
Throws:
  `SQLException`

#### close

    public void close()
               throws SQLException

Close this DelegatingStatement, and close any ResultSets that were not explicitly closed.

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Statement`
Overrides:
  `close` in class `AbandonedTrace`
Throws:
  `SQLException` - Ignored here, for subclasses.

#### closeOnCompletion

    public void closeOnCompletion()
                           throws SQLException

Specified by:
  `closeOnCompletion` in interface `Statement`
Throws:
  `SQLException`

#### execute

    public boolean execute​(String sql)
                    throws SQLException

Specified by:
  `execute` in interface `Statement`
Throws:
  `SQLException`

#### execute

    public boolean execute​(String sql,
                           int autoGeneratedKeys)
                    throws SQLException

Specified by:
  `execute` in interface `Statement`
Throws:
  `SQLException`

#### execute

    public boolean execute​(String sql,
                           int[] columnIndexes)
                    throws SQLException

Specified by:
  `execute` in interface `Statement`
Throws:
  `SQLException`

#### execute

    public boolean execute​(String sql,
                           String[] columnNames)
                    throws SQLException

Specified by:
  `execute` in interface `Statement`
Throws:
  `SQLException`

#### executeBatch

    public int[] executeBatch()
                       throws SQLException

Specified by:
  `executeBatch` in interface `Statement`
Throws:
  `SQLException`

#### executeLargeBatch

    public long[] executeLargeBatch()
                             throws SQLException

Specified by:
  `executeLargeBatch` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### executeLargeUpdate

    public long executeLargeUpdate​(String sql)
                            throws SQLException

Specified by:
  `executeLargeUpdate` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### executeLargeUpdate

    public long executeLargeUpdate​(String sql,
                                   int autoGeneratedKeys)
                            throws SQLException

Specified by:
  `executeLargeUpdate` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### executeLargeUpdate

    public long executeLargeUpdate​(String sql,
                                   int[] columnIndexes)
                            throws SQLException

Specified by:
  `executeLargeUpdate` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### executeLargeUpdate

    public long executeLargeUpdate​(String sql,
                                   String[] columnNames)
                            throws SQLException

Specified by:
  `executeLargeUpdate` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### executeQuery

    public ResultSet executeQuery​(String sql)
                           throws SQLException

Specified by:
  `executeQuery` in interface `Statement`
Throws:
  `SQLException`

#### executeUpdate

    public int executeUpdate​(String sql)
                      throws SQLException

Specified by:
  `executeUpdate` in interface `Statement`
Throws:
  `SQLException`

#### executeUpdate

    public int executeUpdate​(String sql,
                             int autoGeneratedKeys)
                      throws SQLException

Specified by:
  `executeUpdate` in interface `Statement`
Throws:
  `SQLException`

#### executeUpdate

    public int executeUpdate​(String sql,
                             int[] columnIndexes)
                      throws SQLException

Specified by:
  `executeUpdate` in interface `Statement`
Throws:
  `SQLException`

#### executeUpdate

    public int executeUpdate​(String sql,
                             String[] columnNames)
                      throws SQLException

Specified by:
  `executeUpdate` in interface `Statement`
Throws:
  `SQLException`

#### finalize

    protected void finalize()
                     throws Throwable

Overrides:
  `finalize` in class `Object`
Throws:
  `Throwable`

#### getConnection

    public Connection getConnection()
                             throws SQLException

Specified by:
  `getConnection` in interface `Statement`
Throws:
  `SQLException`

#### getConnectionInternal

    protected DelegatingConnection<?> getConnectionInternal()

#### getDelegate

    public Statement getDelegate()

Returns my underlying `Statement`.

Returns:
  my underlying `Statement`.
See Also:
  `getInnermostDelegate()`

#### getFetchDirection

    public int getFetchDirection()
                          throws SQLException

Specified by:
  `getFetchDirection` in interface `Statement`
Throws:
  `SQLException`

#### getFetchSize

    public int getFetchSize()
                     throws SQLException

Specified by:
  `getFetchSize` in interface `Statement`
Throws:
  `SQLException`

#### getGeneratedKeys

    public ResultSet getGeneratedKeys()
                               throws SQLException

Specified by:
  `getGeneratedKeys` in interface `Statement`
Throws:
  `SQLException`

#### getInnermostDelegate

    public Statement getInnermostDelegate()

If my underlying `Statement` is not a `DelegatingStatement`, returns it, otherwise recursively invokes this method on my delegate.

Hence this method will return the first delegate that is not a `DelegatingStatement` or `null` when no non-`DelegatingStatement` delegate can be found by traversing this chain.

This method is useful when you may have nested `DelegatingStatement`s, and you want to make sure to obtain a "genuine" `Statement`.

Returns:
  The innermost delegate.
See Also:
  `getDelegate()`

#### getLargeMaxRows

    public long getLargeMaxRows()
                         throws SQLException

Specified by:
  `getLargeMaxRows` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### getLargeUpdateCount

    public long getLargeUpdateCount()
                             throws SQLException

Specified by:
  `getLargeUpdateCount` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### getMaxFieldSize

    public int getMaxFieldSize()
                        throws SQLException

Specified by:
  `getMaxFieldSize` in interface `Statement`
Throws:
  `SQLException`

#### getMaxRows

    public int getMaxRows()
                   throws SQLException

Specified by:
  `getMaxRows` in interface `Statement`
Throws:
  `SQLException`

#### getMoreResults

    public boolean getMoreResults()
                           throws SQLException

Specified by:
  `getMoreResults` in interface `Statement`
Throws:
  `SQLException`

#### getMoreResults

    public boolean getMoreResults​(int current)
                           throws SQLException

Specified by:
  `getMoreResults` in interface `Statement`
Throws:
  `SQLException`

#### getQueryTimeout

    public int getQueryTimeout()
                        throws SQLException

Specified by:
  `getQueryTimeout` in interface `Statement`
Throws:
  `SQLException`

#### getResultSet

    public ResultSet getResultSet()
                           throws SQLException

Specified by:
  `getResultSet` in interface `Statement`
Throws:
  `SQLException`

#### getResultSetConcurrency

    public int getResultSetConcurrency()
                                throws SQLException

Specified by:
  `getResultSetConcurrency` in interface `Statement`
Throws:
  `SQLException`

#### getResultSetHoldability

    public int getResultSetHoldability()
                                throws SQLException

Specified by:
  `getResultSetHoldability` in interface `Statement`
Throws:
  `SQLException`

#### getResultSetType

    public int getResultSetType()
                         throws SQLException

Specified by:
  `getResultSetType` in interface `Statement`
Throws:
  `SQLException`

#### getUpdateCount

    public int getUpdateCount()
                       throws SQLException

Specified by:
  `getUpdateCount` in interface `Statement`
Throws:
  `SQLException`

#### getWarnings

    public SQLWarning getWarnings()
                           throws SQLException

Specified by:
  `getWarnings` in interface `Statement`
Throws:
  `SQLException`

#### handleException

    protected void handleException​(SQLException e)
                            throws SQLException

Throws:
  `SQLException`

#### isClosed

    public boolean isClosed()
                     throws SQLException

Specified by:
  `isClosed` in interface `Statement`
Throws:
  `SQLException`

#### isClosedInternal

    protected boolean isClosedInternal()

#### isCloseOnCompletion

    public boolean isCloseOnCompletion()
                                throws SQLException

Specified by:
  `isCloseOnCompletion` in interface `Statement`
Throws:
  `SQLException`

#### isPoolable

    public boolean isPoolable()
                       throws SQLException

Specified by:
  `isPoolable` in interface `Statement`
Throws:
  `SQLException`

#### isWrapperFor

    public boolean isWrapperFor​(Class<?> iface)
                         throws SQLException

Specified by:
  `isWrapperFor` in interface `Wrapper`
Throws:
  `SQLException`

#### passivate

    public void passivate()
                   throws SQLException

Throws:
  `SQLException` - thrown by the delegating statement.
Since:
  2.4.0 made public, was protected in 2.3.0.

#### setClosedInternal

    protected void setClosedInternal​(boolean closed)

#### setCursorName

    public void setCursorName​(String name)
                       throws SQLException

Specified by:
  `setCursorName` in interface `Statement`
Throws:
  `SQLException`

#### setDelegate

    public void setDelegate​(Statement statement)

Sets my delegate.

Parameters:
  `statement` - my delegate.

#### setEscapeProcessing

    public void setEscapeProcessing​(boolean enable)
                             throws SQLException

Specified by:
  `setEscapeProcessing` in interface `Statement`
Throws:
  `SQLException`

#### setFetchDirection

    public void setFetchDirection​(int direction)
                           throws SQLException

Specified by:
  `setFetchDirection` in interface `Statement`
Throws:
  `SQLException`

#### setFetchSize

    public void setFetchSize​(int rows)
                      throws SQLException

Specified by:
  `setFetchSize` in interface `Statement`
Throws:
  `SQLException`

#### setLargeMaxRows

    public void setLargeMaxRows​(long max)
                         throws SQLException

Specified by:
  `setLargeMaxRows` in interface `Statement`
Throws:
  `SQLException`
Since:
  2.5.0

#### setMaxFieldSize

    public void setMaxFieldSize​(int max)
                         throws SQLException

Specified by:
  `setMaxFieldSize` in interface `Statement`
Throws:
  `SQLException`

#### setMaxRows

    public void setMaxRows​(int max)
                    throws SQLException

Specified by:
  `setMaxRows` in interface `Statement`
Throws:
  `SQLException`

#### setPoolable

    public void setPoolable​(boolean poolable)
                     throws SQLException

Specified by:
  `setPoolable` in interface `Statement`
Throws:
  `SQLException`

#### setQueryTimeout

    public void setQueryTimeout​(int seconds)
                         throws SQLException

Specified by:
  `setQueryTimeout` in interface `Statement`
Throws:
  `SQLException`

#### toString

    public String toString()

Returns a String representation of this object.

Overrides:
  `toString` in class `Object`
Returns:
  String

#### unwrap

    public <T> T unwrap​(Class<T> iface)
                 throws SQLException

Specified by:
  `unwrap` in interface `Wrapper`
Throws:
  `SQLException`