2010-04-29 55 views
1

我有以下代碼完美運行。它根據單個參數篩選記錄。過濾應用程序引擎中的記錄(Java)

public List<Orders> GetOrders(String email) 
    { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    Query query = pm.newQuery(Orders.class); 
     query.setFilter("Email == pEmail"); 
     query.setOrdering("Id desc"); 
     query.declareParameters("String pEmail"); 
     query.setRange(0,50);  
    return (List<Orders>) query.execute(email); 
    } 

現在我想過濾多個參數。 sdate和edate是開始日期和結束日期。 在數據存儲中,它被保存爲日期(不是字符串)。

public List<Orders> GetOrders(String email,String icode,String sdate, String edate) 
    { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    Query query = pm.newQuery(Orders.class); 
     query.setFilter("Email == pEmail"); 
     query.setFilter("ItemCode == pItemCode"); 
     query.declareParameters("String pEmail"); 
     query.declareParameters("String pItemCode"); 
       .....//Set filter and declare other 2 parameters 
       .....// 
       ...... 
     query.setRange(0,50);  
     query.setOrdering("Id desc"); 
    return (List<Orders>) query.execute(email,icode,sdate,edate); 
    } 

任何線索?


我的第一個問題就解決了。但是,仍然有一些問題

1:如何我可以通過日期參數過濾器(如獲得在JSP中的字符串)?

2:query.execute()方法最多支持3個參數。是否有可能通過更多?

回答

2

您不能使用多個使用setfilter()設置多個條件。你必須按如下

Query.declareParameters("String pEmail, String pItemCode"); 
+0

是它的工作原理..謝謝.. 怎麼樣用一個單一的,如果類似情況,所以這將是

query.setFilter("Email == pEmail && ItemCode == pItemCode"); 

同樣用逗號separeted列表declareParameters日期參數?以及如果我需要傳遞3個以上的參數呢?它最多隻支持3個參數。 – Manjoor 2010-05-01 14:12:33

+0

如果需要超過3個參數,你可以使用query.executeWithMap API和傳遞鍵/值的散列地圖爲您的參數。例如map.put(「param_name_1」,param_1_value); – 2011-12-06 14:35:09

相關問題