Google App Engine查询执行只需要3个参数

时间:2012-08-12 00:24:10

标签: java google-app-engine

任何人都可以告诉我为什么以下代码在命令“execute”的最后一行导致错误,并显示错误消息:

  

Query类型中的方法execute(Object,Object,Object)不适用于参数(Long,Long,Date,Date)

Query q = pm.newQuery(Appointment.class,"AdminID == AID"+
  " && EmployeeID == CEID"+
  " && Time > STime"+
  " && Time < ETime");
q.declareImports("import java.util.Date");
q.declareParameters("Long AID, Long CEID, Date STime, Date ETime");
q.setOrdering("Time");
Appointments = (List<Appointment>) q.execute(AdminID, CurrentEmployeeID, Time1, Time2);

据我所知(由错误信息暗示,执行功能最多只能获得3个争论,如果是这样的话,任何人都可以建议如何实现我想做的事情吗?我试过了以下代码,但每次运行时都会出现解析错误!

Query q = pm.newQuery(Appointment.class,"AdminID == "+AdminID+
  " && EmployeeID == "+CurrentEmployeeID+
  " && Time > "+Time1+
  " && Time < "+Time2);
q.declareImports("import java.util.Date");
q.setOrdering("Time");
Appointments = (List<Appointment>) q.execute();

我得到的解析错误是:

  

org.datanucleus.store.query.QueryCompilerSyntaxException:无法解析表达式的部分:8月13日11:44:55 BST 2012&amp;&amp;时间&lt; 8月13日星期一11:45:05 BST 2012

1 个答案:

答案 0 :(得分:3)

尝试executeWithArrayexecuteWithMap

HashMap<String, Object> params = new HashMap<String, Object>();
params.put( "AID", adminId );
params.put( "CEID", currentEmployeeId );
params.put( "STime", startTime );
params.put( "ETime", endTime );

query.executeWithMap( params );

注意:

  1. 变量应该是lowerCamelCase
  2. startTimeendTime的描述性高于Time1Time2
  3. “Id”通常优于“ID” - What is correct Java naming convention for id?
  4. 你的第二次尝试不起作用,因为它隐含地调用了..." && Time > " + Time1.toString() + ...