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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » データベースにおける Java » SQL Anywhere での Java サポート

 

Java オブジェクトのフィールドとメソッドへのアクセス

Java メソッドを呼び出して、引数を渡し、値を返す方法の例をさらに示します。

♦  Invoice クラスのメソッドのストアド・プロシージャまたは関数を作成するには、次の手順に従います。
  1. Invoice クラスの Java メソッドに引数を渡して、戻り値を取得する次の SQL ストアド・プロシージャを作成します。

    -- 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; 
    -- Invoice.rateOfTaxation take no arguments ()
    -- and returns a double (D)
    CREATE FUNCTION rateOfTaxation() 
    RETURNS DOUBLE 
    EXTERNAL NAME 
      'Invoice.rateOfTaxation()D' 
    LANGUAGE JAVA; 
    -- Invoice.rateOfTaxation take no arguments ()
    -- and returns a double (D)
    CREATE FUNCTION totalSum() 
    RETURNS DOUBLE 
    EXTERNAL NAME 
      'Invoice.totalSum()D' 
    LANGUAGE JAVA; 
    -- Invoice.getLineItem1Description take no arguments ()
    -- and returns a string (Ljava/lang/String;)
    CREATE FUNCTION getLineItem1Description() 
    RETURNS CHAR(50) 
    EXTERNAL NAME
      'Invoice.getLineItem1Description()Ljava/lang/String;' 
    LANGUAGE JAVA; 
    -- Invoice.getLineItem1Cost take no arguments ()
    -- and returns a double (D)
    CREATE FUNCTION getLineItem1Cost() 
    RETURNS DOUBLE 
    EXTERNAL NAME 
      'Invoice.getLineItem1Cost()D' 
    LANGUAGE JAVA; 
    -- Invoice.getLineItem2Description take no arguments ()
    -- and returns a string (Ljava/lang/String;)
    CREATE FUNCTION getLineItem2Description() 
    RETURNS CHAR(50) 
    EXTERNAL NAME
      'Invoice.getLineItem2Description()Ljava/lang/String;' 
    LANGUAGE JAVA; 
    -- Invoice.getLineItem2Cost take no arguments ()
    -- and returns a double (D)
    CREATE FUNCTION getLineItem2Cost() 
    RETURNS DOUBLE 
    EXTERNAL NAME 
      'Invoice.getLineItem2Cost()D' 
    LANGUAGE 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
    [ 配列の各次元ごとに 1 つ使用

    これらの文の構文の詳細については、CREATE PROCEDURE 文 [Web サービス]CREATE FUNCTION 文 [Web サービス]を参照してください。

  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