包装器和接口
Microsoft JDBC Driver for SQL Server 支持允许你创建类的代理的接口,并且支持允许你通过代理接口访问(特定于 Microsoft JDBC Driver for SQL Server的)JDBC API 扩展的包装器。
包装
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);
}
}
}