包装和接口

Microsoft JDBC Driver for SQL Server 支持允许您创建类的代理的接口，并且支持允许您访问对 JDBC API 的扩展（特定于通过代理接口的 Microsoft JDBC Driver for SQL Server）的包装。

# 包装

Microsoft JDBC Driver for SQL Server 支持 java.sql.Wrapper 接口。该接口提供一种机制，通过代理接口访问特定于 Microsoft JDBC Driver for SQL Server 的 JDBC API 扩展。

java.sql.Wrapper 接口定义两个方法：isWrapperFor 和 unwrap。isWrapperFor 方法检查指定的输入对象是否实现此接口。unwrap 方法返回一个实现此接口的对象，从而允许访问特定于 Microsoft JDBC Driver for SQL Server 的方法。

isWrapperFor 和 unwrap 方法按如下所示公开：

- isWrapperFor 方法 (SQLServerCallableStatement)

- unwrap 方法 (SQLServerCallableStatement)

- isWrapperFor 方法 (SQLServerConnectionPoolDataSource)

- unwrap 方法 (SQLServerConnectionPoolDataSource)

- isWrapperFor 方法 (SQLServerDataSource)

- unwrap 方法 (SQLServerDataSource)

- isWrapperFor 方法 (SQLServerPreparedStatement)

- unwrap 方法 (SQLServerPreparedStatement)

- isWrapperFor 方法 (SQLServerStatement)

- unwrap 方法 (SQLServerStatement)

- isWrapperFor 方法 (SQLServerXADataSource)

- unwrap 方法 (SQLServerXADataSource)

# 接口

从 SQL Server JDBC Driver 3.0 开始，接口可用于应用程序服务器，以便从关联的类访问驱动程序特定的方法。应用程序服务器通过创建代理对类进行包装，并且从接口公开 Microsoft JDBC Driver for SQL Server 特定的函数。Microsoft JDBC Driver for SQL Server 支持具有 Microsoft JDBC Driver for SQL Server 特定的方法和常量的接口，因此应用程序服务器可以创建类的代理。

这些接口从标准 Java 接口派生，这样，一旦取消对接口的包装以便访问驱动程序特定的功能或一般 Microsoft JDBC Driver for SQL Server 功能时，您可以使用相同的对象。

新增了以下接口：

- ISQLServerCallableStatement

- ISQLServerConnection

- ISQLServerDataSource

- ISQLServerPreparedStatement

- ISQLServerResultSet

- ISQLServerStatement

# 示例

# 说明

此示例说明如何从 DataSource 对象访问 Microsoft JDBC Driver for SQL Server 特定的函数。此 DataSource 类可能已由应用程序服务器包装。若要访问 JDBC 驱动程序特定的函数或常量，您可以取消数据源对 ISQLServerDataSource 接口的数据源的包装，并且使用在此接口中声明的函数。

# 代码

    import javax.sql.*;
    import java.sql.*;
    import com.microsoft.sqlserver.jdbc.*;

    public class UnWrapTest {
       public static void main(String[] args) {
          // This is a test.  This DataSource object could be something from an appserver
          // which has wrapped the real SQLServerDataSource with its own wrapper
          SQLServerDataSource ds = new SQLServerDataSource();
          checkSendStringParametersAsUnicode(ds);
       }

       // Unwrap to the ISQLServerDataSource interface to access the getSendStringParametersAsUnicode function
       static void checkSendStringParametersAsUnicode(DataSource ds) {
          try {
             final ISQLServerDataSource sqlServerDataSource = ds.unwrap(ISQLServerDataSource.class);
             boolean sendStringParametersAsUnicode = sqlServerDataSource.getSendStringParametersAsUnicode();

             System.out.println("Send string as parameter value is:-" + sendStringParametersAsUnicode);

          } catch (SQLException sqlE) {
             System.out.println("Exception:-" + sqlE);
          }
       }
    }

# 请参阅

了解 JDBC 驱动程序数据类型
发送有关本主题的反馈至 Microsoft。

© 2012 Microsoft。保留所有权利。