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 メソッドから返される結果セット

この項では、Java メソッドから結果セットを得られるようにする方法について説明します。呼び出しを行う環境に結果セットを返す Java メソッドを書き、LANGUAGE JAVA の EXTERNAL NAME であると宣言された SQL ストアド・プロシージャにこのメソッドをラップします。

♦  Java メソッドから結果セットを返すには、次の手順に従います。
  1. パブリック・クラスで、Java メソッドが public と static として宣言されていることを確認します。

  2. メソッドが返すと思われる各結果セットについて、そのメソッドが java.sql.ResultSet[] 型のパラメータを持っていることを確認します。これらの結果セット・パラメータは、必ずパラメータ・リストの最後になります。

  3. このメソッドでは、まず java.sql.ResultSet のインスタンスを作成して、それを ResultSet[] パラメータの 1 つに割り当てます。

  4. EXTERNAL NAME LANGUAGE JAVA 型の SQL ストアド・プロシージャを作成します。この型のプロシージャは、Java メソッドのラッパです。結果セットを返す他のプロシージャと同じ方法で、SQL プロシージャの結果セット上でカーソルを使用することができます。

    Java メソッドのラッパであるストアド・プロシージャの構文の詳細については、CREATE PROCEDURE 文 [Web サービス]を参照してください。

次に示す簡単なクラスには 1 つのメソッドがあり、そのメソッドはクエリを実行して、呼び出しを行った環境に結果セットを返します。

import java.sql.*;

public class MyResultSet 
{
  public static void return_rset( ResultSet[] rset1 )
       throws SQLException 
  {
    Connection conn = DriverManager.getConnection(
                       "jdbc:default:connection" );
    Statement stmt = conn.createStatement();
    ResultSet rset =
      stmt.executeQuery (
                       "SELECT Surname " +
                       "FROM Customers" );
    rset1[0] = rset;
  }
}

結果セットを公開するには、そのプロシージャから返された結果セットの数と Java メソッドのシグニチャを指定する CREATE PROCEDURE 文を使用します。

結果セットを指定する CREATE PROCEDURE 文は、次のように定義します。

CREATE PROCEDURE result_set()
  DYNAMIC RESULT SETS 1
  EXTERNAL NAME
     'MyResultSet.return_rset([Ljava/sql/ResultSet;)V'
  LANGUAGE JAVA

結果セットを返す SQL Anywhere プロシージャでカーソルを開くのと同じように、このプロシージャ上でカーソルを開くことができます。

文字列 ([Ljava/sql/ResultSet;)V は Java メソッドのシグニチャで、パラメータと戻り値の数や型を簡潔に文字で表現したものです。

Java メソッドのシグニチャの詳細については、CREATE PROCEDURE 文 [Web サービス]を参照してください。

返される結果セットの詳細については、結果セットを返すを参照してください。