Вызов среды выполнения Java в расширениях языка SQL Server

Область применения: SQL Server 2019 (15.x) и более поздних версий

Функция расширения языка SQL Server использует системную хранимую процедуру sp_execute_external_script в качестве интерфейса для вызова среды выполнения Java.

В этой статье описываются детали реализации классов и методов Java, которые выполняются в SQL Server.

Место размещения классов Java

Существует два метода вызова классов Java в SQL Server:

  1. Поместите .class или .jar файлы в путь к классу Java.

  2. Отправьте скомпилированные классы в файл и другие зависимости в .jar базу данных с помощью DDL внешней библиотеки .

Примечание.

В качестве общей рекомендации используйте .jar файлы, а не отдельные .class файлы. Это распространенная методика при работе с языком Java, которая в целом упрощает работу. См. также, как создать файл java .jar из файлов классов.

Использование подкаталогов классов (classpath)

Основные принципы

Ниже приведены некоторые основные принципы при выполнении Java на SQL Server.

  • Скомпилированные пользовательские классы Java должны существовать в .class файлах или .jar файлах в классе Java. Параметр CLASSPATH определяет путь к скомпилированным файлам Java.

  • Вызывающий метод Java должен быть указан в параметре script хранимой процедуры.

  • Если класс принадлежит пакету, packageName необходимо указать его.

  • params используется для передачи параметров в класс Java. Вызов метода, требующего аргументов, не поддерживается. Поэтому параметры являются единственным способом передачи значений аргументов в метод.

Примечание.

Эта заметка хранит поддерживаемые и неподдерживаемые операции, относящиеся к Java в SQL Server 2019 (15.x) и более поздних версиях. В хранимой процедуре поддерживаются входные параметры, а выходные параметры не поддерживаются.

Вызов класса Java

Системная хранимая процедура sp_execute_external_script является интерфейсом для вызова среды выполнения Java. В следующем примере показан вызов sp_execute_external_script с использованием расширения Java и параметров для указания пути, сценария и пользовательского кода.

Примечание.

Вам не нужно определять метод для вызова. По умолчанию вызывается execute метод. Это означает, что необходимо следовать пакету SDK расширяемости Microsoft для Java для 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 и создания .jar файла в Java classpathу вас есть два варианта предоставления пути к расширению Java ДЛЯ SQL Server:

  1. Использовать внешние библиотеки

    Самый простой способ — сделать так, чтобы SQL Server автоматически находил классы, создав внешние библиотеки и указав в библиотеке расположение JAR-файла. Использование внешних библиотек для Java

  2. Зарегистрировать системную переменную среды

    Вы можете создать системную переменную среды и указать пути к .jar файлу, который содержит классы. Создайте системную переменную CLASSPATHсреды.

Использование внешней библиотеки

В SQL Server 2019 (15.x) и более поздних версиях можно использовать внешние библиотеки для языка Java в Windows и Linux. Классы можно скомпилировать в .jar файл и передать .jar файл и другие зависимости в базу данных с помощью DDL ВНЕШНЕЙ БИБЛИОТЕКи CREATE.

Пример отправки .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 LANGUAGE.

Подключение к SQL Server с замыканием на себя

Используйте подключение с замыканием на себя для обратного соединения с SQL Server через JDBC с целью чтения или записи данных из кода Java, выполняемого с помощью процедуры sp_execute_external_script. Это можно использовать, если использовать InputDataSet аргументы и OutputDataSet аргументы sp_execute_external_script не возможны. Чтобы установить подключение с замыканием на себя в Windows, используйте следующий пример.

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

Для установки подключения с замыканием на себя в Linux драйверу JDBC требуются три свойства подключения, определенные в следующем сертификате.

Проверка подлинности на основе сертификата клиента