
# 如何设置分页查询（Java）
#### 指定每次查询获取的行数
在创建集群连接时，可以指定每次查询获取的行数，具体为下列setFetchSize内参数。
```
Cluster cluster = Cluster.builder()
                .addContactPoint(contactPoint)
                .withPort(8636)
                .withQueryOptions(new QueryOptions().setFetchSize(20))
                .build();
```
设置成功后，在该配置下产生的会话，都会一次只获取设置的行数，在缓存（20行）耗尽会触发向服务端拉取数据的请求，并且等待返回，会有相应的等待时间延迟。
#### 提前获取下一页
如果需要手动提前获取更多行存入当前结果集避免等待，可以参考以下代码，在结果集剩余10行时，先提交并行从服务器拉取更多行的请求。
```
ResultSet rs = session.execute("select * from space3.table3;");
for (Row row : rs) {
    if (rs.getAvailableWithoutFetching() == 10 && !rs.isFullyFetched()){
        System.out.println("pre-fetch more rows. ");
        rs.fetchMoreResults();
    }
    System.out.println(row);
}
```
#### 保存当前分页状态并复用
1. 保存当前分页状态。
   ```
   PagingState pagingState = resultSet.getExecutionInfo().getPagingState();
   String string = pagingState.toString();
   byte[] bytes = pagingState.toBytes();
   ```
   
2. 加载当前分页状态并进行复用。
   ```
   PagingState pagingState = PagingState.fromString(string);
   Statement st = new SimpleStatement("your query");
   st.setPagingState(pagingState);
   ResultSet rs = session.execute(st);
   ```
   注：分页情况只可以获取、储存和复用，不支持修改并应用在新的其他查询语句上。
   
![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
Cassandra并不支持offset查询，即无法跳过结果集的一部分，直接获取指定index范围的结果。如果需要对应功能，需要在业务中进行封装模拟，但该查询仍然是顺序查询，客户可以丢弃无效结果。更多高级用法与介绍可以参考[DataSax Java驱动程序3.11](https://docs.datastax.com/en/developer/java-driver/3.11/manual/paging/)。
