如何在 CQL 3 准备语句中绑定 IN-clause 值?
How to bind IN-clause values in a CQL 3 prepared statement?
我有一个 table 大致像
create table mytable (
id uuid,
something text,
primary key (id)
);
我正在尝试创建一个具有绑定的准备好的语句 in-clause:
PreparedStatement ps = session.prepare("select * from mytable where id IN (?)");
...
UUID[] ids = { uuid1, uuid2, uuid3} ;
无论我如何表示要绑定的 ID,java driver 都会拒绝它们。
ps.bind( /*as array*/)
: driver 抱怨语句只有一个值,提供了 2 个
ps.bind( /*as comma separated string list of uuids*/)
: driver 抱怨它想要 UUID.class objects,而不是字符串
ps.bind( /*as list object*/)
: driver 抱怨它想要 UUID.class objs,而不是 List.class object
我真的希望 driver 没有期待那么多?占位符,因为 in-list 中有值,因为这意味着每次要执行该语句时都必须重新准备该语句,Datastax 文档说不要这样做!
我查看了 com.datastax.driver.core.BoundStatement.bind()
方法,没有迹象表明其他任何方法都有效 - 没有魔术包装器或任何东西。
有办法吗?
正确的语法是 SELECT * FROM mytable WHERE id IN ?
(?
两边没有括号)。这将允许您传递 UUID 列表以绑定到该单个查询参数。
我有一个 table 大致像
create table mytable (
id uuid,
something text,
primary key (id)
);
我正在尝试创建一个具有绑定的准备好的语句 in-clause:
PreparedStatement ps = session.prepare("select * from mytable where id IN (?)");
...
UUID[] ids = { uuid1, uuid2, uuid3} ;
无论我如何表示要绑定的 ID,java driver 都会拒绝它们。
ps.bind( /*as array*/)
: driver 抱怨语句只有一个值,提供了 2 个
ps.bind( /*as comma separated string list of uuids*/)
: driver 抱怨它想要 UUID.class objects,而不是字符串
ps.bind( /*as list object*/)
: driver 抱怨它想要 UUID.class objs,而不是 List.class object
我真的希望 driver 没有期待那么多?占位符,因为 in-list 中有值,因为这意味着每次要执行该语句时都必须重新准备该语句,Datastax 文档说不要这样做!
我查看了 com.datastax.driver.core.BoundStatement.bind()
方法,没有迹象表明其他任何方法都有效 - 没有魔术包装器或任何东西。
有办法吗?
正确的语法是 SELECT * FROM mytable WHERE id IN ?
(?
两边没有括号)。这将允许您传递 UUID 列表以绑定到该单个查询参数。