首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Couchbase参数化N1QL查询IN语句

Couchbase参数化N1QL查询IN语句
EN

Stack Overflow用户
提问于 2016-08-02 04:49:47
回答 1查看 2.4K关注 0票数 1

使用com.couchbase.client, java-client版本2.2.7,我无法使用包含多项的IN语句的n1ql查询,请参阅下面的示例查询和java代码

代码语言:javascript
复制
public int getCountForDuration(Long startTime, Long endTime, String ids){
    JsonObject placeHolders = JsonObject.create().put("ids", ids).put("startTime", startTime).put("endTime", endTime);
    N1qlQuery query = N1qlQuery.parameterized(COUNT_STATEMENT, placeHolders)            
    N1qlQueryResult result = bucket.query(query);
    ...
}

public static final String COUNT_STATEMENT = "select count(*) as count " +
            "from bucketName " +
            "where docType = 'docId' " +
            "and (id IN [$ids]) " + <----- OFFENDING LINE
            "and publishTimestamp between $startTime and $endTime";

我尝试使用(')、(")和(‘)设置ids,例如:

代码语言:javascript
复制
ids = "'123', '456'";
ids = "\"123\" , \"456\";
ids = "`123`,`456`"; 

当存在多个it时,所有这些都不起作用,但是,如果只有一个it,如ids = "'123'",则可以正常工作。而且,如果我在终端上使用CBQ,我的查询也能工作。

我的问题是,如何设置参数化的N1QL查询,它可以在in语句中接受多个项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-02 07:48:55

删除语句中$ids周围的括号并将实际ids作为JsonArray对象放入JsonArray对象应该可以:

代码语言:javascript
复制
JsonObject placeHolders = JsonObject.create()
    .put("ids", JsonArray.from("id1", "id2", "id3"))
    .put("startTime", startTime)
    .put("endTime", endTime);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38711985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档