Help Center/ GeminiDB/ GeminiDB Cassandra API/ FAQs/ Database Usage/ How Do I Set Paging Query with Java?
Updated on 2024-05-30 GMT+08:00

How Do I Set Paging Query with Java?

Specifying the Number of Rows Fetched in Each Page

The fetch size specifies how many rows will be fetched at once. When you create a cluster connection, you can set a fetch size for it.

Cluster cluster = Cluster.builder()
                .addContactPoint(contactPoint)
                .withPort(8636)
                .withQueryOptions(new QueryOptions().setFetchSize(20))
                .build();

After the setting is successful, for all sessions spawned with this configuration, the configured number of rows is fetched from the server at a time. When the cache (20 rows) is exhausted, the system triggers a request for fetching another 20 rows from the server and there can be a waiting period.

Obtaining the Next Page in Advance

If you need to manually fetch more rows in advance to avoid waiting and save them to the current result set, refer to the following code. When the result set has 10 rows left, submit a parallel request for fetching more rows from the server.

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

Saving and Reusing the Paging State

  1. Save the current paging state.
    PagingState pagingState = resultSet.getExecutionInfo().getPagingState();
    String string = pagingState.toString();
    byte[] bytes = pagingState.toBytes();
  2. Load and reuse the current paging state.
    PagingState pagingState = PagingState.fromString(string);
    Statement st = new SimpleStatement("your query");
    st.setPagingState(pagingState);
    ResultSet rs = session.execute(st);

    Note: The paging state can only be collected, stored, and reused. They cannot be modified or applied to other query statements.

GeminiDB Cassandra API does not support offset queries, which means that you cannot skip any part of the result set and cannot fetch results within the specified index range. If you want to use offset queries, you can emulate them on the client side. You will get all results in order, but you can delete results that you do not need. For more advanced usage and introduction, see DataStax Java Driver 3.11.