2013-08-02 89 views
0

我正在编写Azure Java SDK的分页逻辑。显而易见的想法是存储上次检索到的行的RowKey,并在下次查询时使用它。但是对于遍历分区的查询,我需要从响应头中检索x-ms-continuation-NextPartitionKey和x-ms-continuation-NextRowKey延续标记。我已经看到了C#示例(http://msdn.microsoft.com/en-us/library/dd135718.aspx),但我无法找到与Java相同的示例。使用Java SDK的Azure表查询连续令牌

如何使用Azure Java-SDK获得这些继续令牌?我使用CloudTableClient.execute得到TableResult,像

TableQuery<DynamicTableEntity> myQuery = TableQuery 
        .from("test", DynamicTableEntity.class) 
        .where(where_condition).take(size); 
CloudTableClient client = Table.getInstance().getConnection(); 
Iterator<DynamicTableEntity> rows = client.execute(query).iterator(); 

回答

1

您没有看到持续的原因是,你通过它处理延续你的迭代执行查询。如果使用ExecuteQuerySegmented方法,您将收到一个ResultSegment对象,其中包含结果段和continuationtoken。

如果您只是需要访问头文件,您可以使用OperationContext中的getResponseReceivedEventHandler,这将使您可以访问发送到服务的每个请求的HTTPUrlConnection。

例如:

OperationContext opContext = new OperationContext(); 
opContext.getResponseReceivedEventHandler().addListener(new StorageEvent<ResponseReceivedEvent>() { 

     @Override 
     public void eventOccurred(ResponseReceivedEvent eventArg) { 
      HttpURLConnection conn = (HttpURLConnection) eventArg.getConnectionObject(); 

      // Access headers here 
     } 
    }); 

Iterator<DynamicTableEntity> rows = client.execute(query, null /* requestOptions */, opContext).iterator(); 
... 

+0

由于一吨,我觉得分段查询是要走的路。 – rjha94

相关问题