使用 datastax java 驱动程序为 where in 子句绑定数据

jix*_*989 0 cassandra datastax-java-driver datastax

我知道有人问过这个问题(http://www.datastax.com/support-forums/topic/java-driver-cql-3-bound-statements-in-clause#post-13114在 IN 中收集的准备好的语句Datastax Cassandra CQL 驱动程序中的子句

但是,我仍然不知道如何绑定数据。例如,我的 prepareStatement 是

select * from cf where key in (?)
Run Code Online (Sandbox Code Playgroud)

我想要的是绑定数据,cql 看起来像

select * from cf where key in ('key1', 'key2')
Run Code Online (Sandbox Code Playgroud)

现在我有一个 boundStatement。

当我使用 boundStatment.bind() api 时。我试着绑定?但是,对于列表或数组,它说:

列值为 varchar 类型,不能设置为列表

好的,我设置了一个字符串并像这样使用 boundStatement.bind:

boundStatement.bind("'key1','key2'");
Run Code Online (Sandbox Code Playgroud)

没有例外,但结果集是空的。为什么?我认为是因为驱动程序将其解析为

select * from cf where key in (''key1', 'key2'')
Run Code Online (Sandbox Code Playgroud)

(注意一个多余的引号,因为它认为所有的“'key1'和'key2'”都是一个字符串)。

所以,我知道 datastax 在条款中有支持。但我找不到一些例子..

任何人都可以帮助我吗?谢谢!

Tyl*_*bbs 5

正确的语法是:

SELECT * FROM cf WHERE key IN ?
Run Code Online (Sandbox Code Playgroud)

这将允许您为查询参数绑定一个列表。