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
Java 语句上的Cassandra.setFetchSize()不受支持_Java_Cassandra_Datastax Java Driver - Fatal编程技术网

Java 语句上的Cassandra.setFetchSize()不受支持

Java 语句上的Cassandra.setFetchSize()不受支持,java,cassandra,datastax-java-driver,Java,Cassandra,Datastax Java Driver,我想在UI上实现分页,所以我设置fetchSize如下: boundStatement.setFetchSize(20) 但是setFetchSize()不受尊重。到目前为止,我的表有400行,所有400行都被检索到。当我使用检索下一组行时 rs.getExecutionInfo().getPagingState(); 然后检索接下来的380行。因此分页状态是正确设置和检索的,但为什么驱动程序要从表中检索所有400行,如何避免这种情况或使其仅检索400行 代码部分: .... .... /

我想在UI上实现分页,所以我设置fetchSize如下:

boundStatement.setFetchSize(20)
但是setFetchSize()不受尊重。到目前为止,我的表有400行,所有400行都被检索到。当我使用检索下一组行时

rs.getExecutionInfo().getPagingState();
然后检索接下来的380行。因此分页状态是正确设置和检索的,但为什么驱动程序要从表中检索所有400行,如何避免这种情况或使其仅检索400行

代码部分:

....
....

// "SELECT * FROM abc.sometable"
BoundStatement boundStatement = pStmt.bind();
boundStatement.setFetchSize(20);

if (pagingState != null) {
  boundStatement.setPagingState(PagingState.fromString(pagingState));
}
ResultSet rs = session.execute(boundStatement);
PagingState nextPage = rs.getExecutionInfo().getPagingState();
int remaining = rs.getAvailableWithoutFetching();
List<?> list = new ArrayList<>();
for (Row row : rs) {
  list.add(getValidObjectFromRow(row));
}
 ....
。。。。
....
//“从abc.sometable中选择*”
BoundStatement BoundStatement=pStmt.bind();
boundStatement.setFetchSize(20);
如果(分页状态!=null){
boundStatement.setPagingState(PagingState.fromString(PagingState));
}
ResultSet rs=session.execute(boundStatement);
PagingState nextPage=rs.getExecutionInfo().getPagingState();
int remaining=rs.getAvailableWithoutFetching();
列表=新的ArrayList();
用于(行:rs){
添加(getValidObjectFromRow(row));
}
....
Cassandra版本-3.7和Cassandra驱动程序版本-3.1.0


谢谢

setFetchSize
控制页面大小,但不控制
ResultSet
中返回的最大行数

for(行:rs){
添加(getValidObjectFromRow(row));
}
在上面的示例代码中,它将迭代前20行,当它到达当前结果的末尾时,它将获取更多,直到没有更多的行与查询匹配

如果要限制返回的行数,有几个选项

  • 限制X
    (其中X是所需的行数)添加到查询的末尾
  • 仅迭代直到不再有行,即:
  • while(rs.getAvailableWithoutFetching()>0){
    添加(getValidObjectFromRow(rs.one());
    }
    

    这将从
    ResultSet
    读取,直到页面中不再有行,此时它将停止迭代。

    您如何使用ResultSet?很可能驱动程序正在翻页封面下的下20行(等等)。如果你使用wireshark,你可以查看查询/结果,看看它是否实际获取了20个数据块。您可能只想在查询中添加
    LIMIT 20
    ,如果需要更多控制更新问题的代码块,请手动翻页。您使用的是什么版本的cassandra?我使用的是cassandra版本-3.7和cassandra驱动程序版本-3.1.0谢谢您的回答。我回去再次阅读了java驱动程序文档,您的回答赋予了它们新的含义!LOL:)