java - 如何在 CQL 3 准备语句中绑定(bind) IN 子句值?

标签 java data-binding cassandra cql cql3

我有一个大致像这样的表

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/

相关文章:

java - 获取 SWT TabFolder 中的 Activity 选项卡

java - 如何根据单元格中输入的文本内容增加jtable中行的高度

java - 在 REST 调用中使用 Wicket

java - 如何设置 Set<String> 不区分大小写

wpf - ListBox.DisplayMemberPath 未按预期工作。我该如何调试呢?

c# - MVC 映射到模型中可为空的 bool 值

c# - 文本框 MVVM 数据绑定(bind)

python - 在 Windows 10 上使用 python 3 运行 cassandra cqlsh

python - 如何在 CASSANDRA 中搜索特定范围内的参数

c# - "Greater than"where-condition on timeuuid 使用 Datastax C# Cassandra 驱动程序