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 に答える