如何在CQL 3预处理语句中绑定IN子句值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在CQL 3预处理语句中绑定IN子句值?相关的知识,希望对你有一定的参考价值。
我有一张大致相似的桌子
create table mytable (
id uuid,
something text,
primary key (id)
);
我正在尝试创建一个具有绑定in子句的预准备语句:
PreparedStatement ps = session.prepare("select * from mytable where id IN (?)");
...
UUID[] ids = { uuid1, uuid2, uuid3} ;
无论我如何表达要绑定的id,java驱动程序都会拒绝它们。
ps.bind( /*as array*/)
:driver complains语句只有一个值,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 ?
(没有围绕?
的parens)。这将允许您传递UUID列表以绑定到该单个查询参数。
以上是关于如何在CQL 3预处理语句中绑定IN子句值?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 select 语句的 IN 子句中的参数作为具有多个值的参数传递?
sql面试题_SQl优化技巧_1注意通配符中like的使用,百分号放后面_2避免在where子句中对字段进行函数操作_3在子查询当中,尽量用exists代替in_4where子句中尽量不要使用(代码片