ラッパーとインターフェイス
SQL Server 用 Microsoft JDBC ドライバー は、クラスのプロキシを作成できるインターフェイスと、SQL Server 用 Microsoft JDBC ドライバー に固有の JDBC API 拡張機能に対し、プロキシ インターフェイス経由でアクセスするためのラッパーをサポートします。
ラッパー
SQL Server 用 Microsoft JDBC ドライバー は、java.sql.Wrapper インターフェイスをサポートします。 このインターフェイスには、SQL Server 用 Microsoft JDBC ドライバー に固有の JDBC API 拡張機能に対し、プロキシ インターフェイス経由でアクセスするためのメカニズムが備わっています。
java.sql.Wrapper インターフェイスには、isWrapperFor と unwrap の 2 つのメソッドが定義されています。 isWrapperFor は、指定された入力オブジェクトに、このインターフェイスが実装されているかどうかをチェックするメソッドです。 unwrap メソッドは、このインターフェイスを実装するオブジェクトを返します。このメソッドから返されたオブジェクトを使用することで、SQL Server 用 Microsoft 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 用 Microsoft JDBC ドライバー 固有の機能を公開することで、クラスをラップできます。 SQL Server 用 Microsoft JDBC ドライバー では、アプリケーション サーバーがクラスのプロキシを作成できるように、SQL Server 用 Microsoft JDBC ドライバー 固有のメソッドと定数を持つインターフェイスをサポートします。
このインターフェイスは標準の Java インターフェイスから派生するため、オブジェクトをアンラップしてドライバー固有の機能または汎用 SQL Server 用 Microsoft JDBC ドライバー 機能にアクセスした後で、同じオブジェクトを使用できます。
次のインターフェイスが追加されています。
- ISQLServerCallableStatement
- ISQLServerConnection
- ISQLServerDataSource
- ISQLServerPreparedStatement
- ISQLServerResultSet
- ISQLServerStatement
例
説明
このサンプルは、DataSource オブジェクトから SQL Server 用 Microsoft JDBC ドライバー 固有の関数にアクセスする方法を示しています。 この DataSource クラスはアプリケーション サーバーによってラップされた可能性があります。 JDBC Driver 固有の関数または定数にアクセスするには、データソースを 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);
}
}
}