我遇到了将多列簇密钥列表绑定到带有IN子句的语句的问题。
示例可以是https://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause(IN“限制”部分)中给出的示例:
SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’
AND date = ‘2015-06-05’
AND datacenter = 'US_WEST_COAST'
AND (hour, minute) IN ((14, 0), (15, 0));
作为准备好的声明,如下所示:
PreparedStatement preparedStatement = session.prepare(
"SELECT * FROM numberOfRequests
WHERE cluster = ‘cluster1’
AND date = ‘2015-06-05’
AND datacenter = 'US_WEST_COAST'
AND (hour, minute) IN (?);")
我们说:
int[][] hourMinuteArray = {{1,30},{4,45},{5,50}};
如何将多列键列表绑定到语句:
preparedStatement.bind(????)或boundStatemeent.set?(????)
btw:对于单列群集密钥列表
,它可以工作答案 0 :(得分:0)
将准备好的语句更改(?)
更新为?
,如下所示:
PreparedStatement preparedStatement = session.prepare(
"SELECT * FROM numberOfRequests " +
"WHERE cluster = cluster1 " +
"AND date = '2015-06-05' " +
"AND datacenter = 'US_WEST_COAST' " +
"AND (hour, minute) IN ?"
);
要绑定的值是TupleValue的List。首先,你必须创建一个(int,int)元组
TupleType intTuple = cluster.getMetadata().newTupleType(DataType.cint(), DataType.cint());
创建元组列表
List<TupleValue> list = Arrays.asList(
intTuple.newValue(1, 30),
intTuple.newValue(4, 45),
intTuple.newValue(5, 50)
);
现在你可以绑定列表了。
preparedStatement.bind(list);