首页 文章

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

提问于
浏览
0

我有问题将多列集群键列表绑定到带有IN子句的语句 .

该示例可以是https://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause中给出的示例(IN "restrictions"部分):

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?(????)

顺便说一句:它适用于单列群集密钥列表

1 回答

  • 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);
    

相关问题