2013-06-04 14 views
11

Próbuję uruchomić następujące zapytanieprzygotowane oświadczenie z kolekcji w IN klauzuli Datastax Cassandra CQI kierowcy

SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ? 

wiążę listy Java długich jako parametr i uzyskać wyjątek

SyntaxError: line 0:-1 mismatched input '<EOF>' expecting ')' (ResultSetFuture.java:242) 

Jeśli spróbuję użyć (?), Oczekuje, że pojedyncza długa pozycja będzie związana, ale potrzebuję kolekcji

Czy wystąpił błąd w mojej składni?

Odpowiedz

12

Testowane Cassandry 2.1.3, poniższym fragmencie kodu działa:

PreparedStatement prepared = session.prepare("SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?;"); 
List<Long> edgeIds = Arrays.asList(1L, 2L, 3L); 
session.execute(prepared.bind(edgeIds)); 
0

Jest trochę trudno znaleźć w dokumentacji, ale jest opisany w tuples section of the manual .

Jeśli chcesz używać nazwanych parametrów, powinieneś użyć metody setList().

BoundStatement bs = session.prepare("select col from table where col in :values").bind(); 
bs.setList("values", Arrays.asList(v1, v2, v3)); 
Powiązane problemy