19

我正在尝试运行以下查询

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 项目,但我需要一个集合

我的语法有错误吗?

4

3 回答 3

22

在 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));
于 2015-03-25T12:00:58.393 回答
7

在 Datastax bugzilla 上得到响应,目前不支持,但计划中

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

更新:在 Cassandra 2.0.1 中受支持

于 2013-06-04T15:22:56.443 回答
2

在文档中很难找到,但在手册的元组部分中有描述。

如果你想使用命名参数,你应该使用 setList() 方法。

BoundStatement bs = session.prepare("select col from table where col in :values").bind();
bs.setList("values", Arrays.asList(v1, v2, v3));
于 2017-10-17T09:36:49.407 回答