在app-engine中过滤记录(Java)

时间:2010-04-29 06:40:06

标签: java google-app-engine google-cloud-datastore

我有以下代码运行完美。它根据单个参数过滤记录。

 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:我如何按Date参数过滤(在jsp中获取字符串)?

2:query.execute()方法最多支持3个参数。是否可以通过更多?

1 个答案:

答案 0 :(得分:2)

您不能使用多个SetFilter()来设置多个条件。你必须使用一个if-like条件,所以它将是

query.setFilter("Email == pEmail && ItemCode == pItemCode");
对于带有逗号分隔列表的declareParameters,

相同,如下所示

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