Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ダイナミック・クエリの実行 : openByQuery

Database インタフェースは、ダイナミック・クエリを実行する openByQuery メソッドを提供します。Java クライアントは、SQL を含む文字列を、入力パラメータの配列と一緒に openByQuery に渡します。このメソッドは、クエリ結果を表すオブジェクトを含む java.util.Iterator オブジェクトを返します。これにより、結果セットではなく標準オブジェクトを使用して、クエリ結果を処理できます。メソッドに渡す SQL 文字列に関して、以下の規則があります。

  • 最初に返す列には、テーブルの %ID 列の完全修飾名を含めます (例えば、JavaTutorial.PhoneNumber.%ID)。

  • ORDER BY 節では、順序を指定する数値ではなく、列名を使用する必要があります。

以下の Java クライアント・メソッドは、openByQuery を使用して、特定の Contact に属し、かつ PhoneNumberType に対する値が type である、PhoneNumber オブジェクトすべてを検索するクエリを実行します。このメソッドは、返された一連の PhoneNumber オブジェクトを繰り返し処理して、各オブジェクトの PhoneNumberTypeNumber の値を表示します。


public class BindingExamples {
   public static void displayPhoneNumbersByTypeOBQ(Database db, String id, 
   String type) throws CacheException{
      Object[] args = {id, type};
      String sql = "SELECT JavaTutorial.PhoneNumber.%ID FROM " +
      "JavaTutorial.PhoneNumber WHERE Contact = ? AND PhoneNumberType = ?";
      Iterator iter = db.openByQuery(sql, args);
      while (iter.hasNext()){
         PhoneNumber pn = (PhoneNumber)iter.next();
         System.out.println("Type: " + pn.getPhoneNumberType() +
         " Number: " + pn.getNumber());
      }
   }
}
FeedbackOpens in a new tab