代码之家  ›  专栏  ›  技术社区  ›  Michaël BadZen

使用“contains”请求获取结果时JDOQL出现问题

  •  1
  • Michaël BadZen  · 技术社区  · 15 年前

    我正在使用一个项目的谷歌应用引擎,我需要做一些数据库查询。我使用JDOQL来询问数据库。在我的例子中,我想获得包含子字符串“array”的university。我认为我的查询有一个错误,因为它返回的是按字母顺序排列的大学名称,而不是包含子字符串的大学名称。

    Query query = pm.newQuery("SELECT FROM " + University.class.getName() + " WHERE name.contains("+array+") ORDER BY name RANGE 0, 5");
    

    有人能告诉我我的问题是什么吗?

    谢谢你的帮助!

    我有一个大学商店的名单,我有一个建议箱,我们可以要求他的名字大学。我想自动完成请求的名称。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Robert Kluin    15 年前

    应用程序引擎不支持全文搜索,你应该明星问题 217 . 但是,部分解决方案是可能的。对你来说我觉得很合适。

    首先,调整您的模型,使名称也有一个小写(或大写)版本——我假设它被称为lname。除非您希望查询区分大小写。

    然后您可以这样查询:

    Query query = pm.newQuery(University.class);
    query.setFilter("lname >= startNameParam");
    query.setFilter("lname < stopNameParam");
    query.setOrdering("lname asc");
    query.declareParameters("String startNameParam");
    query.declareParameters("String stopNameParam");
    query.setRange(0, 5);
    List<University> results = (List<University>) query.execute(search_value, search_value + "z");
    
        2
  •  0
  •   Gopi    15 年前

    Query query = pm.newQuery(University.class,":p.contains(name)");
    query.setOrdering("name asc");
    query.setRange(0, 5);
    List univs = q.execute(Arrays.asList(array)); 
    

    :p 是一个 implicit param

    推荐文章