【问题标题】:GQL disallowed literal error, google datastoreGQL 不允许的文字错误,谷歌数据存储
【发布时间】:2016-06-15 13:57:50
【问题描述】:

我正在尝试使用 GQL 从数据存储中取回一些数据。

当我发出SELECT * FROM Kind 请求时,它可以工作并且我会取回数据。

但是当我尝试时:

SELECT * FROM kind where num < 1234

我收到一个不允许的文字错误。

我什至尝试用引号来做到这一点:

SELECT * FROM kind where num < '1234'

但我得到了同样的错误。

以前有人遇到过这种情况吗?

代码如下:

Query<Entity> query = Query.gqlQueryBuilder(Query.ResultType.ENTITY,             
          "SELECT * FROM " + kind + " WHERE num < '100'"
          ).build();
  QueryResults<Entity> results = datastore.run(query);
  while (results.hasNext()) {
    Entity result = results.next();
   myList.add(result.getString("num"));

【问题讨论】:

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


    【解决方案1】:

    您需要绑定查询参数,而不是直接将其添加到查询中。

    Query<Entity> query = Query.gqlQueryBuilder(Query.ResultType.ENTITY,             
                              "SELECT * FROM " + kind + " WHERE num < @num")
                          .setBinding("num", 100)
                          .build();
    QueryResults<Entity> results = datastore.run(query);
    while (results.hasNext()) {
        Entity result = results.next();
        myList.add(result.getString("num"));
    ...
    

    【讨论】:

    • 我很高兴听到这个消息!感谢您使用 Cloud Datastore (☞゚ヮ゚)☞
    • 我只是好奇,你是从哪里学来的?我希望能够从记忆中做到这一点,或者至少知道在哪里寻找答案,除了 stackoverflow 和谷歌哈哈。
    • 我是 Datastore 的 PM,所以请记住 :) 最初,我只是从 GitHub 示例中读取代码。例如:github.com/GoogleCloudPlatform/java-docs-samples/blob/master/…
    • 谢谢,我一直在寻找更多的资源来学习。感谢您的链接,它将对我的项目非常有帮助。我可以使用与 GAE 相关的其他类似资源吗?
    • 我还有一个关于数据存储的问题。我可以取回汇总数据吗?我试图找到两个范围值(日期)之间的平均数。
    猜你喜欢
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    相关资源
    最近更新 更多