我正在尝试运行以下查询
SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?
我将Long的Java列表绑定为参数,我得到一个异常
SyntaxError: line 0:-1 mismatched input '<EOF>' expecting ')' (ResultSetFuture.java:242)
如果我尝试使用(?),它希望绑定单个Long项,但我需要一个集合
我的语法是否有错误?
答案 0 :(得分:17)
在Cassandra 2.1.3中测试过以下代码片段:
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));
答案 1 :(得分:7)
对Datastax bugzilla有回应,目前不支持,但计划
https://issues.apache.org/jira/browse/CASSANDRA-4210
更新:Cassandra 2.0.1支持
答案 2 :(得分:0)
在文档中有点难以找到,但tuples section of the manual中对此进行了描述。
如果要使用命名参数,则应使用setList()方法。
BoundStatement bs = session.prepare("select col from table where col in :values").bind();
bs.setList("values", Arrays.asList(v1, v2, v3));