クエリ API は複数のコール スタイルをサポートしています。JDOQL 文字列の構文を使用すれば、文字列の中に完全なクエリを記述することができます。また、クエリ オブジェクトのメソッドをコールし、クエリの一部またはすべてを指定できます。
メソッド スタイルのコールを使用したクエリの簡単な例を紹介します。この例では、フィルタで使用される値に対してパラメータの置き換えを行い、フィルタを 1 つ、並び替え順序を 1 つ指定します。クエリ オブジェクトの execute() メソッドは、クエリにおいて代用される値と共に宣言順にコールされます。
import java.util.List;
import javax.jdo.Query;
// ...
Query query = pm.newQuery(Employee.class);
query.setFilter("lastName == lastNameParam");
query.setOrdering("hireDate desc");
query.declareParameters("String lastNameParam");
try {
List<Employee> results = (List<Employee>) query.execute("Smith");
if (results.iterator().hasNext()) {
for (Employee e : results) {
// ...
}
} else {
// ... no results ...
}
} finally {
query.closeAll();
}
文字列構文を使用した同一のクエリを示します。
Query query = pm.newQuery("select from Employee " +
"where lastName == lastNameParam " +
"order by hireDate desc " +
"parameters String lastNameParam")
List<Employee> results = (List<Employee>) query.execute("Smith");
クエリの定義ではこれらのスタイルを混在させることができます。次に例を示します。
Query query = pm.newQuery(Employee.class,
"lastName == lastNameParam order by hireDate desc");
query.declareParameters("String lastNameParam");
List<Employee> results = (List<Employee>) query.execute("Smith");
execute() メソッドを複数回コールすることで、単一のクエリ インスタンスのパラメータに対して異なる値を代用して再利用できます。各コールはクエリを実行し、結果をコレクションとして返します。
JDOQL 字列構文は、文字列の中のリテラル値を文字列値または数値としてサポートしています。文字列をシングル クォート(')またはダブルクォート(")のいずれかで囲みます。すべての値型はパラメータ代用を使用しなければなりません。文字列のリテラル値を使用した例を次に示します。
Query query = pm.newQuery(Employee.class, "lastName == 'Smith' order by hireDate desc");
0 件のコメント:
コメントを投稿