2017-07-26 4 views
0

Ich versuche, parametrisierte N1QL-Abfrage zu verwenden, aber die JSON-Platzhalter nicht zu erkennen und falsche Syntaxausnahme zu werfen.N1QL-Abfrage erkennt keine Parameter

Code:

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

Bucket-Name nach FROM-Klausel kann nicht parametrisiert werden. – vsr

Antwort

0

Nach FROM-Klausel erfordert als statische Bezeichner Eimer oder Unterabfrage beziehen, kann es nicht parametriert variabel sein. Entfernen Sie $ bucketName als parametrisierte Variable und ersetzen Sie sie durch den tatsächlichen Bucket-Namen, indem Sie LMR_DETAILS dynamisch erstellen.

+0

Danke @vsr. Aber ich muss den Bucket-Namen dynamisch übergeben, da ich viele Umgebungen mit verschiedenen Buck-Namen habe. Wie kann ich das tun? – Sree

+0

String LMR_DETAILS = "SELECT * FROM" + bucket.bucketManager(). Info(). Name() + "WHERE lmr.lmrStatusDescriptionTe = 'PENDING' und STR_TO_MILLIS (lmr.recordExpirationTs) ZWISCHEN STR_TO_MILLIS ($ startTime) AND STR_TO_MILLIS ($ endTime) "; – vsr