クエリ結果について
クエリ結果は、ネスト化されたオブジェクトとして返されます。SOQL クエリのメイン SELECT ステートメントで処理される主なオブジェクトは、サブクエリのクエリ結果を含みます。
たとえば、次のように親-子または子-親構文のいずれかを使用して、クエリを作成できます。
- 子-親:
1SELECT Id, FirstName, LastName, AccountId, Account.Name 2FROM Contact 3WHERE Account.Name LIKE 'Acme%'このクエリは、WHERE 句の条件を満たすすべての取引先責任者に関して、(返されるレコードが多すぎない場合) 1 行ごとに 1 つのクエリ結果を返します。
- 親-子:
1SELECT Id, Name, 2 ( 3 SELECT Id, FirstName, LastName 4 FROM Contacts 5 ) 6FROM Account 7 WHERE Name like 'Acme%'このクエリは、取引先のセットを返します。そして、各取引先内では、サブクエリからの取引先責任者情報を含む Contact 項目のクエリ結果セットを返します。
次のサンプルは、サブクエリ結果を処理する方法を示しています。
1private void querySample() {
2 QueryResult qr = null;
3 try {
4 qr = connection.query("SELECT a.Id, a.Name, " +
5 "(SELECT c.Id, c.FirstName, " +
6 "c.LastName FROM a.Contacts c) FROM Account a");
7 boolean done = false;
8 if (qr.getSize() > 0) {
9 while (!done) {
10 for (int i = 0; i < qr.getRecords().length; i++) {
11 Account acct = (Account) qr.getRecords()[i];
12 String name = acct.getName();
13 System.out.println("Account " + (i + 1) + ": " + name);
14 printContacts(acct.getContacts());
15 }
16 if (qr.isDone()) {
17 done = true;
18 } else {
19 qr = connection.queryMore(qr.getQueryLocator());
20 }
21 }
22 } else {
23 System.out.println("No records found.");
24 }
25 System.out.println("\nQuery succesfully executed.");
26 } catch (ConnectionException ce) {
27 System.out.println("\nFailed to execute query successfully, error message " +
28 "was: \n" + ce.getMessage());
29 }
30}
31
32private void printContacts(QueryResult qr) throws ConnectionException {
33 boolean done = false;
34 if (qr.getSize() > 0) {
35 while (!done) {
36 for (int i = 0; i < qr.getRecords().length; i++) {
37 Contact contact = (Contact) qr.getRecords()[i];
38 String fName = contact.getFirstName();
39 String lName = contact.getLastName();
40 System.out.println("Child contact " + (i + 1) + ": " + lName
41 + ", " + fName);
42 }
43 if (qr.isDone()) {
44 done = true;
45 } else {
46 qr = connection.queryMore(qr.getQueryLocator());
47 }
48 }
49 } else {
50 System.out.println("No child contacts found.");
51 }
52}