org.apache.tomcat.dbcp.dbcp

## Class DelegatingStatement

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

- All Implemented Interfaces:
    java.lang.AutoCloseable, java.sql.Statement, java.sql.Wrapper
  Direct Known Subclasses:
    DelegatingPreparedStatement

      public class DelegatingStatement
      extends AbandonedTrace
      implements java.sql.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.

  Author:
    Rodney Waldhoff, Glenn L. Nielsen, James House, Dirk Verbeeck

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `_closed`
    `protected DelegatingConnection` | `_conn` The connection that created me.
    `protected java.sql.Statement` | `_stmt` My delegate.

    - ### 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
    Constructor and Description
    `DelegatingStatement(DelegatingConnection c, java.sql.Statement s)` Create a wrapper for the Statement which traces this Statement to the Connection which created it and the code which created it.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `activate()`
    `void` | `addBatch(java.lang.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` | `equals(java.lang.Object obj)` This method considers two objects to be equal if the underlying JDBC objects are equal.
    `boolean` | `execute(java.lang.String sql)`
    `boolean` | `execute(java.lang.String sql, int autoGeneratedKeys)`
    `boolean` | `execute(java.lang.String sql, int[] columnIndexes)`
    `boolean` | `execute(java.lang.String sql, java.lang.String[] columnNames)`
    `int[]` | `executeBatch()`
    `java.sql.ResultSet` | `executeQuery(java.lang.String sql)`
    `int` | `executeUpdate(java.lang.String sql)`
    `int` | `executeUpdate(java.lang.String sql, int autoGeneratedKeys)`
    `int` | `executeUpdate(java.lang.String sql, int[] columnIndexes)`
    `int` | `executeUpdate(java.lang.String sql, java.lang.String[] columnNames)`
    `java.sql.Connection` | `getConnection()`
    `java.sql.Statement` | `getDelegate()` Returns my underlying `Statement`.
    `int` | `getFetchDirection()`
    `int` | `getFetchSize()`
    `java.sql.ResultSet` | `getGeneratedKeys()`
    `java.sql.Statement` | `getInnermostDelegate()` If my underlying `Statement` is not a `DelegatingStatement`, returns it, otherwise recursively invokes this method on my delegate.
    `int` | `getMaxFieldSize()`
    `int` | `getMaxRows()`
    `boolean` | `getMoreResults()`
    `boolean` | `getMoreResults(int current)`
    `int` | `getQueryTimeout()`
    `java.sql.ResultSet` | `getResultSet()`
    `int` | `getResultSetConcurrency()`
    `int` | `getResultSetHoldability()`
    `int` | `getResultSetType()`
    `int` | `getUpdateCount()`
    `java.sql.SQLWarning` | `getWarnings()`
    `protected void` | `handleException(java.sql.SQLException e)`
    `int` | `hashCode()`
    `boolean` | `isClosed()`
    `boolean` | `isCloseOnCompletion()`
    `boolean` | `isPoolable()`
    `boolean` | `isWrapperFor(java.lang.Class<?> iface)`
    `void` | `passivate()`
    `void` | `setCursorName(java.lang.String name)`
    `void` | `setDelegate(java.sql.Statement s)` Sets my delegate.
    `void` | `setEscapeProcessing(boolean enable)`
    `void` | `setFetchDirection(int direction)`
    `void` | `setFetchSize(int rows)`
    `void` | `setMaxFieldSize(int max)`
    `void` | `setMaxRows(int max)`
    `void` | `setPoolable(boolean poolable)`
    `void` | `setQueryTimeout(int seconds)`
    `java.lang.String` | `toString()` Returns a String representation of this object.
    `<T> T` | `unwrap(java.lang.Class<T> iface)`

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

      `addTrace, clearTrace, getConfig, getLastUsed, getTrace, printStackTrace, removeTrace, setLastUsed, setLastUsed, setStackTrace`

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

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### _stmt

          protected java.sql.Statement _stmt

      My delegate.

    - #### _conn

          protected DelegatingConnection _conn

      The connection that created me.

    - #### _closed

          protected boolean _closed

  - ### Constructor Detail

    - #### DelegatingStatement

          public DelegatingStatement(DelegatingConnection c,
                             java.sql.Statement s)

      Create a wrapper for the Statement which traces this Statement to the Connection which created it and the code which created it.
      Parameters:
        `s` - the `Statement` to delegate all calls to.
        `c` - the `DelegatingConnection` that created this statement.

  - ### Method Detail

    - #### getDelegate

          public java.sql.Statement getDelegate()

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

    - #### equals

          public boolean equals(java.lang.Object obj)

      This method considers two objects to be equal if the underlying JDBC objects are equal.

      If `obj` is a DelegatingStatement, this DelegatingStatement's `innermostDelegate` is compared with the innermost delegate of obj; otherwise obj itself is compared with the the Statement returned by `getInnermostDelegate()`.

      Overrides:
        `equals` in class `java.lang.Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### getInnermostDelegate

          public java.sql.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 transversing this chain.

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

      See Also:
        `getDelegate()`

    - #### setDelegate

          public void setDelegate(java.sql.Statement s)

      Sets my delegate.

    - #### checkOpen

          protected void checkOpen()
                            throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### close

          public void close()
                     throws java.sql.SQLException

      Close this DelegatingStatement, and close any ResultSets that were not explicitly closed.
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### handleException

          protected void handleException(java.sql.SQLException e)
                                  throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### activate

          public void activate()
                        throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### passivate

          public void passivate()
                         throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### getConnection

          public java.sql.Connection getConnection()
                                            throws java.sql.SQLException

      Specified by:
        `getConnection` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### executeQuery

          public java.sql.ResultSet executeQuery(java.lang.String sql)
                                          throws java.sql.SQLException

      Specified by:
        `executeQuery` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getResultSet

          public java.sql.ResultSet getResultSet()
                                          throws java.sql.SQLException

      Specified by:
        `getResultSet` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### executeUpdate

          public int executeUpdate(java.lang.String sql)
                            throws java.sql.SQLException

      Specified by:
        `executeUpdate` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getMaxFieldSize

          public int getMaxFieldSize()
                              throws java.sql.SQLException

      Specified by:
        `getMaxFieldSize` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setMaxFieldSize

          public void setMaxFieldSize(int max)
                               throws java.sql.SQLException

      Specified by:
        `setMaxFieldSize` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getMaxRows

          public int getMaxRows()
                         throws java.sql.SQLException

      Specified by:
        `getMaxRows` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setMaxRows

          public void setMaxRows(int max)
                          throws java.sql.SQLException

      Specified by:
        `setMaxRows` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setEscapeProcessing

          public void setEscapeProcessing(boolean enable)
                                   throws java.sql.SQLException

      Specified by:
        `setEscapeProcessing` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getQueryTimeout

          public int getQueryTimeout()
                              throws java.sql.SQLException

      Specified by:
        `getQueryTimeout` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setQueryTimeout

          public void setQueryTimeout(int seconds)
                               throws java.sql.SQLException

      Specified by:
        `setQueryTimeout` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### cancel

          public void cancel()
                      throws java.sql.SQLException

      Specified by:
        `cancel` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getWarnings

          public java.sql.SQLWarning getWarnings()
                                          throws java.sql.SQLException

      Specified by:
        `getWarnings` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### clearWarnings

          public void clearWarnings()
                             throws java.sql.SQLException

      Specified by:
        `clearWarnings` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setCursorName

          public void setCursorName(java.lang.String name)
                             throws java.sql.SQLException

      Specified by:
        `setCursorName` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### execute

          public boolean execute(java.lang.String sql)
                          throws java.sql.SQLException

      Specified by:
        `execute` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getUpdateCount

          public int getUpdateCount()
                             throws java.sql.SQLException

      Specified by:
        `getUpdateCount` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getMoreResults

          public boolean getMoreResults()
                                 throws java.sql.SQLException

      Specified by:
        `getMoreResults` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setFetchDirection

          public void setFetchDirection(int direction)
                                 throws java.sql.SQLException

      Specified by:
        `setFetchDirection` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getFetchDirection

          public int getFetchDirection()
                                throws java.sql.SQLException

      Specified by:
        `getFetchDirection` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### setFetchSize

          public void setFetchSize(int rows)
                            throws java.sql.SQLException

      Specified by:
        `setFetchSize` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getFetchSize

          public int getFetchSize()
                           throws java.sql.SQLException

      Specified by:
        `getFetchSize` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getResultSetConcurrency

          public int getResultSetConcurrency()
                                      throws java.sql.SQLException

      Specified by:
        `getResultSetConcurrency` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getResultSetType

          public int getResultSetType()
                               throws java.sql.SQLException

      Specified by:
        `getResultSetType` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### addBatch

          public void addBatch(java.lang.String sql)
                        throws java.sql.SQLException

      Specified by:
        `addBatch` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### clearBatch

          public void clearBatch()
                          throws java.sql.SQLException

      Specified by:
        `clearBatch` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### executeBatch

          public int[] executeBatch()
                             throws java.sql.SQLException

      Specified by:
        `executeBatch` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### toString

          public java.lang.String toString()

      Returns a String representation of this object.
      Overrides:
        `toString` in class `java.lang.Object`
      Returns:
        String
      Since:
        1.2.2

    - #### getMoreResults

          public boolean getMoreResults(int current)
                                 throws java.sql.SQLException

      Specified by:
        `getMoreResults` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getGeneratedKeys

          public java.sql.ResultSet getGeneratedKeys()
                                              throws java.sql.SQLException

      Specified by:
        `getGeneratedKeys` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### executeUpdate

          public int executeUpdate(java.lang.String sql,
                          int autoGeneratedKeys)
                            throws java.sql.SQLException

      Specified by:
        `executeUpdate` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### executeUpdate

          public int executeUpdate(java.lang.String sql,
                          int[] columnIndexes)
                            throws java.sql.SQLException

      Specified by:
        `executeUpdate` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### executeUpdate

          public int executeUpdate(java.lang.String sql,
                          java.lang.String[] columnNames)
                            throws java.sql.SQLException

      Specified by:
        `executeUpdate` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### execute

          public boolean execute(java.lang.String sql,
                        int autoGeneratedKeys)
                          throws java.sql.SQLException

      Specified by:
        `execute` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### execute

          public boolean execute(java.lang.String sql,
                        int[] columnIndexes)
                          throws java.sql.SQLException

      Specified by:
        `execute` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### execute

          public boolean execute(java.lang.String sql,
                        java.lang.String[] columnNames)
                          throws java.sql.SQLException

      Specified by:
        `execute` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### getResultSetHoldability

          public int getResultSetHoldability()
                                      throws java.sql.SQLException

      Specified by:
        `getResultSetHoldability` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### isClosed

          public boolean isClosed()
                           throws java.sql.SQLException

      Specified by:
        `isClosed` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### isWrapperFor

          public boolean isWrapperFor(java.lang.Class<?> iface)
                               throws java.sql.SQLException

      Specified by:
        `isWrapperFor` in interface `java.sql.Wrapper`
      Throws:
        `java.sql.SQLException`

    - #### unwrap

          public <T> T unwrap(java.lang.Class<T> iface)
                   throws java.sql.SQLException

      Specified by:
        `unwrap` in interface `java.sql.Wrapper`
      Throws:
        `java.sql.SQLException`

    - #### setPoolable

          public void setPoolable(boolean poolable)
                           throws java.sql.SQLException

      Specified by:
        `setPoolable` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### isPoolable

          public boolean isPoolable()
                             throws java.sql.SQLException

      Specified by:
        `isPoolable` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### closeOnCompletion

          public void closeOnCompletion()
                                 throws java.sql.SQLException

      Specified by:
        `closeOnCompletion` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

    - #### isCloseOnCompletion

          public boolean isCloseOnCompletion()
                                      throws java.sql.SQLException

      Specified by:
        `isCloseOnCompletion` in interface `java.sql.Statement`
      Throws:
        `java.sql.SQLException`

Copyright © 2000-2020 Apache Software Foundation. All Rights Reserved.