C3P0ProxyStatement (c3p0-0.9.5.5 API Documentation)
Date: 2019-12-11

com.mchange.v2.c3p0

## Interface C3P0ProxyStatement

- All Superinterfaces:
    java.lang.AutoCloseable, java.sql.Statement, java.sql.Wrapper
  All Known Implementing Classes:
    NewProxyCallableStatement, NewProxyPreparedStatement, NewProxyStatement

      public interface C3P0ProxyStatement
      extends java.sql.Statement

  Most clients need never use or know about this interface -- c3p0-provided Statements can be treated like any other Statement.

  An interface implemented by proxy Connections returned by c3p0 PooledDataSources. It provides protected access to the underlying dbms-vendor specific Connection, which may be useful if you want to access non-standard API offered by your jdbc driver.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.Object` | `RAW_STATEMENT` A token representing an unwrapped, unproxied jdbc Connection for use in `rawStatementOperation(java.lang.reflect.Method, java.lang.Object, java.lang.Object[])`

    - ### 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`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.Object` | `rawStatementOperation(java.lang.reflect.Method m, java.lang.Object target, java.lang.Object[] args)` Allows one to work with the unproxied, raw vendor-provided Statement .

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

      `addBatch, cancel, clearBatch, clearWarnings, close, closeOnCompletion, execute, execute, execute, execute, executeBatch, executeLargeBatch, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeQuery, executeUpdate, executeUpdate, executeUpdate, executeUpdate, getConnection, getFetchDirection, getFetchSize, getGeneratedKeys, getLargeMaxRows, getLargeUpdateCount, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getUpdateCount, getWarnings, isClosed, isCloseOnCompletion, isPoolable, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setLargeMaxRows, setMaxFieldSize, setMaxRows, setPoolable, setQueryTimeout`

    - ### Methods inherited from interface java.sql.Wrapper

      `isWrapperFor, unwrap`

- - ### Field Detail

    - #### RAW_STATEMENT

          static final java.lang.Object RAW_STATEMENT

      A token representing an unwrapped, unproxied jdbc Connection for use in `rawStatementOperation(java.lang.reflect.Method, java.lang.Object, java.lang.Object[])`

  - ### Method Detail

    - #### rawStatementOperation

          java.lang.Object rawStatementOperation(java.lang.reflect.Method m,
                                                 java.lang.Object target,
                                                 java.lang.Object[] args)
                                          throws java.lang.IllegalAccessException,
                                                 java.lang.IllegalArgumentException,
                                                 java.lang.reflect.InvocationTargetException,
                                                 java.sql.SQLException

      Allows one to work with the unproxied, raw vendor-provided Statement . Some database companies never got over the "common interfaces mean no more vendor lock-in!" thing, and offer non-standard API on their Statements. This method permits you to "pierce" the connection-pooling layer to call non-standard methods on the original Statement, or to pass the original Statement to functions that are not implementation neutral.

      To use this functionality, you'll need to cast a Statement retrieved from a c3p0-provided Connection to a C3P0ProxyStatement.

      This method works by making a reflective call of method `m` on Object `target` (which may be null for static methods), passing and argument list `args`. For the method target, or for any argument, you may substitute the special token `C3P0ProxyStatement.RAW_STATEMENT`

      Any ResultSets returned by the operation will be proxied and c3p0-managed, meaning that these resources will be automatically closed if the user does not close them first when this Statement is closed or checked into the statement cache. Any other resources returned by the operation are the user's responsibility to clean up!

      If you have turned statement pooling on, incautious use of this method can corrupt the PreparedStatement cache, by breaking the invariant that all cached PreparedStatements should be equivalent to a PreparedStatement newly created with the same arguments to prepareStatement(...) or prepareCall(...). If your vendor supplies API that allows you to modify the state or configuration of a Statement in some nonstandard way, and you do not undo this modification prior to closing the Statement or the Connection that prepared it, future preparers of the same Statement may or may not see your modification, depending on your use of the cache. Thus, it is inadvisable to use this method to call nonstandard mutators on PreparedStatements if statement pooling is turned on..

      Throws:
        `java.lang.IllegalAccessException`
        `java.lang.IllegalArgumentException`
        `java.lang.reflect.InvocationTargetException`
        `java.sql.SQLException`