Aufrufen der Java-Runtime in SQL Server-Spracherweiterungen

Gilt für: SQL Server 2019 (15.x) und höhere Versionen

Die SQL Server-Spracherweiterungen verwenden die gespeicherte Systemprozedur sp_execute_external_script als Schnittstelle zum Aufrufen der Java-Runtime.

In diesem Artikel werden Implementierungsdetails für Java-Klassen und -Methoden erläutert, die auf SQL Server ausgeführt werden.

Platzieren von Java-Klassen

Es gibt zwei Methoden für das Aufrufen von Java-Klassen in SQL Server:

  1. Fügen Sie .class- oder .jar-Dateien in Ihren Java-Klassenpfad ein.

  2. Laden Sie kompilierte Klassen in eine .jar-Datei und andere Abhängigkeiten in die Datenbank hoch, indem Sie die DDL der externen Bibliothek verwenden.

Hinweis

Allgemein wird empfohlen, .jar-Dateien und keine einzelnen .class-Dateien zu verwenden. Dies ist eine gängige Vorgehensweise in Java, die den Prozess insgesamt erleichtert. Siehe auch Erstellen einer jar-Datei aus Klassendateien.

Verwenden von CLASSPATH

Grundlegende Prinzipien

Im Folgenden finden Sie einige grundlegende Prinzipien für das Ausführen von Java auf SQL Server.

  • Kompilierte, benutzerdefinierte Java-Klassen müssen in .class- oder .jar-Dateien in Ihrem Java-Klassenpfad vorhanden sein. Der Parameter CLASSPATH stellt den Pfad zu den kompilierten Java-Dateien bereit.

  • Die von Ihnen aufgerufene Java-Methode muss im script-Parameter für die gespeicherte Prozedur bereitgestellt werden.

  • Wenn die Klasse zu einem Paket gehört, muss der packageName bereitgestellt werden.

  • params wird verwendet, um Parameter an eine Java-Klasse zu übergeben. Das Aufrufen einer Methode, die Argumente erfordert, wird nicht unterstützt. Daher stellen Parameter die einzige Möglichkeit dar, um Argumentwerte an Ihre Methode zu übergeben.

Hinweis

Dieser Hinweis behandelt nochmals unterstützte und nicht unterstützte Vorgänge, spezifisch für Java in SQL Server 2019 (15.x) und spätere Versionen. In der gespeicherten Prozedur werden Eingabeparameter unterstützt, während Ausgabeparameter nicht unterstützt werden.

Aufrufen der Java-Klasse

Die gespeicherte Systemprozedur sp_execute_external_script dient als Schnittstelle für das Aufrufen der Java-Runtime. Das folgende Beispiel zeigt ein sp_execute_external_script unter Verwendung der Java-Erweiterung sowie Parameter für das Angeben von Pfad, Skript und benutzerdefiniertem Code.

Hinweis

Sie müssen nicht definieren, welche Methode aufgerufen werden soll. Standardmäßig wird eine Methode namens execute aufgerufen. Dies bedeutet, dass Sie das Microsoft Extensibility SDK für die Java-Erweiterung in SQL Server befolgen und eine Ausführmethode in Ihrer Java-Klasse implementieren müssen.

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;

Festlegen von CLASSPATH

Nachdem Sie Ihre Java-Klasse bzw. -Klassen kompiliert und eine .jar-Datei in Ihrem Java-classpath erstellt haben, stehen Ihnen zwei Optionen zur Verfügung, um den Klassenpfad für die SQL Server Java-Erweiterung bereitzustellen:

  1. Externe Bibliotheken verwenden

    Die einfachste Möglichkeit besteht darin, SQL Server automatisch nach Ihren Klassen suchen zu lassen, indem Sie externe Bibliotheken erstellen und mit der Bibliothek auf eine JAR-Datei verweisen. Verwenden externer Bibliotheken für Java

  2. Systemumgebungsvariable registrieren

    Sie können eine Systemumgebungsvariable erstellen und die Pfade zu Ihrer JAR-Datei bereitstellen, die die Klassen enthält. Erstellen Sie eine System-Umgebungsvariable namens CLASSPATH.

Verwenden externer Bibliotheken

In SQL Server 2019 (15.x) und späteren Versionen können Sie externe Bibliotheken für die Java-Sprache unter Windows und Linux verwenden. Sie können Ihre Klassen in einer .jar-Datei kompilieren und die .jar-Datei und andere Abhängigkeiten mit der DDL EXTERNE BIBLIOTHEK ERSTELLEN in die Datenbank hochladen.

Beispiel für das Hochladen einer .jar-Datei mit externer Bibliothek:

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

Durch das Erstellen einer externen Bibliothek hat SQL Server automatisch Zugriff auf die Java-Klassen, und Sie müssen keine speziellen Berechtigungen für den Klassenpfad festlegen.

Der folgende Code ist ein Beispiel für das Aufrufen einer Methode in einer Klasse aus einem Paket, das als externe Bibliothek hochgeladen wurde:

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

Weitere Informationen finden Sie unter CREATE EXTERNAL LANGUAGE.

Loopbackverbindung mit SQL Server

Verwenden Sie eine Loopbackverbindung, um über JDBC eine Verbindung mit SQL Server herzustellen und Daten aus Java zu lesen oder zu schreiben, die über sp_execute_external_scriptausgeführt werden. Sie können dies verwenden, wenn es nicht möglich ist, die Argumente InputDataSet und OutputDataSet von sp_execute_external_script zu verwenden. Verwenden Sie das folgende Beispiel, um unter Windows eine Loopbackverbindung herzustellen:

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

Zum Erstellen einer Loopbackverbindung unter Linux benötigt der JDBC-Treiber drei Verbindungseigenschaften, die im folgenden Zertifikat definiert sind:

Client-Certificate-Authentication