2013-06-04 49 views
11

Tôi cố gắng để chạy các truy vấn sau đâytuyên bố chuẩn bị với bộ sưu tập trong tại khoản trong Datastax Cassandra CQL lái xe

SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ? 

tôi ràng buộc Java danh sách Long như một tham số và tôi nhận được một ngoại lệ

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

Nếu tôi cố gắng sử dụng (?), Nó mong đợi một mục Dài bị ràng buộc, nhưng tôi cần một bộ sưu tập

Có lỗi trong cú pháp của tôi không?

Trả lời

7

Got phản ứng trên Datastax bugzilla, nó hiện chưa được hỗ trợ, nhưng kế hoạch

https://issues.apache.org/jira/browse/CASSANDRA-4210

Cập nhật: Được hỗ trợ trong Cassandra 2.0.1

+0

Bạn có thể cho tôi biết nếu nó được giải quyết ngay bây giờ không? Tôi không thể có được ý tưởng từ các liên kết. – pinkpanther

12

Tested trong Cassandra 2.1.3, đoạn mã sau hoạt động:

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

Hơi khó tìm trong tài liệu nhưng được mô tả trong tuples section of the manual .

Nếu bạn muốn sử dụng các tham số có tên, bạn nên sử dụng phương thức setList().

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