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. サンプルクラスの 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 から出力データがリダイレクトされています。

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;
    
    -- 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 データ型
    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 つ使用
  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
 参照