Volání modulu runtime Java v jazykových rozšířeních SQL Serveru

Platí pro: SQL Server 2019 (15.x) a novější verze

Funkce SQL Server Language Extensions používá jako rozhraní pro volání běhového prostředí Java systémovou uloženou proceduru sp_execute_external_script.

Tento článek s postupy vysvětluje podrobnosti implementace tříd a metod Javy, které se spouští na SQL Serveru.

Kde umístit třídy Javy

Existují dvě metody volání tříd Java v SQL Serveru:

  1. Umístěte soubory .class nebo .jar do vaší class path jazyka Java.

  2. Nahrajte kompilované třídy v souboru .jar a další závislosti do databáze pomocí DDL příkazu external library.

Poznámka:

Obecně doporučujeme používat .jar soubory, nikoli jednotlivé .class soubory. To je běžný postup v Javě a usnadní celkový zážitek. Viz také Vytvoření souboru java .jar ze souborů třídy.

Použijte classpath

Základní principy

Následuje několik základních principů při spouštění Javy na SQL Serveru.

  • Zkompilované vlastní třídy Java musí být umístěny v souborech .class nebo .jar na cestě tříd Java. Parametr CLASSPATH poskytuje cestu ke zkompilovaným souborům Java.

  • Metoda Java, kterou voláte, musí být uvedena v parametru script u uložené procedury.

  • Pokud třída patří do balíčku, packageName musí být k dispozici.

  • params slouží k předávání parametrů do třídy Java. Volání metody, která vyžaduje argumenty, není podporováno. Parametry jsou proto jediným způsobem, jak předat hodnoty argumentů metodě.

Poznámka:

Tato poznámka uvádí podporované a nepodporované operace specifické pro Javu v SQL Serveru 2019 (15.x) a novějších verzích. U uložené procedury se podporují vstupní parametry, zatímco výstupní parametry se nepodporují.

Volání třídy Java

Uložená procedura sp_execute_external_script systému je rozhraní, které slouží k volání modulu runtime Java. Následující příklad ukazuje sp_execute_external_script s rozšířením Java a parametry pro zadání cesty, skriptu a vlastního kódu.

Poznámka:

Nemusíte určovat, kterou metodu volat. Ve výchozím nastavení se volá metoda execute . To znamená, že se musíte řídit sadou Microsoft Extensibility SDK for Java for SQL Server a implementovat metodu execute ve své třídě v jazyce Java.

DECLARE @param1 AS INT;

SET @param1 = 3;

EXECUTE sp_execute_external_script
    @language = N'Java',
    @script = N'<packageName>.<ClassName>',
    @input_data_1 = N'<Input Query>',
    @param1 = @param1;

Nastavit CLASSPATH

Po kompilaci třídy nebo tříd Java a vytvoření .jar souboru v Javě classpathmáte dvě možnosti pro poskytnutí cesty k rozšíření SQL Server Java:

  1. Použití externích knihoven

    Nejjednodušší možností je nastavit, aby SQL Server automaticky našel vaše třídy vytvořením externích knihoven a nasměrováním knihovny na soubor JAR. Použití externích knihoven pro Javu

  2. Registrace proměnné systémového prostředí

    Můžete vytvořit systémovou proměnnou prostředí a zadat cesty k .jar souboru, který obsahuje třídy. Vytvořte systémovou proměnnou prostředí s názvem CLASSPATH.

Použití externí knihovny

V SQL Serveru 2019 (15.x) a novějších verzích můžete používat externí knihovny pro jazyk Java ve Windows a Linuxu. Třídy můžete zkompilovat do .jar souboru a nahrát .jar soubor a další závislosti do databáze pomocí CREATE EXTERNAL LIBRARY DDL.

Příklad, jak nahrát soubor .jar pomocí externí knihovny:

CREATE EXTERNAL LIBRARY myJar
    FROM (CONTENT = '<local path to .jar file>')
    WITH (LANGUAGE = 'Java');
GO

Když vytvoří externí knihovnu, SQL Server má automaticky přístup ke třídám Java a není nutné nastavit žádná zvláštní oprávnění pro cestu k třídám.

Následující kód je příkladem volání metody ve třídě z balíčku nahraného jako externí knihovna:

EXECUTE sp_execute_external_script
    @language = N'Java',
    @script = N'MyPackage.MyCLass',
    @input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));

Další informace najdete na webu CREATE EXTERNAL LIBRARY.

Připojení zpětné smyčky k SQL Serveru

Pomocí loopback připojení se znovu připojte k SQL Serveru přes JDBC pro čtení a zápis dat z Javy spouštěné z sp_execute_external_script. Můžete to použít, pokud není možné použít argumenty InputDataSet a OutputDataSet u sp_execute_external_script. Chcete-li ve Windows vytvořit loopback připojení, použijte následující příklad:

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

Chcete-li v Linuxu vytvořit připojení loopback, ovladač JDBC vyžaduje tři parametry připojení definované v následujícím certifikátu:

Ověřování pomocí certifikátu klienta