Für den Zugriff auf die Java-Methoden in der Klasse müssen Sie gespeicherte Prozeduren oder Funktionen erstellen, die als Wrapper für die Methoden in der Klasse fungieren.
Voraussetzungen
Schließen Sie die Schritte in Lektion 1, 2 und 3 ab, bevor Sie Lektion 4 versuchen.
In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Java in der Datenbank verwenden.
Kontext und Bemerkungen
Die Java-Klassendatei, die die kompilierten Methoden aus dem Invoice-Beispiel enthält, wurde in die Datenbank geladen.
Erstellen Sie die folgende gespeicherte SQL-Prozedur, um die Methode Invoice.main in der Beispielklasse aufzurufen:
CREATE PROCEDURE InvoiceMain( IN arg1 CHAR(50) ) EXTERNAL NAME 'Invoice.main([Ljava/lang/String;)V' LANGUAGE JAVA; |
Diese gespeicherte Prozedur agiert als Wrapper für die Java-Methode.
Führen Sie die gespeicherte Prozedur aus, um die Java-Methode aufzurufen:
CALL InvoiceMain('to you'); |
In der Datenbankserver-Konsole bzw. im Fenster "Datenbankservermeldungen" wird die Meldung "Hello to you" angezeigt. Der Datenbankserver hat die Ausgabe von System.out dorthin umgeleitet
Die folgenden gespeicherten Prozeduren veranschaulichen, wie Argumente an die Java-Methoden in der Invoice-Klasse übergeben
und Rückgabewerte daraus abgerufen werden: Wenn Sie den Java-Quellcode überprüfen, sehen Sie, dass die init
-Methode der Invoice-Klasse sowohl STRING-Argumente als auch DOUBLE-Argumente annimmt. STRING-Argumente werden mit Ljava/lang/String;
angegeben. DOUBLE-Argumente werden mit D
angegeben. Die Methode gibt "void" zurück und dies wird mit V
nach der rechten Klammer angegeben.
CREATE PROCEDURE init( IN arg1 CHAR(50), IN arg2 DOUBLE, IN arg3 CHAR(50), IN arg4 DOUBLE) EXTERNAL NAME 'Invoice.init(Ljava/lang/String;DLjava/lang/String;D)V' LANGUAGE JAVA; |
Die folgenden Funktionen rufen Java-Methoden auf, die keine Argumente übernehmen und einen DOUBLE-Wert (D
) oder einen STRING-Wert (Ljava/lang/String;
) zurückgeben.
CREATE FUNCTION rateOfTaxation() RETURNS DOUBLE EXTERNAL NAME 'Invoice.rateOfTaxation()D' LANGUAGE JAVA; CREATE FUNCTION totalSum() RETURNS DOUBLE EXTERNAL NAME 'Invoice.totalSum()D' LANGUAGE JAVA; CREATE FUNCTION getLineItem1Description() RETURNS CHAR(50) EXTERNAL NAME 'Invoice.getLineItem1Description()Ljava/lang/String;' LANGUAGE JAVA; CREATE FUNCTION getLineItem1Cost() RETURNS DOUBLE EXTERNAL NAME 'Invoice.getLineItem1Cost()D' LANGUAGE JAVA; CREATE FUNCTION getLineItem2Description() RETURNS CHAR(50) EXTERNAL NAME 'Invoice.getLineItem2Description()Ljava/lang/String;' LANGUAGE JAVA; CREATE FUNCTION getLineItem2Cost() RETURNS DOUBLE EXTERNAL NAME 'Invoice.getLineItem2Cost()D' LANGUAGE JAVA; |
Das folgende Beispiel veranschaulicht einen einfachen Aufruf an die gespeicherte Prozedur, die als Wrapper für die init
-Methode der Invoice-Klasse fungiert:
CALL init('Shirt',10.00,'Jacket',25.00); |
Die folgende SELECT-Anweisung ruft mehrere andere Methoden in der Invoice-Klasse auf:
SELECT getLineItem1Description() as Item1, getLineItem1Cost() as Item1Cost, getLineItem2Description() as Item2, getLineItem2Cost() as Item2Cost, rateOfTaxation() as TaxRate, totalSum() as Cost; |
Die SELECT-Anweisung gibt sechs Spalten zurück.
Item1 | Item1Cost | Item2 | Item2Cost | TaxRate | Cost |
---|---|---|---|---|---|
Shirt | 10 | Jacket | 25 | 0.15 | 40.25 |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |