Вызов среды выполнения Java в расширениях языка SQL Server
Область применения: SQL Server 2019 (15.x) и более поздних версий
Функция расширения языка SQL Server использует системную хранимую процедуру sp_execute_external_script в качестве интерфейса для вызова среды выполнения Java.
В этой статье описываются детали реализации классов и методов Java, которые выполняются в SQL Server.
Место размещения классов Java
Существует два метода вызова классов Java в SQL Server:
Поместите
.class
или.jar
файлы в путь к классу Java.Отправьте скомпилированные классы в файл и другие зависимости в
.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:
Использовать внешние библиотеки
Самый простой способ — сделать так, чтобы SQL Server автоматически находил классы, создав внешние библиотеки и указав в библиотеке расположение JAR-файла. Использование внешних библиотек для Java
Зарегистрировать системную переменную среды
Вы можете создать системную переменную среды и указать пути к
.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 требуются три свойства подключения, определенные в следующем сертификате.
Проверка подлинности на основе сертификата клиента