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..