【问题标题】:How to bind IN-clause values in a CQL 3 prepared statement?如何在 CQL 3 准备好的语句中绑定 IN 子句值?
【发布时间】:2016-05-06 06:52:02
【问题描述】:

我有一张大致像这样的桌子

create table mytable (
   id uuid,
   something text,
   primary key (id)
);

我正在尝试创建一个具有绑定子句的准备好的语句:

PreparedStatement ps = session.prepare("select * from mytable where id IN (?)");
...
UUID[] ids = { uuid1, uuid2, uuid3} ;

无论我如何表达要绑定的 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 对象,而不是 List.class 对象

我真的希望司机不要期待这么多?占位符,因为 in-list 中有值,因为这意味着您每次想要执行它时都必须重新准备语句,Datastax 文档说不要这样做!

我查看了com.datastax.driver.core.BoundStatement.bind() 方法,没有任何迹象表明其他方法会起作用 - 没有魔法包装或任何东西。

有没有办法做到这一点?

【问题讨论】:

标签: java data-binding cassandra cql cql3


【解决方案1】:

正确的语法是SELECT * FROM mytable WHERE id IN ?? 周围没有括号)。这将允许您传递一个 UUID 列表以绑定到该单个查询参数。

【讨论】:

  • 当我们有像 SELECT * FROM mytable WHERE id IN 这样的查询时,我们如何绑定? AND col2 在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2013-06-16
  • 2023-02-16
  • 2010-10-20
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多