Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 编程 » 数据库中的 Java

 

调用 Java 类中的方法

若要访问该类中的 Java 方法,则必须创建存储过程或函数来充当该类中方法的包装。

 ♦ 使用 Interactive SQL 调用 Java 方法
  1. 创建下面的 SQL 存储过程来调用示例类中的 Invoice.main 方法:

    CREATE PROCEDURE InvoiceMain( IN arg1 CHAR(50) )
    EXTERNAL NAME 'Invoice.main([Ljava/lang/String;)V'
    LANGUAGE JAVA;

    此存储过程将充当该 Java 方法的包装。

  2. 调用存储过程以调用 Java 方法:

    CALL InvoiceMain('to you');

    如果查看数据库服务器消息日志,您会看见那里写有 "Hello to you" 消息。数据库服务器已将输出从 System.out 重定向到那里。

以下列举了更多有关如何调用 Java 方法、传递参数和返回值的示例。

 ♦ 为 Invoice 类中的方法创建存储过程/函数
  1. 创建下面的 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
    [ 数组的每个维度都使用一个。
  2. 调用充当包装的存储过程以调用 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
 另请参见