Microsoft SQL Server JDBC Driver 支持允许您创建类的代理的接口,并且支持允许您访问对 JDBC API 的扩展(特定于通过代理接口的 SQL Server JDBC 驱动程序)的包装。
包装
SQL Server JDBC 驱动程序支持 java.sql.Wrapper 接口。该接口提供一种机制,通过代理接口访问特定于 SQL Server JDBC 驱动程序的 JDBC API 扩展。
java.sql.Wrapper 接口定义两个方法:isWrapperFor 和 unwrap。isWrapperFor 方法检查指定的输入对象是否实现此接口。unwrap 方法返回一个实现此接口的对象,从而允许访问特定于 SQL Server JDBC 驱动程序的方法。
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 开始,接口可用于应用程序服务器,以便从关联的类访问驱动程序特定的方法。应用程序服务器通过创建代理对类进行包装,并且从接口公开 SQL Server JDBC 驱动程序特定的函数。SQL Server JDBC 驱动程序支持具有 SQL Server JDBC 驱动程序特定的方法和常量的接口,因此应用程序服务器可以创建类的代理。
这些接口从标准 Java 接口派生,这样,一旦取消对接口的包装以便访问驱动程序特定的功能或一般 SQL Server JDBC 驱动程序功能时,您可以使用相同的对象。
新增了以下接口:
示例
说明
此示例说明如何从 DataSource 对象访问 SQL Server JDBC 驱动程序特定的函数。此 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); } } }