2017-07-26 69 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