Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带限制的Cassandra Bounder语句_Java_Cassandra_Datastax_Datastax Java Driver - Fatal编程技术网

Java 带限制的Cassandra Bounder语句

Java 带限制的Cassandra Bounder语句,java,cassandra,datastax,datastax-java-driver,Java,Cassandra,Datastax,Datastax Java Driver,我使用PreparedStatement和BoundStatement执行一些Cassandra查询。问题是,我试图对这些设置一个限制。这就是我所拥有的: selectByDatasetIdAndTimePreparedStatement = getSession().prepare( QueryBuilder.select() .all() .from(KEYSPA

我使用PreparedStatement和BoundStatement执行一些Cassandra查询。问题是,我试图对这些设置一个限制。这就是我所拥有的:

 selectByDatasetIdAndTimePreparedStatement = getSession().prepare(
                QueryBuilder.select()
                        .all()
                        .from(KEYSPACE_NAME, TABLE_NAME)
                        .where(QueryBuilder.eq(AFFILIATION_ID_COLUMN, QueryBuilder.bindMarker()))
                        .and(QueryBuilder.eq(DATASET_ID_COLUMN, QueryBuilder.bindMarker()))
                        .and(QueryBuilder.lte(TIME_COLUMN, QueryBuilder.bindMarker()))
                        //.limit(QueryBuilder.bindMarker())
        );
每当我需要运行查询时,我调用此函数:

public Statement buildSelectByDatsetIdAndTimePreparedStatment(String affiliationId, String datasetId, Long time, int limit)
{
    BoundStatement boundStatement = selectByDatasetIdAndTimePreparedStatement
            .bind()
            .setString(AFFILIATION_ID_COLUMN, affiliationId)
            .setString(DATASET_ID_COLUMN, datasetId)
            .setLong(TIME_COLUMN, time);
    databaseManager.applyReadStatementsConfiguration(boundStatement);
    return boundStatement;
}
但是,只有在没有第一个代码段中的limit子句的情况下,这才有效。我不知道如何在第二个代码段中指定限制。我不想用字符串之类的东西

databaseManager.getSession().execute("SELECT * FROM myTable where ... limit 10);
使用BoundStatement有什么方法可以做到这一点吗?我看不到像BoundStatement.limit()或setLimit()这样的东西

谢谢,
塞尔维亚人

最简单的方法是使用命名标记来表示限制:

PreparedStatement pst = session.prepare(
        select().all()
                .from("foo")
                .where(eq("k", bindMarker()))
                .limit(bindMarker("l")));     // here

session.execute(pst.bind()
        .setInt("k", 1)
        .setInt("l", 10));
还可以保留匿名标记并使用位置设置器:

                .where(eq("k", bindMarker()))
                .limit(bindMarker())); // no name
session.execute(pst.bind()
        .setInt(0, 1)
        .setInt(1, 10));
作为记录,当您使用匿名标记时,Cassandra会自动为它们命名。对于列,这些是列名(您的示例依赖于此),对于限制,结果是
[limit]
。所以这也会起作用:

                .where(eq("k", bindMarker()))
                .limit(bindMarker())); // no name
session.execute(pst.bind()
        .setInt("k", 1)
        .setInt("[limit]", 10));
当有疑问时,您可以检查准备好的语句的元数据,以查看它期望的内容:

for (ColumnDefinitions.Definition v : pst.getVariables()) {
    System.out.printf("%s %s%n", v.getName(), v.getType().getName());
}
就我个人而言,为了清晰起见,我喜欢命名标记,但不喜欢