適用対象:SQL Server 2019 (15.x) 以降のバージョン
SQL Server 言語拡張機能は、Java ランタイムを呼び出すインターフェイスとして sp_execute_external_script システム ストアド プロシージャを使用します。
このハウツー記事では、SQL Server 上で実行される Java クラスとメソッドの実装について詳しく説明します。
Java クラスの配置場所
SQL Server で Java クラスを呼び出すには、次の 2 つの方法があります。
.classまたは.jarファイルを Java クラスパスに配置します。
Note
一般的な推奨事項として、個別の .jar ファイルではなく、.class ファイルを使用します。 これは Java での一般的な方法であり、全体的なエクスペリエンスが簡単になります。 「クラス ファイルから Java .jar ファイルを作成する」も参照してください。
クラスパスを使用する
基本原則
SQL Server で Java を実行する場合の基本的な原則を次に示します。
コンパイルされたカスタム Java クラスは、Java クラスパスの
.classファイルまたは.jarファイルに存在する必要があります。 CLASSPATH パラメーターには、コンパイル済みの Java ファイルへのパスを指定します。呼び出している Java メソッドは、ストアド プロシージャの
scriptパラメータで指定する必要があります。クラスがパッケージに属している場合は、
packageNameを提供する必要があります。paramsは、Java クラスにパラメータを渡すために使用されます。 引数を必要とするメソッドの呼び出しはサポートされていません。 そのため、引数の値をメソッドに渡すには、パラメーターが唯一の方法です。
Note
このメモでは、SQL Server 2019 (15.x) 以降のバージョンの Java に固有のサポートされている操作とサポートされていない操作について改めて説明します。 ストアド プロシージャでは、入力パラメーターがサポートされていますが、出力パラメーターはサポートされていません。
Java クラスを呼び出す
sp_execute_external_script システム ストアド プロシージャは、Java ランタイムの呼び出しに使用されるインターフェイスです。 Java 拡張を使用する sp_execute_external_script と、パス、スクリプト、およびカスタム コードを指定するパラメーターの例を次に示します。
Note
どのメソッドを呼び出すかを定義する必要はありません。 デフォルトでは、execute というメソッドが呼び出されます。 これは、Microsoft Extensibility SDK for Java for SQL Server に従い、Java クラスに実行メソッドを実装する必要があることを意味します。
DECLARE @param1 AS INT;
SET @param1 = 3;
EXECUTE sp_execute_external_script
@language = N'Java',
@script = N'<packageName>.<ClassName>',
@input_data_1 = N'<Input Query>',
@param1 = @param1;
CLASSPATH を設定する
Java クラスをコンパイルし、Java .jar に classpath ファイルを作成したら、SQL Server Java 拡張機能へのパスを指定するための 2 つのオプションがあります。
外部ライブラリを使用する
最も簡単な方法は、外部ライブラリを作成し、ライブラリを jar にポイントして、SQL Server からクラスを自動的に見つけられるようにすることです。 Java 用外部ライブラリを使用する
システム環境変数を登録する
システム環境変数を作成し、クラスを含む
.jarファイルのパスを指定することができます。CLASSPATHというシステム環境変数を作成します。
外部ライブラリを使用する
SQL Server 2019 (15.x) 以降のバージョンでは、Windows および Linux 上の Java 言語の外部ライブラリを使用できます。
.jar を使用して、クラスを .jar ファイルにコンパイルし、 ファイルとその他の依存関係をデータベースにアップロードできます。
外部ライブラリを使用して .jar ファイルをアップロードする方法の例:
CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO
外部ライブラリを作成すると、SQL Server は自動的に Java クラスにアクセスできるようになり、クラスパスに特別なアクセス許可を設定する必要はありません。
次のコードは、外部ライブラリとしてアップロードされたパッケージからクラス内のメソッドを呼び出す例です。
EXECUTE sp_execute_external_script
@language = N'Java',
@script = N'MyPackage.MyCLass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
詳細については、「CREATE EXTERNAL LIBRARY」を参照してください。
SQL Server への Loopback 接続
sp_execute_external_script から実行される Java からデータの読み取りまたは書き込みを行うために、Loopback 接続を使用して JDBC 経由で SQL Server に接続します。
InputDataSet の OutputDataSet および sp_execute_external_script 引数を使用できない場合にこれを使用できます。
Windows で Loopback 接続するには、次の例を使用します。
jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
Linux で Loopback 接続するには、JDBC ドライバーに、次の証明書に定義されている 3 つの接続プロパティが必要になります。
Client-Certificate-Authentication