若要访问该类中的 Java 方法,则必须创建存储过程或函数来充当该类中方法的包装。
创建下面的 SQL 存储过程来调用示例类中的 Invoice.main 方法:
CREATE PROCEDURE InvoiceMain( IN arg1 CHAR(50) ) EXTERNAL NAME 'Invoice.main([Ljava/lang/String;)V' LANGUAGE JAVA; |
此存储过程将充当该 Java 方法的包装。
调用存储过程以调用 Java 方法:
CALL InvoiceMain('to you'); |
如果查看数据库服务器消息日志,您会看见那里写有 "Hello to you" 消息。数据库服务器已将输出从 System.out 重定向到那里。
以下列举了更多有关如何调用 Java 方法、传递参数和返回值的示例。
创建下面的 SQL 存储过程以将参数传递给 Invoice 类中的 Java 方法并从中检索返回值:
-- Invoice.init takes a string argument (Ljava/lang/String;) -- a double (D), a string argument (Ljava/lang/String;), and -- another double (D), and returns nothing (V) 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; -- The Java methods below take no arguments and return a double (D) -- or a string (Ljava/lang/String;) 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; |
传递给 Java 方法的参数以及从 Java 方法检索的返回值的描述符具有以下含义:
字段类型 | Java 数据类型 |
---|---|
B | byte |
C | char |
D | double |
F | float |
I | int |
J | long |
L class-name; | 类 class-name 的实例。类名必须是完全限定的,而且名称中的任何点都必须替换为 /。例如,java/lang/String。 |
S | short |
V | void |
Z | Boolean |
[ | 数组的每个维度都使用一个。 |
调用充当包装的存储过程以调用 Java 方法:
CALL init('Shirt',10.00,'Jacket',25.00); SELECT getLineItem1Description() as Item1, getLineItem1Cost() as Item1Cost, getLineItem2Description() as Item2, getLineItem2Cost() as Item2Cost, rateOfTaxation() as TaxRate, totalSum() as Cost; |
该查询将返回含有以下值的 6 个列:
Item1 | Item1Cost | Item2 | Item2Cost | TaxRate | Cost |
---|---|---|---|---|---|
Shirt | 10 | Jacket | 25 | 0.15 | 40.25 |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |