我有一张大致类似于
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 对象
我真的希望司机不要期待那么多?占位符,因为列表中存在值,因为这意味着您每次想要执行语句时都必须重新准备语句,而 Datastax 文档说不要这样做!
我看了看com.datastax.driver.core.BoundStatement.bind()
方法,并且没有迹象表明任何其他方法都可以工作 - 没有魔法包装或任何东西。
有没有办法做到这一点?
正确的语法是SELECT * FROM mytable WHERE id IN ?
(没有括号?
)。这将允许您传递 UUID 列表以绑定到该单个查询参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)