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

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » 数据库中的 Java » 教程:使用数据库中的 Java

 

第 4 课:调用 Java 类中的方法

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

前提条件

在试图开始第 4 课之前需完成第 1 课、第 2 课和第 3 课中的步骤。

本课假定您拥有在教程教程:使用数据库中的 Java开头的特权部分中列出的角色和特权。

上下文和注释

数据库中已装载来自 Invoice 示例的包含已编译方法的 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 重定向到那里。

  3. 以下存储过程说明如何将参数传递给 Invoice 类中的 Java 方法并从中检索返回值。如果检查 Java 源代码,则会看出 Invoice 类的 init 方法同时采用字符串参数和双精度参数。使用 Ljava/lang/String; 指定字符串参数。使用 D 指定双精度参数。该方法将返回 void,可使用右圆括号后面的 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;
  4. 以下函数将调用不获取任何参数的 Java 方法,并返回双精度参数 (D) 或字符串 (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;
  5. 以下内容说明对存储过程的示例调用,该过程充当 Invoice 类的 init 方法的包装:

    CALL init('Shirt',10.00,'Jacket',25.00);
  6. 以下 SELECT 语句调用 Invoice 类中的多个其它方法:

    SELECT getLineItem1Description() as Item1, 
           getLineItem1Cost() as Item1Cost,
           getLineItem2Description() as Item2, 
           getLineItem2Cost() as Item2Cost,
           rateOfTaxation() as TaxRate, 
           totalSum() as Cost;

    SELECT 语句返回六个列。

    Item1 Item1Cost Item2 Item2Cost TaxRate Cost
    Shirt 10 Jacket 25 0.15 40.25

结果

您已创建存储过程或函数来充当 Java 类中方法的包装。这些课程已指导您完成编写 Java 方法并从 SQL 中调用它们时所涉及的步骤。

 另请参见