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:
Fügen Sie
.class
- oder.jar
-Dateien in Ihren Java-Klassenpfad ein.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 Java-.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:
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
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 namensCLASSPATH
.
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_script
ausgefü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:
Clientzertifikatsauthentifizierung