# Class StatementDecoratorInterceptor

java.lang.Object
org.apache.tomcat.jdbc.pool.JdbcInterceptor
org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor

All Implemented Interfaces:
  `InvocationHandler`

Direct Known Subclasses:
  `StatementCache`

public class StatementDecoratorInterceptor extends AbstractCreateStatementInterceptor
Implementation of JdbcInterceptor that proxies resultSets and statements.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `protected static class`
  `StatementDecoratorInterceptor.ResultSetProxy`
  `protected class`
  `StatementDecoratorInterceptor.StatementProxy<T extends Statement>`
  Class to measure query execute time.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected static final String`
  `EXECUTE_QUERY`
  `protected static final String`
  `GET_GENERATED_KEYS`
  `protected static final String`
  `GET_RESULTSET`
  `protected static final String[]`
  `RESULTSET_TYPES`
  `protected static Constructor<?>`
  `resultSetConstructor`
  the constructor to create the resultSet proxies

  ### Fields inherited from class AbstractCreateStatementInterceptor

  `constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_TYPES, EXECUTE_UPDATE, GET_STATEMENT, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, RESULTSET_IDX, STATEMENT_TYPE_COUNT, STATEMENT_TYPES`

  ### Fields inherited from class JdbcInterceptor

  `CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VAL`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `StatementDecoratorInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `closeInvoked()`
  Method invoked when the operation `Connection.close()` is invoked.
  `protected Object`
  `createDecorator(Object proxy, Method method, Object[] args, Object statement, Constructor<?> constructor, String sql)`
  Creates a proxy for a Statement.
  `Object`
  `createStatement(Object proxy, Method method, Object[] args, Object statement, long time)`
  Creates a statement interceptor to monitor query response times
  `protected Constructor<?>`
  `getResultSetConstructor()`
  `protected boolean`
  `isExecuteQuery(Method method)`
  `protected boolean`
  `isExecuteQuery(String methodName)`
  `protected boolean`
  `isResultSet(Method method, boolean process)`

  ### Methods inherited from class AbstractCreateStatementInterceptor

  `getConstructor, invoke, isExecute, isStatement, process, reset`

  ### Methods inherited from class JdbcInterceptor

  `compare, compare, disconnected, getNext, getProperties, isUseEquals, poolClosed, poolStarted, setNext, setProperties, setUseEquals`

  ### Methods inherited from class Object

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

- ## Field Details

  - ### EXECUTE_QUERY

    protected static final String EXECUTE_QUERY
    See Also:
      - Constant Field Values

  - ### GET_GENERATED_KEYS

    protected static final String GET_GENERATED_KEYS
    See Also:
      - Constant Field Values

  - ### GET_RESULTSET

    protected static final String GET_RESULTSET
    See Also:
      - Constant Field Values

  - ### RESULTSET_TYPES

    protected static final String[] RESULTSET_TYPES

  - ### resultSetConstructor

    protected static volatile Constructor<?> resultSetConstructor
    the constructor to create the resultSet proxies

- ## Constructor Details

  - ### StatementDecoratorInterceptor

    public StatementDecoratorInterceptor()

- ## Method Details

  - ### closeInvoked

    public void closeInvoked()
    Description copied from class: `AbstractCreateStatementInterceptor`
    Method invoked when the operation `Connection.close()` is invoked.
    Specified by:
      `closeInvoked` in class `AbstractCreateStatementInterceptor`

  - ### getResultSetConstructor

    protected Constructor<?> getResultSetConstructor() throws NoSuchMethodException
    Throws:
      `NoSuchMethodException`

  - ### createStatement

    public Object createStatement(Object proxy, Method method, Object[] args, Object statement, long time)
    Creates a statement interceptor to monitor query response times
    Specified by:
      `createStatement` in class `AbstractCreateStatementInterceptor`
    Parameters:
      `proxy` - the actual proxy object
      `method` - the method that was called. It will be one of the methods defined in `AbstractCreateStatementInterceptor.STATEMENT_TYPES`
      `args` - the arguments to the method
      `statement` - the statement that the underlying connection created
      `time` - Elapsed time
    Returns:
      a `Statement` object

  - ### createDecorator

    protected Object createDecorator(Object proxy, Method method, Object[] args, Object statement, Constructor<?> constructor, String sql) throws InstantiationException, IllegalAccessException, InvocationTargetException
    Creates a proxy for a Statement.
    Parameters:
      `proxy` - The proxy object on which the method that triggered the creation of the statement was called.
      `method` - The method that was called on the proxy
      `args` - The arguments passed as part of the method call to the proxy
      `statement` - The statement object that is to be proxied
      `constructor` - The constructor for the desired proxy
      `sql` - The sql of of the statement
    Returns:
      A new proxy for the Statement
    Throws:
      `InstantiationException` - Couldn't instantiate object
      `IllegalAccessException` - Inaccessible constructor
      `InvocationTargetException` - Exception thrown from constructor

  - ### isExecuteQuery

    protected boolean isExecuteQuery(String methodName)

  - ### isExecuteQuery

    protected boolean isExecuteQuery(Method method)

  - ### isResultSet

    protected boolean isResultSet(Method method, boolean process)