Wrappers et interfaces
Le Pilote Microsoft JDBC pour SQL Server prend en charge les interfaces qui permettent de créer un proxy d’une classe, ainsi que les wrappers qui permettent d’accéder à des extensions de l’API JDBC propres au Pilote Microsoft JDBC pour SQL Server par le biais d’une interface proxy.
Wrappers
Le Pilote Microsoft JDBC pour SQL Server prend en charge l’interface java.sql.Wrapper. Cette interface fournit un mécanisme d’accès aux extensions de l’API JDBC qui sont propres au Pilote Microsoft JDBC pour SQL Server par le biais d’une interface proxy.
L’interface java.sql.Wrapper définit deux méthodes : isWrapperFor et unwrap. La méthode isWrapperFor vérifie si l’objet d’entrée spécifié implémente cette interface. La méthode unwrap retourne un objet qui implémente cette interface afin d’autoriser l’accès aux méthodes propres au Pilote Microsoft JDBC pour SQL Server.
Les méthodes isWrapperFor et unwrap sont exposées de la façon suivante :
- Méthode isWrapperFor (SQLServerCallableStatement)
- Méthode unwrap (SQLServerCallableStatement)
- Méthode isWrapperFor (SQLServerConnectionPoolDataSource)
- Méthode unwrap (SQLServerConnectionPoolDataSource)
- Méthode isWrapperFor (SQLServerDataSource)
- Méthode unwrap (SQLServerDataSource)
- Méthode isWrapperFor (SQLServerPreparedStatement)
- Méthode unwrap (SQLServerPreparedStatement)
- Méthode isWrapperFor (SQLServerStatement)
- Méthode unwrap (SQLServerStatement)
- Méthode isWrapperFor (SQLServerXADataSource)
- Méthode unwrap (SQLServerXADataSource)
Interfaces
À compter de la version 3.0 de SQL Server JDBC Driver, des interfaces sont disponibles pour permettre à un serveur d’applications d’accéder à une méthode propre au pilote à partir de la classe associée. Le serveur d’applications peut encapsuler la classe en créant un proxy, exposant la fonctionnalité propre au Pilote Microsoft JDBC pour SQL Server à partir d’une interface. Le Pilote Microsoft JDBC pour SQL Server prend en charge les interfaces disposant des méthodes et constantes propres au Pilote Microsoft JDBC pour SQL Server, de sorte qu’un serveur d’applications puisse créer un proxy de la classe.
Les interfaces sont dérivées d’interfaces Java standard. Par conséquent, vous pouvez utiliser le même objet une fois qu’il est désencapsulé pour accéder à la fonctionnalité Pilote Microsoft JDBC pour SQL Server propre au pilote ou à la fonctionnalité générique.
Les interfaces suivantes ont été ajoutées :
- ISQLServerCallableStatement
- ISQLServerConnection
- ISQLServerDataSource
- ISQLServerPreparedStatement
- ISQLServerResultSet
- ISQLServerStatement
Exemple
Description
L’exemple suivant montre comment accéder à une fonctionnalité propre au Pilote Microsoft JDBC pour SQL Server à partir d’un objet DataSource. Cette classe DataSource peut avoir été encapsulée par un serveur d’applications. Pour accéder à la fonctionnalité ou constante propre au pilote JDBC, vous pouvez désencapsuler la source de données dans une interface ISQLServerDataSource et utiliser les fonctionnalités déclarées dans cette interface.
Code
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);
}
}
}