SQL Server 言語拡張で Java ランタイムを呼び出す方法

適用対象: SQL Server 2019 (15.x) 以降のバージョン

SQL Server 言語拡張機能は、Java ランタイムを呼び出すインターフェイスとして sp_execute_external_script システム ストアド プロシージャを使用します。

このハウツー記事では、SQL Server 上で実行される Java クラスとメソッドの実装について詳しく説明します。

Java クラスの配置場所

SQL Server で Java クラスを呼び出すには、次の 2 つの方法があります。

  1. .class または .jar ファイルを Java クラスパスに配置します。

  2. 外部ライブラリ DDL を使用して、.jar ファイル内のコンパイル済みクラスとその他の依存関係をデータベースにアップロードします。

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 INT

SET @param1 = 3

EXEC sp_execute_external_script @language = N'Java',
    @script = N'<packageName>.<ClassName>',
    @input_data_1 = N'<Input Query>',
    @param1 = @param1;

CLASSPATH を設定する

Java クラスをコンパイルし、Java .jarclasspath ファイルを作成したら、SQL Server Java 拡張機能へのパスを指定するための 2 つのオプションがあります。

  1. 外部ライブラリを使用する

    最も簡単な方法は、外部ライブラリを作成し、ライブラリを jar にポイントして、SQL Server からクラスを自動的に見つけられるようにすることです。 Java 用外部ライブラリを使用する

  2. システム環境変数を登録する

    システム環境変数を作成し、クラスを含む jar ファイルのパスを指定することができます。 CLASSPATH というシステム環境変数を作成します。

外部ライブラリを使用する

SQL Server 2019 (15.x) 以降のバージョンでは、Windows および Linux 上の Java 言語の外部ライブラリを使用できます。 CREATE EXTERNAL LIBRARY DDL を使用して、クラスを .jar ファイルにコンパイルし、.jar ファイルとその他の依存関係をデータベースにアップロードできます。

外部ライブラリを使用して .jar ファイルをアップロードする方法の例:

CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO

外部ライブラリを作成すると、SQL Server は自動的に Java クラスにアクセスできるようになり、クラスパスに特別なアクセス許可を設定する必要はありません。

次のコードは、外部ライブラリとしてアップロードされたパッケージからクラス内のメソッドを呼び出す例です。

EXEC 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 に接続します。 InputDataSetOutputDataSet および sp_execute_external_script 引数を使用できない場合にこれを使用できます。 Windows で Loopback 接続するには、次の例を使用します。

jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;

Linux で Loopback 接続するには、JDBC ドライバーに、次の証明書に定義されている 3 つの接続プロパティが必要になります。

Client-Certificate-Authentication