带有特殊字符的gae jdoquery参数

时间:2013-05-30 11:37:54

标签: google-app-engine parameters special-characters jdo

我正在使用JDO编写云端点api,以根据emailid获取用户列表。我将emailId作为@Named参数传递给Api方法并将其添加到查询过滤器,我收到错误消息“无法解析表达式部分:@ gmail.com”

@Api (name="MyAppname", version="v1")
public class PersonEndpoint {

public Person validate(@Named("emailId") String emailId, @Named("role") String role){
.......

PersistenceManager pm=getPersistenceManager();
Query q = pm.newQuery(Person.class);
q.setFilter(" email == "+emailId+" && role == "+role);

try{
    person=(Person)q.execute();
}finally{
    q.closeAll();
    pm.close();
}

return person;
}

当我调用上面的api时,会抛出以下错误

javax.jdo.JDOUserException: Portion of expression could not be parsed: @gmail.com && role == collector
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:519)
at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:230)

我们如何将带有特殊字符的参数传递给查询过滤器?

1 个答案:

答案 0 :(得分:2)

您没有在文本字符串中嵌入文本字符串。而是定义参数,并将参数值提供给execute()

Query q = pm.newQuery(Person.class);
q.setFilter("emailId == :theEmail && role == :theRole");
Map<String, String> paramValues = new HashMap();
paramValues.put("theEmail", myEmailParam);
paramValues.put("theRole", myRoleParam);
List<Person> persons = (List<Person>)q.executeWithMap(paramValues);

所有这些都是通过JDO规范和the docs for DataNucleus JDO中的示例定义的。我强烈建议你阅读它们