I have a table that is roughly like
create table mytable (
id uuid,
something text,
primary key (id)
);
I'm trying to create a prepared statement that has a bound in-clause:
PreparedStatement ps = session.prepare("select * from mytable where id IN (?)");
...
UUID[] ids = { uuid1, uuid2, uuid3} ;
No matter how I express the ids to bind, the java driver rejects them.
ps.bind( /*as array*/)
: driver complains statement has only one value, 2 supplied
ps.bind( /*as comma separated string list of uuids*/)
: driver complains it wants UUID.class objects, not strings
ps.bind( /*as list object*/)
: driver complains it wants UUID.class objs, not a List.class object
I really hope the driver isn't expecting as many ? place holders as there are values in the in-list, because that means you'd have to reprepare the statement every time you wanted to execute it, which the Datastax docs says not to do!
I looked at the com.datastax.driver.core.BoundStatement.bind()
method and there is no indication that anything else would work - no magic wrappers or anything.
Is there a way to do this?
The correct syntax is SELECT * FROM mytable WHERE id IN ?
(without parens around the ?
). This will allow you to pass a list of UUIDs to bind to that single query parameter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With