2017-07-26 34 views
0

我想使用参数化的N1QL查询,但它不识别json占位符并抛出不正确的语法异常。N1QL查询不识别参数

代码:

public static final String LMR_DETAILS 
    = "SELECT * FROM $bucketName WHERE lmr.lmrStatusDescriptionTe ='PENDING'and STR_TO_MILLIS(lmr.recordExpirationTs) BETWEEN STR_TO_MILLIS($startTime) AND STR_TO_MILLIS($endTime)"; 

String bucketName = bucket.bucketManager().info().name(); 
        JsonObject placeHolders = JsonObject.create().put("bucketName", bucketName).put("startTime", reqDates[0]).put("endTime", reqDates[1]); 
        N1qlQuery query = N1qlQuery.parameterized(QueryString.LMR_DETAILS, placeHolders); 
        N1qlQueryResult result = bucket.query(query); 
+0

FROM子句后面的存储桶名称不能被参数化。 – vsr

回答

0

后FROM子句需要静态标识符指桶或子查询,它不能被参数化的变量。删除$ bucketName作为参数化变量,并通过动态构建LMR_DETAILS来替换实际的存储桶名称。

+0

谢谢@vsr。但我必须动态传递Bucket Name,因为我有许多具有不同buck名称的环境。我怎么做 – Sree

+0

String LMR_DETAILS =“SELECT * FROM”+ bucket.bucketManager()。info()。name()+“WHERE lmr.lmrStatusDescriptionTe ='PENDING'and STR_TO_MILLIS(lmr.recordExpirationTs)BETWEEN STR_TO_MILLIS($ startTime )AND STR_TO_MILLIS($ endTime)“; – vsr