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. サンプルクラスの Invoice.main メソッドを呼び出す次の SQL ストアドプロシージャを作成します。

    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 メソッドは文字列引数と double 引数の両方を取ることがわかります。文字列引数は Ljava/lang/String; を使用して指定されます。double 引数は 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 メソッドを呼び出し、double (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 文が 6 つのカラムを返す場合。

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

結果

Java クラスのメソッドのラッパーとして動作するストアドプロシージャまたは関数が作成されました。これらのレッスンでは、Java メソッドの作成および SQL からの呼び出しに関する手順を示しました。

 参照