The Wrapper interface provides a mechanism for JDBC users to be able to access an instance of a resource which has been wrapped for architectural reasons. This mechanism helps to eliminate the need to use non-standard means to access vendor specific resources. 

The following JDBC interfaces are subinterfaces of the Wrapper interface:

  • java.sql.Connection
  • java.sql.DatabaseMetaData
  • java.sql.ParameterMetaData
  • java.sql.ResultSet
  • java.sql.ResultSetMetaData
  • java.sql.Statement
  • javax.sql.Datasource

The Wrapper interface consists of two methods:

  • isWrapperFor - Returns true if this either implements the interface argument or is directly or indirectly a wrapper for an object that does.
  • unwrap - Returns an object that implements the given interface to allow access to non-standard methods, or standard methods not exposed by the proxy.
Here is a simple example of using these new methods: 
  Statement stmt = conn.createStatement();
  Class clzz = Class.forName("oracle.jdbc.OracleStatement");
  OracleStatement os;
  if(stmt.isWrapperFor(clzz)) {
     os = stmt.unwrap(clzz);
     os.defineColumnType(1, Types.NUMBER);
  }