ダイナミック・クエリの実行 : openByQuery
Database インタフェースは、ダイナミック・クエリを実行する openByQuery メソッドを提供します。Java クライアントは、SQL を含む文字列を、入力パラメータの配列と一緒に openByQuery に渡します。このメソッドは、クエリ結果を表すオブジェクトを含む java.util.Iterator オブジェクトを返します。これにより、結果セットではなく標準オブジェクトを使用して、クエリ結果を処理できます。メソッドに渡す SQL 文字列に関して、以下の規則があります。
-
最初に返す列には、テーブルの %ID 列の完全修飾名を含めます (例えば、JavaTutorial.PhoneNumber.%ID)。
-
ORDER BY 節では、順序を指定する数値ではなく、列名を使用する必要があります。
以下の Java クライアント・メソッドは、openByQuery を使用して、特定の Contact に属し、かつ PhoneNumberType に対する値が type である、PhoneNumber オブジェクトすべてを検索するクエリを実行します。このメソッドは、返された一連の PhoneNumber オブジェクトを繰り返し処理して、各オブジェクトの PhoneNumberType と Number の値を表示します。
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());
}
}
}