Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine Google数据存储在查询*用户*类型时出现问题_Google App Engine_Jdo_Google Cloud Datastore_Jdoql - Fatal编程技术网

Google app engine Google数据存储在查询*用户*类型时出现问题

Google app engine Google数据存储在查询*用户*类型时出现问题,google-app-engine,jdo,google-cloud-datastore,jdoql,Google App Engine,Jdo,Google Cloud Datastore,Jdoql,关于这个问题,我解决了通过用户(com.Google.appengine.api.users.user)查询Google数据存储以检索内容的问题,如下所示: User user = userService.getCurrentUser(); String select_query = "select from " + Greeting.class.getName(); Query query = pm.newQuery(select_query); query.setFilter("auth

关于这个问题,我解决了通过用户(com.Google.appengine.api.users.user)查询Google数据存储以检索内容的问题,如下所示:

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(选择_Query);
setFilter(“author==paramAuthor”);
declareParameters(“java.lang.String paramAuthor”);
问候语=(列表)查询。执行(用户);
上面的方法很好——但是经过一番尝试之后,我意识到这种语法并不实用,因为需要构建更复杂的查询——所以我决定手动构建我的过滤器,现在我得到了如下示例(过滤器通常作为字符串变量传入,但为了简单起见,现在是内联构建的):

User User=userService.getCurrentUser();
String select_query=“select from”+Greeting.class.getName();
Query Query=pm.newQuery(选择_Query);
query.setFilter(“author==”+user.getEmail()+”);
问候语=(列表)query.execute();
显然,即使使用
field='value'
的语法是正确的,并且在其他字段(字符串类型和枚举)上也可以正常工作,这也不会起作用。另一件奇怪的事情是,在app engine仪表板中查看Data viewer时,“作者”字段存储为type User,但值为'user@gmail.com,然后再次当我将其设置为参数时(上面的情况很好),我将参数声明为字符串,然后传递User(User)的实例它通过一个简单的
toString()
(我猜)进行序列化


有人知道吗?

在查询语言中使用字符串替换始终是一个坏主意。用户很容易闯入并扰乱您的环境,而且它会带来一系列编码问题,等等


您以前的参数替换方法有什么问题?据我所知,它支持所有功能,并且避免了任何解析问题。至于要传递多少个参数的问题,您可以使用Query.executeWithMap或Query.executeWithArray来执行参数数未知的查询。

使用str在查询语言中使用替换总是一个坏主意。用户很容易破坏和破坏您的环境,而且它会带来一系列编码问题,等等


您以前的参数替换方法有什么问题?据我所知,它支持所有功能,并且避免了任何解析问题。至于要传递多少个参数的问题,您可以使用Query.executeWithMap或Query.executeWithArray来执行参数数未知的查询。

您好,谢谢r您的答案-这显示了参数替换的问题所在(问了另一个问题,因为这是一个稍微不同的问题)忘记了链接-->我现在使用的是Query.executeWithArray-感谢您的建议HI感谢您的回答-这显示了参数替换的问题所在(问了另一个问题,因为这是一个稍微不同的问题)忘记了链接-->我现在使用的是Query.executeWithArray-感谢您的建议
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();