Datastax Cassandra CQL驱动程序中包含collection in子句的准备语句
我正在尝试运行以下查询Datastax Cassandra CQL驱动程序中包含collection in子句的准备语句,cassandra,cql,cql3,datastax-enterprise,datastax-java-driver,Cassandra,Cql,Cql3,Datastax Enterprise,Datastax Java Driver,我正在尝试运行以下查询 SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ? 我绑定Java长列表作为参数,得到一个异常 SyntaxError: line 0:-1 mismatched input '<EOF>' expecting ')' (ResultSetFuture.java:242) SyntaxError:第0行:-1个不匹配的输入“应为”)(ResultSetFuture.java:242)
SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ?
我绑定Java长列表作为参数,得到一个异常
SyntaxError: line 0:-1 mismatched input '<EOF>' expecting ')' (ResultSetFuture.java:242)
SyntaxError:第0行:-1个不匹配的输入“应为”)(ResultSetFuture.java:242)
如果我尝试使用(?),它希望绑定单个长项,但我需要一个集合
我的语法有错误吗?在Datastax bugzilla上得到响应,目前不支持,但已计划好响应
更新:在Cassandra 2.0.1中受支持,在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));
PreparedStatement prepared=session.prepare(“从预订中选择边缘标识,其中边缘标识位于?;”);
List edgeIds=Arrays.asList(1L、2L、3L);
session.execute(prepared.bind(edgeIds));
在文档中很难找到,但在中有描述
如果要使用命名参数,应使用setList()方法
你能告诉我现在是否解决了吗?我不能完全从链接中得到这个想法。
BoundStatement bs = session.prepare("select col from table where col in :values").bind();
bs.setList("values", Arrays.asList(v1, v2, v3));