iOS SimpleDB按日期选择

时间:2013-05-10 07:00:22

标签: ios amazon-simpledb

美好的一天,

我正在尝试使用iOS SDK在SimpleDB上选择一个项目。问题是我知道如何做的唯一方法是使用SimpleDBGetAttributesRequest获取项目名称,然后检查日期属性,看它是否与我请求的匹配。

这绝对是一种可怕的方式,因为我必须继续查询整个数据库。有没有简单的方法来检查属性而不是名称,或选择日期的方法?

2 个答案:

答案 0 :(得分:2)

我不是iOS SDK专家,但听起来像SimpleDBSelectRequest对你来说可以使用selectExpression,如:

select * from your_domain where your_date = '1970-01-01'

如果你知道日期,或者:

select * from your_domain where your_date between '1970-01-01' and '1970-01-05'

如果您只知道日期范围。

请记住,SimpleDB会将日期视为字符串,因此请在查询中正确设置日期格式,以便与存储它们的方式相匹配。

-Larry

答案 1 :(得分:0)

我已经用上面的解决方案编写了一段简单的代码

-(void)RunQuery:(NSString*)query{
NSLog(@"Running Query\n");
NSString* selectExpression=query;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    });
    @try {
        //Code start
        SimpleDBSelectRequest *selectRequest = [[SimpleDBSelectRequest alloc] initWithSelectExpression:selectExpression];
        selectRequest.consistentRead = YES;

        SimpleDBSelectResponse *selectResponse = [sdbClient select:selectRequest];

        for (SimpleDBItem *item in selectResponse.items) {
            NSLog(@"%@",item.name);
        }
        //Code end
    }
    @catch (AmazonServiceException *exception) {
        NSLog(@"Exception = %@", exception);
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
    });
});
}