2013-06-04 20 views
11

Sto cercando di eseguire la seguente queryDichiarazione preparato con raccolta in clausola in Datastax Cassandra CQL conducente

SELECT edge_id, b_id FROM booking_by_edge WHERE edge_id IN ? 

mi legano lista Java di long come parametro e ottengo un'eccezione

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

Se provo a usare (?) Ci si aspetta che un singolo oggetto Long sia vincolato, ma ho bisogno di una collezione

C'è un errore nella mia sintassi?

risposta

12

Testato in Cassandra 2.1.3, il seguente frammento di codice funziona:

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

E 'un po' difficile da trovare nella documentazione, ma è descritto nel tuples section of the manual .

Se si desidera utilizzare parametri denominati, è necessario utilizzare il metodo setList().

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