# Wrapper

public interface **Wrapper**

|---|---|---|
| Known Indirect Subclasses [CallableStatement](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/CallableStatement.html), [Connection](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/Connection.html), [DataSource](https://developers.google.com/j2objc/javadoc/jre/reference/javax/sql/DataSource.html), [DatabaseMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/DatabaseMetaData.html), [ParameterMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/ParameterMetaData.html), [PreparedStatement](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/PreparedStatement.html), [ResultSet](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/ResultSet.html), [ResultSetMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/ResultSetMetaData.html), [RowSet](https://developers.google.com/j2objc/javadoc/jre/reference/javax/sql/RowSet.html), [RowSetMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/javax/sql/RowSetMetaData.html), [Statement](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/Statement.html) |---|---| | [CallableStatement](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/CallableStatement.html) | The interface used to execute SQL stored procedures. | | [Connection](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/Connection.html) | A connection (session) with a specific database. | | [DataSource](https://developers.google.com/j2objc/javadoc/jre/reference/javax/sql/DataSource.html) | A factory for connections to the physical data source that this `DataSource` object represents. | | [DatabaseMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/DatabaseMetaData.html) | Comprehensive information about the database as a whole. | | [ParameterMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/ParameterMetaData.html) | An object that can be used to get information about the types and properties for each parameter marker in a `PreparedStatement` object. | | [PreparedStatement](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/PreparedStatement.html) | An object that represents a precompiled SQL statement. | | [ResultSet](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/ResultSet.html) | A table of data representing a database result set, which is usually generated by executing a statement that queries the database. | | [ResultSetMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/ResultSetMetaData.html) | An object that can be used to get information about the types and properties of the columns in a `ResultSet` object. | | [RowSet](https://developers.google.com/j2objc/javadoc/jre/reference/javax/sql/RowSet.html) | The interface that adds support to the JDBC API for the JavaBeans^TM^ component model. | | [RowSetMetaData](https://developers.google.com/j2objc/javadoc/jre/reference/javax/sql/RowSetMetaData.html) | An object that contains information about the columns in a `RowSet` object. | | [Statement](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/Statement.html) | The object used for executing a static SQL statement and returning the results it produces. | |||

Interface for JDBC classes which provide the ability to retrieve the delegate instance when the instance
in question is in fact a proxy class.


The wrapper pattern is employed by many JDBC driver implementations to provide extensions beyond
the traditional JDBC API that are specific to a data source. Developers may wish to gain access to
these resources that are wrapped (the delegates) as proxy class instances representing the
the actual resources. This interface describes a standard mechanism to access
these wrapped resources
represented by their proxy, to permit direct access to the resource delegates.

### Public Method Summary

|---|---|
| abstract boolean | [isWrapperFor](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/Wrapper.html#isWrapperFor(java.lang.Class<?>))([Class](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html)\<?\> iface) Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does. |
| abstract \<T\> T | [unwrap](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/Wrapper.html#unwrap(java.lang.Class<T>))([Class](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html)\<T\> iface) Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy. |

## Public Methods

#### public abstract boolean
**isWrapperFor**
([Class](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html)\<?\> iface)

Returns true if this either implements the interface argument or is directly or indirectly a wrapper
for an object that does. Returns false otherwise. If this implements the interface then return true,
else if this is a wrapper then return the result of recursively calling `isWrapperFor` on the wrapped
object. If this does not implement the interface and is not a wrapper, return false.
This method should be implemented as a low-cost operation compared to `unwrap` so that
callers can use this method to avoid expensive `unwrap` calls that may fail. If this method
returns true then calling `unwrap` with the same argument should succeed.

##### Parameters

| iface | a Class defining an interface. |
|---|---|

##### Returns

- true if this implements the interface or directly or indirectly wraps an object that does.

##### Throws

| [SQLException](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/SQLException.html) | if an error occurs while determining whether this is a wrapper for an object with the given interface. |
|---|---|

#### public abstract T
**unwrap**
([Class](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html)\<T\> iface)

Returns an object that implements the given interface to allow access to
non-standard methods, or standard methods not exposed by the proxy.

If the receiver implements the interface then the result is the receiver
or a proxy for the receiver. If the receiver is a wrapper
and the wrapped object implements the interface then the result is the
wrapped object or a proxy for the wrapped object. Otherwise return the
the result of calling `unwrap` recursively on the wrapped object
or a proxy for that result. If the receiver is not a
wrapper and does not implement the interface, then an `SQLException` is thrown.

##### Parameters

| iface | A Class defining an interface that the result must implement. |
|---|---|

##### Returns

- an object that implements the interface. May be a proxy for the actual implementing object.

##### Throws

| [SQLException](https://developers.google.com/j2objc/javadoc/jre/reference/java/sql/SQLException.html) | If no object found that implements the interface |
|---|---|