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