从GAE数据存储区检索游标

时间:2015-01-11 12:24:16

标签: java google-app-engine google-cloud-datastore

我对数据存储如何生成游标有疑问,我在下面有这个代码,即使结果列表为空,仍然会返回游标:

    if(asList){
        if(startCursor != null && startCursor.getWebSafeString() != null){
            fetchOptions.startCursor(Cursor.fromWebSafeString(startCursor.getWebSafeString()));
            res = pq.asQueryResultList(fetchOptions);
        } else if(startCursor != null && startCursor.getWebSafeString() == null) {
            res = pq.asQueryResultList(fetchOptions);
        } else {
            res = pq.asList(fetchOptions);
        }
    } else {
        if(startCursor != null && startCursor.getWebSafeString() != null){
            fetchOptions.startCursor(Cursor.fromWebSafeString(startCursor.getWebSafeString()));
            res = pq.asQueryResultIterable(fetchOptions);
        } else if(startCursor != null && startCursor.getWebSafeString() == null){
            res = pq.asQueryResultIterable(fetchOptions);
        } else {
            res = pq.asIterator(fetchOptions);
        }
    }
    return res;

res这是一个查询结果:

String newCursor = res.getCursor().toWebSafeString();

即使res列表为空,也会返回游标,这是正常的吗?或者这有什么问题?

2 个答案:

答案 0 :(得分:1)

您总是会得到一个游标,因为数据存储区不知道或不关心是否还有其他结果。你应该做的是检查光标实际返回的内容,如果没有,则不显示链接以获得更多结果。

答案 1 :(得分:0)

拥有这些"最后位置"游标对于逐步处理新数据非常有用。

同样,如果您将光标保留在某处,您可以经常轮询数据存储区以获取新记录 - 而且它很便宜,因为游标意味着数据存储区不会扫描行。