Microsoft-Erweiterbarkeits-SDK für Java für SQL Server

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

Erfahren Sie, wie Sie mit dem Microsoft-Erweiterbarkeits-SDK für Java ein Java-Programm für SQL Server implementieren. Das SDK ist eine Schnittstelle für die Java-Spracherweiterung, die zum Austauschen von Daten mit SQL Server und zum Ausführen von Java-Code aus SQL Server verwendet wird.

Das SDK wird als Teil von SQL Server 2019 (15.x) und höheren Versionen sowohl unter Windows als auch unter Linux installiert:

  • Standardinstallationspfad unter Windows: <instance installation home directory>\MSSQL\Binn\mssql-java-lang-extension.jar
  • Standardinstallationspfad unter Linux: /opt/mssql/lib/mssql-java-lang-extension.jar

Es handelt sich um Open-Source-Code, der im GitHub-Repository für SQL Server-Spracherweiterungen zur Verfügung steht.

Anforderungen an die Implementierung

Die SDK-Schnittstelle definiert eine Reihe von Anforderungen, die erfüllt sein müssen, damit SQL Server mit der Java-Runtime kommunizieren kann. Um das SDK zu verwenden, müssen Sie in Ihrer Hauptklasse einige Implementierungsregeln befolgen. SQL Server kann dann eine bestimmte Methode in der Java-Klasse ausführen und über die Java-Spracherweiterung Daten austauschen.

Ein Beispiel für die Verwendung des SDKs finden Sie unter Tutorial: Suchen nach einer Zeichenfolge mithilfe regulärer Ausdrücke (RegEx) in Java.

SDK-Klassen

Das SDK besteht aus drei Klassen.

Zwei abstrakte Klassen definieren die Schnittstelle, die von der Java-Erweiterung zum Austauschen von Daten mit SQL Server verwendet wird:

  • AbstractSqlServerExtensionExecutor
  • AbstractSqlServerExtensionDataset

Die dritte Klasse ist eine Hilfsklasse, die eine Implementierung eines Datasetobjekts enthält. Es handelt sich um eine optionale Klasse, die Sie verwenden können, um sich den Einstieg zu erleichtern. Sie können stattdessen auch eine eigene Implementierung einer solchen Klasse verwenden.

  • PrimitiveDataset

Im folgenden Abschnitt finden Sie Beschreibungen der einzelnen Klassen im SDK. Der Quellcode der SDK-Klassen ist im GitHub-Repository für SQL Server-Spracherweiterungen verfügbar.

Klasse: AbstractSqlServerExtensionExecutor

Die abstrakte Klasse AbstractSqlServerExtensionExecutor enthält die Schnittstelle, die von der Java-Spracherweiterung für SQL Server zum Ausführen von Java-Code verwendet wird.

Ihre Java-Hauptklasse muss von dieser Klasse erben. Dies bedeutet, dass die Klasse bestimmte Methoden enthält, die Sie in Ihrer eigenen Klasse implementieren müssen.

Damit Ihre Klasse von dieser abstrakten Klasse erben kann, erweitern Sie Ihre Klasse in der Klassendeklaration um den Namen der abstrakten Klasse:

public class <MyClass> extends AbstractSqlServerExtensionExecutor {}

Ihre Hauptklasse muss mindestens die Methode „execute(...)“ implementieren.

execute-Methode

Die execute-Methode ist die Methode, die von SQL Server über die Java-Spracherweiterung aufgerufen wird, um Java-Code aus SQL Server aufzurufen. Es handelt sich um eine Schlüsselmethode, in der Sie die Hauptvorgänge einschließen, die Sie aus SQL Server ausführen möchten.

Zum Übergeben von Methodenargumenten von SQL Server an Java verwenden Sie den @param-Parameter in sp_execute_external_script. Die Methode execute akzeptiert ihre Argumente auf diese Weise.

public AbstractSqlServerExtensionDataset execute(AbstractSqlServerExtensionDataset input, LinkedHashMap<String, Object> params)  {}

init-Methode

Die init-Methode wird nach dem Konstruktor und vor der execute-Methode ausgeführt. Alle Vorgänge, die vor execute(...) ausgeführt werden müssen, können in dieser Methode ausgeführt werden.

public void init(String sessionId, int taskId, int numtask) {}

Klasse: AbstractSqlServerExtensionDataset

Die abstrakte Klasse AbstractSqlServerExtensionDataset enthält die Schnittstelle für die Verarbeitung von Eingabe- und Ausgabedaten, die von der Java-Erweiterung verwendet wird.

Klasse: PrimitiveDataset

Die Klasse PrimitiveDataset ist eine Implementierung der Klasse AbstractSqlServerExtensionDataset, die einfache Typen als primitive Arrays speichert.

PrimitiveDataset wird im SDK als optionale Hilfsklasse bereitgestellt. Wenn Sie diese Klasse nicht verwenden, müssen Sie selbst eine Klasse implementieren, die von AbstractSqlServerExtensionDataset erbt.