如何在 SQL Server 語言延伸模組中呼叫 Java 執行階段
適用於:SQL Server 2019 (15.x) 和更新版本
SQL Server 語言延伸模組功能會使用 sp_execute_external_script 系統預存程序,作為呼叫 Java 執行階段的介面。
此操作說明文章會針對在 SQL Server 上執行的 Java 類別與方法,說明其實作詳細資料。
Java 類別的放置位置
有兩種方法可在 SQL Server 中呼叫 Java 類別:
將
.class
或.jar
檔案放在您的 Java classpath 中。使用外部程式庫 DDL,將
.jar
檔案中的已編譯類別與其他相依性上傳至資料庫。
注意
一般建議使用 .jar
檔案,而不是個別的 .class
檔案。 這在 Java 中是常見的作法,可讓整體體驗變得更容易。 另請參閱從類別檔案建立 Java .jar 檔案。
使用 Classpath
基本原則
以下是在 SQL Server 上執行 Java 時的一些基本原則。
已編譯的自訂 Java 類別必須存在於 Java classpath 的
.class
檔案或.jar
檔案中。 CLASSPATH 參數提供已編譯之 Java 檔案的路徑。您要呼叫的 Java 方法必須在預存程序的
script
參數中提供。如果類別屬於套件,則必須提供
packageName
。params
用來將參數傳遞至 Java 類別。 不支援呼叫需要引數的方法。 因此,參數是將引數值傳遞給方法的唯一方式。
注意
此附註會重述 SQL Server 2019 (15.x) 和更新版本中支援與不支援的 Java 專屬操作。 在預存程序中,支援輸入參數,但不支援輸出參數。
呼叫 Java 類別
sp_execute_external_script 系統預存程序是用來呼叫 Java Runtime 的介面。 下列範例顯示使用 Java 延伸模組的 sp_execute_external_script
,以及用來指定路徑、指令碼與自訂程式碼的參數。
注意
您不需要定義要呼叫的方法。 預設會呼叫名為 execute
的方法。 這表示您必須依照適用於 SQL Server 的 Microsoft Extensibility SDK for Java,並在您的 Java 類別中實作 execute 方法。
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 .jar
中建立 classpath
檔案之後,您有兩個選項可用來提供 SQL Server Java 延伸模組的路徑:
使用外部程式庫
最簡單的選項是透過建立外部程式庫並將該程式庫指向 jar,讓 SQL Server 自動尋找您的類別。 使用適用於 Java 的外部程式庫
註冊系統環境變數
您可以建立系統環境變數,並提供包含類別之
.jar
檔案的路徑。 建立名為CLASSPATH
的系統環境變數。
使用外部程式庫
在 SQL Server 2019 (15.x) 和更新版本中,您可以在 Windows 與 Linux 上使用適用於 Java 語言的外部程式庫。 您可以將類別編譯到 .jar
檔案中,並使用 CREATE EXTERNAL LIBRARY DDL,將該 .jar
檔案與其他相依性上傳至資料庫。
如何使用外部程式庫上傳 .jar
檔案的範例:
CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO
建立外部程式庫時,SQL Server 將會自動擁有 Java 類別的存取權,而且您不需要為 Classpath 設定任何特殊存取權限。
以下程式碼是從當作外部程式庫上傳的套件中呼叫類別中方法的範例:
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 的回送連線
使用回送連線透過 JDBC 連線回 SQL Server,以從透過 sp_execute_external_script
執行的 Java 讀取和寫入資料。 當無法使用 sp_execute_external_script
的 InputDataSet
和 OutputDataSet
引數時,可以使用它。
若要在 Windows 內進行回送連線,請使用下列範例:
jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
若要在 Linux 內進行回送連線,JDBC 驅動程式要求在下列憑證中定義三個連線屬性: