適用於 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 會安裝為 Windows 和 Linux 上 SQL Server 2019 (15.x) 和更新版本的一部分:
- 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
的類別。