適用於 SQL Server 的 Microsoft Extensibility SDK for Java

適用於:SQL Server 2019 (15.x) 和更新版本

了解如何使用「適用於 Java 的 Microsoft 擴充性 SDK」來實作適用於 SQL Server 的 Java 程式。 SDK 是 Java 語言延伸模組的介面,可用來與 SQL Server 交換資料,並從 SQL Server 執行 Java 程式碼。

SDK 會安裝為 SQL Server 2019 (15.x) 和更新版本的一部分,同時安裝在 Windows 和 Linux 上:

  • Windows 上的預設安裝路徑: <instance installation home directory>\MSSQL\Binn\mssql-java-lang-extension.jar
  • Linux 上的預設安裝路徑: /opt/mssql/lib/mssql-java-lang-extension.jar

此程式碼是開放原始碼,而且可以在 SQL Server 語言延伸模組 GitHub 存放庫中找到。

實作需求

SDK 介面會定義一組需求,必須滿足這組需求,SQL Server 才能與 Java Runtime 進行通訊。 若要使用 SDK,您必須在主要類別中遵循一些實作規則。 之後,SQL Server 可以執行 Java 類別中的特定方法,並使用 Java 語言延伸模組交換資料。

如需如何使用 SDK 的範例,請參閱教學課程:在 Java 中使用規則運算式 (regex) 搜尋字串

SDK 類別

SDK 是由三個類別所組成。

以下兩個抽象類別會定義 Java 延伸模組用來與 SQL Server 交換資料的介面:

  • AbstractSqlServerExtensionExecutor
  • AbstractSqlServerExtensionDataset

第三個類別是 helper 類別,其中包含資料集物件的實作。 這是您可以使用的選擇性類別,可讓您更輕鬆地開始使用。 您也可以改為使用自己的此類類別實作。

  • PrimitiveDataset

在下一節中,您會在 SDK 中找到每個類別的描述。 您可以在 SQL Server 語言延伸模組 GitHub 存放庫中找到 SDK 類別的原始程式碼。

類別:AbstractSqlServerExtensionExecutor

抽象類 AbstractSqlServerExtensionExecutor 包含介面,用來由 SQL Server 的 Java 語言延伸模組執行 Java 程式代碼。

您的主要 Java 類別必須繼承自此類別。 繼承自此類別表示類別中有您必須在自己的類別中實作的特定方法。

若要繼承自這個抽象類別,您可以在類別宣告中使用抽象類別名稱來擴充:

public class <MyClass> extends AbstractSqlServerExtensionExecutor {}

您的主要類別至少必須實作 execute(...) 方法。

execute 方法

execute 方法是從 SQL Server 透過 Java 語言延伸模組呼叫的方法,用來從 SQL Server 叫用 Java 程式碼。 這是一個索引鍵方法,其中包含您想要從 SQL Server 執行的主要作業。

若要從 SQL Server 將方法引數傳遞至 Java,請在 sp_execute_external_script 中使用 @param 參數。 方法 execute 會以這種方式採用其自變數。

public AbstractSqlServerExtensionDataset execute(AbstractSqlServerExtensionDataset input, LinkedHashMap<String, Object> params)  {}

init 方法

init 方法會在建構函式之後和 execute 方法之前執行。 在此方法中可以完成之前 execute(...) 需要執行的任何作業。

public void init(String sessionId, int taskId, int numtask) {}

類別:AbstractSqlServerExtensionDataset

抽象類 AbstractSqlServerExtensionDataset 包含介面,用於處理 Java 延伸模組所使用的輸入和輸出數據。

類別:PrimitiveDataset

類別 PrimitiveDataset 是的 AbstractSqlServerExtensionDataset 實作,會將簡單型別儲存為基本型別數位列。

PrimitiveDataset 會在 SDK 中提供作為選擇性協助程式類別。 如果您未使用此類別,則必須實作繼承自 AbstractSqlServerExtensionDataset的您自己的類別。