文件首頁
MySQL NDB Cluster API 開發人員指南
相關文件 下載本手冊
PDF (美式信紙) - 3.6Mb
PDF (A4) - 3.6Mb


4.3.1.17 查詢

Query 執行個體代表具有繫結參數的特定查詢。該執行個體由方法 com.mysql.clusterj.Session.<T>createQuery(com.mysql.clusterj.query.QueryDefinition<T>) 建立。

4.3.1.17.1 概要
 public interface Query<E> {
// Public Static Fields  public static final String INDEX_USED = "IndexUsed";
  public static final String SCAN_TYPE = "ScanType";
  public static final String SCAN_TYPE_INDEX_SCAN = "INDEX_SCAN";
  public static final String SCAN_TYPE_PRIMARY_KEY = "PRIMARY_KEY";
  public static final String SCAN_TYPE_TABLE_SCAN = "TABLE_SCAN";
  public static final String SCAN_TYPE_UNIQUE_KEY = "UNIQUE_KEY";
// Public Methods  public abstract int deletePersistentAll();
  public abstract Results<E> execute(Object parameter);
  public abstract Results<E> execute(Object[] parameters);
  public abstract Results<E> execute(Map<String, ?> parameters);
  public abstract Map<String, Object> explain();
  public abstract List<E> getResultList();
  public abstract void setLimits(long skip,
                                 long limit);

  public abstract void setOrdering(Ordering ordering,
                                   String[] orderingFields);

  public abstract void setParameter(String parameterName,
                                    Object value);

}
4.3.1.17.2 INDEX_USED
public static final String INDEX_USED = "IndexUsed";

查詢說明索引使用金鑰

4.3.1.17.3 SCAN_TYPE
public static final String SCAN_TYPE = "ScanType";

查詢說明掃描類型金鑰

4.3.1.17.4 SCAN_TYPE_INDEX_SCAN
public static final String SCAN_TYPE_INDEX_SCAN = "INDEX_SCAN";

索引掃描的查詢說明掃描類型值

4.3.1.17.5 SCAN_TYPE_PRIMARY_KEY
public static final String SCAN_TYPE_PRIMARY_KEY = "PRIMARY_KEY";

主鍵的查詢說明掃描類型值

4.3.1.17.6 SCAN_TYPE_TABLE_SCAN
public static final String SCAN_TYPE_TABLE_SCAN = "TABLE_SCAN";

資料表掃描的查詢說明掃描類型值

4.3.1.17.7 SCAN_TYPE_UNIQUE_KEY
public static final String SCAN_TYPE_UNIQUE_KEY = "UNIQUE_KEY";

唯一索引鍵的查詢說明掃描類型值

4.3.1.17.8 deletePersistentAll()
public abstract int deletePersistentAll();

刪除符合查詢條件的執行個體。

表格 4.35 deletePersistentAll()

參數 描述
return 刪除的執行個體數

4.3.1.17.9 execute(Map<String, ?>)
public abstract Results<E> execute(Map<String, ?> parameters);

使用一個或多個具名參數執行查詢。參數會依名稱解析。

表格 4.36 execute(Map<String, ?>)

參數 描述
parameters 參數
return the result

4.3.1.17.10 execute(Object...)
public abstract Results<E> execute(Object[] parameters);

使用一個或多個參數執行查詢。參數會依其在查詢中宣告的順序解析。

表格 4.37 execute(Object...)

參數 描述
parameters 參數
return the result

4.3.1.17.11 execute(Object)
public abstract Results<E> execute(Object parameter);

使用正好一個參數執行查詢。

表格 4.38 execute(Object)

參數 描述
parameter 參數
return the result

4.3.1.17.12 explain()
public abstract Map<String, Object> explain();

說明將如何或已如何執行此查詢。如果在繫結所有參數之前呼叫,則會擲回 ClusterJUserException。傳回一個 key:value 配對的對應,說明將如何或已如何執行查詢。可以透過呼叫值的 toString 來取得詳細資料。傳回下列索引鍵

  • ScanType:掃描的類型,值為

    • PRIMARY_KEY:查詢使用主鍵進行索引鍵查閱

    • UNIQUE_KEY:查詢使用唯一索引鍵進行索引鍵查閱

    • INDEX_SCAN:查詢使用非唯一索引鍵進行範圍掃描

    • TABLE_SCAN:查詢使用資料表掃描

  • IndexUsed:所使用索引的名稱 (如果有的話)

表格 4.39 explain()

參數 描述
return 關於此查詢執行的資料

例外狀況

ClusterJUserException

如果不是所有參數都已繫結

4.3.1.17.13 getResultList()
public abstract List<E> getResultList();

以清單形式取得結果。

表格 4.40 getResultList()

參數 描述
return the result

例外狀況

ClusterJUserException

如果不是所有參數都已繫結

ClusterJDatastoreException

如果資料儲存區報告例外狀況

4.3.1.17.14 setLimits(long, long)
public abstract void setLimits(long skip,
                               long limit);

設定要傳回的結果限制。修改查詢的執行,只傳回結果的子集。如果篩選器通常會傳回 100 個執行個體,skip 設定為 50,而 limit 設定為 40,則會跳過原本會傳回的前 50 個結果,傳回接下來的 40 個結果,並忽略其餘的 10 個結果。

參數 skip 必須大於或等於 0 (請參閱下方的例外狀況),而 limit 必須大於或等於 0。

當與 deletePersistentAll 搭配使用時,skip 必須為 0,而且應該以反覆方式刪除執行個體,直到刪除的執行個體計數小於批次大小。例如

/* Delete in batches */ 
query.setLimits(0, DeleteBatchSize);
int result = 0;
do { result = query.deletePersistentAll();
 System.out.println("Batch result: " + result);
 } while(result == DeleteBatchSize);

表格 4.41 setLimits(long, long)

參數 描述
skip 要跳過的結果數
limit 跳過之後要傳回的結果數;使用 Long.MAX_VALUE 表示不限制。

4.3.1.17.15 setOrdering(Query.Ordering, String...)
public abstract void setOrdering(Ordering ordering,
                                 String[] orderingFields);

設定此查詢結果的排序。修改查詢的執行,以使用先前定義的索引。

  • 必須針對對應至排序欄位的資料行定義索引,順序與排序欄位相同。

  • 相較於索引,排序欄位中不得有間隔。

  • 所有排序欄位都必須在索引中,但索引中的並非所有欄位都需要在排序欄位中。

  • 如果在排序中欄位上篩選器中使用「in」述詞,則只能與第一個欄位搭配使用。

  • 如果違反其中任何一個條件,則在執行查詢時會擲回 ClusterJUserException。

如果使用 "in" 述詞,參數中的每個元素都會定義一個獨立的範圍,並且在該範圍內執行排序。根據篩選條件可能會存在更好(更有效率)的索引,但是指定排序將會強制查詢使用包含排序欄位的索引。

表格 4.42 setOrdering(Query.Ordering, String...)

參數 描述
ordering 可以是 Ordering.ASCENDING 或 Ordering.DESCENDING
orderingFields 要排序的欄位

4.3.1.17.16 setParameter(String, Object)
public abstract void setParameter(String parameterName,
                                  Object value);

設定參數的值。如果針對同一個參數多次呼叫,將會靜默地取代該值。

表格 4.43 setParameter(String, Object)

參數 描述
parameterName 參數的名稱
value 參數的值