SQL Server 的用于 Java 的 Microsoft 扩展性 SDK

适用于:SQL Server 2019 (15.x) 及更高版本

了解如何才能使用用于 Java 的 Microsoft 扩展性 SDK 为 SQL Server 实现 Java 程序。 SDK 是用于与 SQL Server 交换数据并从 SQL Server 执行 Java 代码的 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 运行时通信。 若要使用 SDK,需要在主类中遵循一些实现规则。 SQL Server 随后可以执行 Java 类中的特定方法,并使用 Java 语言扩展交换数据。

有关如何使用 SDK 的示例,请参阅教程:在 Java 中使用正则表达式 (regex) 搜索字符串

SDK 类

SDK 由三个类组成。

定义 Java 扩展用于与 SQL Server 交换数据的接口的两个抽象类:

  • AbstractSqlServerExtensionExecutor
  • AbstractSqlServerExtensionDataset

第三个类是帮助程序类,包含数据集对象的实现。 这是可以使用的可选类,这样可以更轻松地入门。 还可以改为使用你自己对这样一个类的实现。

  • PrimitiveDataset

在下节中,将会看到 SDK 中每个类的说明。 SDK 类的源代码在 SQL Server 语言扩展 GitHub 存储库中提供。

类:AbstractSqlServerExtensionExecutor

抽象类 AbstractSqlServerExtensionExecutor 包含由 SQL Server 的 Java 语言扩展用于执行 Java 代码的接口。

主 Java 类需要从此类继承。 从此类继承表示类中有一些需要在自己的类中实现的特定方法。

若要从此抽象类继承,请在类声明中使用抽象类名进行扩展:

public class <MyClass> extends AbstractSqlServerExtensionExecutor {}

主类至少需要实现 execute(...) 方法。

execute 方法

execute 方法是通过 Java 语言扩展从 SQL Server 进行调用,以便从 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 继承的自己的类。