# Wrapper

Added in[API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# Wrapper

```
interface Wrapper
```

|--------------------------------------------------------------------------------------|
| [java.sql.Wrapper](https://developer.android.com/reference/kotlin/java/sql/Wrapper#) |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Known Direct Subclasses [Connection](https://developer.android.com/reference/kotlin/java/sql/Connection),[DataSource](https://developer.android.com/reference/kotlin/javax/sql/DataSource.html#),[DatabaseMetaData](https://developer.android.com/reference/kotlin/java/sql/DatabaseMetaData),[ParameterMetaData](https://developer.android.com/reference/kotlin/java/sql/ParameterMetaData),[ResultSet](https://developer.android.com/reference/kotlin/java/sql/ResultSet),[ResultSetMetaData](https://developer.android.com/reference/kotlin/java/sql/ResultSetMetaData),[Statement](https://developer.android.com/reference/kotlin/java/sql/Statement) |------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------| | [Connection](https://developer.android.com/reference/kotlin/java/sql/Connection)               | A connection (session) with a specific database.                                                                                      | | [DataSource](https://developer.android.com/reference/kotlin/javax/sql/DataSource.html#)        | A factory for connections to the physical data source that this`DataSource`object represents.                                         | | [DatabaseMetaData](https://developer.android.com/reference/kotlin/java/sql/DatabaseMetaData)   | Comprehensive information about the database as a whole.                                                                              | | [ParameterMetaData](https://developer.android.com/reference/kotlin/java/sql/ParameterMetaData) | An object that can be used to get information about the types and properties for each parameter marker in a`PreparedStatement`object. | | [ResultSet](https://developer.android.com/reference/kotlin/java/sql/ResultSet)                 | A table of data representing a database result set, which is usually generated by executing a statement that queries the database.    | | [ResultSetMetaData](https://developer.android.com/reference/kotlin/java/sql/ResultSetMetaData) | An object that can be used to get information about the types and properties of the columns in a`ResultSet`object.                    | | [Statement](https://developer.android.com/reference/kotlin/java/sql/Statement)                 | The object used for executing a static SQL statement and returning the results it produces.                                           | |

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Known Indirect Subclasses [CallableStatement](https://developer.android.com/reference/kotlin/java/sql/CallableStatement),[PreparedStatement](https://developer.android.com/reference/kotlin/java/sql/PreparedStatement),[RowSet](https://developer.android.com/reference/kotlin/javax/sql/RowSet.html#),[RowSetMetaData](https://developer.android.com/reference/kotlin/javax/sql/RowSetMetaData.html#) |-------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| | [CallableStatement](https://developer.android.com/reference/kotlin/java/sql/CallableStatement)  | The interface used to execute SQL stored procedures.                                 | | [PreparedStatement](https://developer.android.com/reference/kotlin/java/sql/PreparedStatement)  | An object that represents a precompiled SQL statement.                               | | [RowSet](https://developer.android.com/reference/kotlin/javax/sql/RowSet.html#)                 | The interface that adds support to the JDBC API for the JavaBeansTM component model. | | [RowSetMetaData](https://developer.android.com/reference/kotlin/javax/sql/RowSetMetaData.html#) | An object that contains information about the columns in a`RowSet`object.            | |

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.

## Summary

|                                                                                                                                                                                                               Public methods                                                                                                                                                                                                               ||
|--------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [isWrapperFor](https://developer.android.com/reference/kotlin/java/sql/Wrapper#isWrapperFor(java.lang.Class))`(`iface:` `[Class](https://developer.android.com/reference/kotlin/java/lang/Class.html#)<*>!`)` Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does.    |
| abstractT                                                                                  | [unwrap](https://developer.android.com/reference/kotlin/java/sql/Wrapper#unwrap(java.lang.Class))`(`iface:` `[Class](https://developer.android.com/reference/kotlin/java/lang/Class.html#)<T>!`)` 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

### isWrapperFor

Added in[API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun isWrapperFor(iface: Class<*>!): Boolean
```

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` | [Class](https://developer.android.com/reference/kotlin/java/lang/Class.html#)\<\*\>!:a Class defining an interface. |

|                                                                                     Return                                                                                     ||
|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | true if this implements the interface or directly or indirectly wraps an object that does. |

|                                                           Exceptions                                                            ||
|-------------------------|--------------------------------------------------------------------------------------------------------|
| `java.sql.SQLException` | if an error occurs while determining whether this is a wrapper for an object with the given interface. |

### unwrap

Added in[API level 9](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun <T : Any!> unwrap(iface: Class<T>!): T
```

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` | [Class](https://developer.android.com/reference/kotlin/java/lang/Class.html#)\<T\>!:A Class defining an interface that the result must implement. |

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

|                                Exceptions                                 ||
|-------------------------|--------------------------------------------------|
| `java.sql.SQLException` | If no object found that implements the interface |