【问题标题】:cassandra multi column in binding java datastax driver绑定java datastax驱动程序中的cassandra多列
【发布时间】:2017-07-27 22:15:01
【问题描述】:

我无法将多列簇键列表绑定到带有 IN 子句的语句。

该示例可以与https://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause 中给出的完全相同(“限制”部分):

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

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

【问题讨论】:

    标签: java cassandra datastax-java-driver


    【解决方案1】:

    更新您准备好的语句,将 (?) 更改为 ?,如下所示:

    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 列表。首先你必须创建一个 (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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-15
      • 2017-07-13
      • 2014-05-04
      • 1970-01-01
      • 2017-08-12
      • 2016-02-27
      • 2017-01-20
      • 2014-03-27
      相关资源
      最近更新 更多