绑定java datastax驱动程序中的cassandra多列

时间:2017-07-27 11:22:26

标签: java cassandra datastax-java-driver

我遇到了将多列簇密钥列表绑定到带有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:对于单列群集密钥列表

,它可以工作

1 个答案:

答案 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);