这个问题我解决了这个问题查询数据存储谷歌检索由用户(com.google.appengine.api.users.User)这样的东西的:

User user = userService.getCurrentUser();
String select_query = "select from " + Greeting.class.getName(); 
Query query = pm.newQuery(select_query); 
query.setFilter("author == paramAuthor"); 
query.declareParameters("java.lang.String paramAuthor"); 
greetings = (List<Greeting>) query.execute(user);

以上工作正常 - 但有点乱搞的,我意识到这个语法不是很实用的,因为需要建立更复杂的查询出现了 - 所以我决定手动建立我的过滤器,现在我得到了例如像在以下(其中,所述过滤器通常是在通过作为一个字符串变量,但现在是在线构建为简单起见):

User user = userService.getCurrentUser();    
String select_query = "select from " + Greeting.class.getName(); 
Query query = pm.newQuery(select_query); 
query.setFilter("author == '"+ user.getEmail() +"'");  
greetings = (List<Greeting>) query.execute();

显然,这将无法正常工作,即使这与语法是field = 'value' 通过JDOQL 支持,它可以在其他领域(string类型和枚举)的罚款。其它奇怪的是,在看在应用引擎仪表盘的数据查看器中的“作者”字段被存储为类型用户但值为“user@gmail.com”,然后再次当我将其设置为参数(上面说的情况下正常工作)我声明的参数为字符串然后向下穿过用户(用户)的一个实例而它与一个简单的toString()(I猜)序列

任何人想?

有帮助吗?

解决方案

在查询语言使用字符串替换是的总是的一个坏主意。这是太容易用户突破并弄乱你的环境,并介绍了编码问题的整体集合,等等。

什么是错的你早先的参数替换的方法呢?据我所知,它支持的一切,和它回避任何解析问题。至于与知道有多少参数传递的话,你可以使用Query.executeWithMap或Query.executeWithArray与未知数量的参数执行查询的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top