Delen via


Microsoft Extensibility SDK voor Java voor SQL Server

Van toepassing op: SQL Server 2019 (15.x) en latere versies

Meer informatie over het implementeren van een Java-programma voor SQL Server met behulp van de Microsoft Extensibility SDK voor Java. De SDK is een interface voor de Java-taalextensie die wordt gebruikt om gegevens uit te wisselen met SQL Server en Java-code uit te voeren vanuit SQL Server.

De SDK wordt geïnstalleerd als onderdeel van SQL Server 2019 (15.x) en nieuwere versies, op zowel Windows als Linux:

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

De code is open source en vindt u in de GitHub-opslagplaats voor SQL Server Language Extensions.

Implementatievereisten

De SDK-interface definieert een set vereisten waaraan moet worden voldaan voor SQL Server om te communiceren met de Java-runtime. Als u de SDK wilt gebruiken, moet u enkele implementatieregels in uw hoofdklasse volgen. SQL Server kan vervolgens een specifieke methode uitvoeren in de Java-klasse en gegevens uitwisselen met behulp van de Java-taalextensie.

Zie Zelfstudie: Zoeken naar een tekenreeks met reguliere expressies (regex) in Java voor een voorbeeld van hoe u de SDK kunt gebruiken.

SDK-klassen

De SDK bestaat uit drie klassen.

Twee abstracte klassen die de interface definiëren die de Java-extensie gebruikt om gegevens uit te wisselen met SQL Server:

  • AbstractSqlServerExtensionExecutor
  • AbstractSqlServerExtensionDataset

De derde klasse is een helperklasse die een implementatie van een gegevenssetobject bevat. Het is een optionele klasse die u kunt gebruiken, waardoor u gemakkelijker aan de slag kunt gaan. U kunt ook uw eigen implementatie van een dergelijke klasse gebruiken.

  • PrimitiveDataset

In de volgende sectie vindt u beschrijvingen van elke klasse in de SDK. De broncode van de SDK-klassen is beschikbaar in de GitHub-opslagplaats voor SQL Server Language Extensions.

Klasse: AbstractSqlServerExtensionExecutor

De abstracte klasse AbstractSqlServerExtensionExecutor bevat de interface die wordt gebruikt voor het uitvoeren van Java-code door de Java-taalextensie voor SQL Server.

Uw belangrijkste Java-klasse moet overnemen van deze klasse. Overnemen van deze klasse betekent dat er bepaalde methoden in de klasse zijn die u in uw eigen klasse moet implementeren.

Als u wilt overnemen van deze abstracte klasse, gaat u verder met de abstracte klassenaam in de klassedeclaratie:

public class <MyClass> extends AbstractSqlServerExtensionExecutor {}

Uw hoofdklasse moet minimaal de methode execute(...) implementeren.

Methode uitvoeren

De methode execute is de methode die wordt aangeroepen vanuit SQL Server via de Java-taalextensie om Java-code aan te roepen vanuit SQL Server. Het is een sleutelmethode waarin u de belangrijkste bewerkingen opneemt die u wilt uitvoeren vanuit SQL Server.

Als u methodeargumenten wilt doorgeven aan Java vanuit SQL Server, gebruikt u de @param parameter in sp_execute_external_script. De methode execute gebruikt de argumenten op die manier.

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

Methode init

De init-methode wordt uitgevoerd na de constructor-methode en vóór de execute-methode. Operationes die moeten worden uitgevoerd voordat execute(...) kan worden gebruikt, kunnen in deze methode worden uitgevoerd.

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

Klasse: AbstractSqlServerExtensionDataset

De abstracte klasse AbstractSqlServerExtensionDataset bevat de interface voor het verwerken van invoer- en uitvoergegevens die worden gebruikt door de Java-extensie.

Klasse: PrimitiveDataset

De klasse PrimitiveDataset is een implementatie van AbstractSqlServerExtensionDataset die eenvoudige typen opslaat als primitieve matrices.

PrimitiveDataset wordt geleverd in de SDK als een optionele helperklasse. Als u deze klasse niet gebruikt, moet u uw eigen klasse implementeren die wordt overgenomen van AbstractSqlServerExtensionDataset.