我正在向我的FMDB发出如下请求
long long lstartDate = 1467331200000;
long long lendDate = 1468108800000;
[_queue inDatabase:^(FMDatabase *database) {
FMResultSet * result = [database executeQuery:@"SELECT * FROM dayEPOCTable WHERE date >= '?' AND date <= '?' ", lstartDate, lendDate];
但是,查询完成后,结果中没有任何可用的项目。
lendDate和lstartDate都具有表中存在的硬编码值,我去了Devices,下载了容器以检查以确保这些值出现在SQL db上。
我想做的是返回表中lstartDate和lendDate之间的所有行,包括lstartDate和lendDate。
更新:
长时间对NSNumber进行投射有效。更新后的代码如下
NSNumber *lstartDate = [NSNumber numberWithLongLong:1467331200000];
NSNumber *lendDate = [NSNumber numberWithLongLong:1468108800000];
[_queue inDatabase:^(FMDatabase *database) {
FMResultSet * result = [database executeQuery:@"SELECT * FROM dayEPOCTable WHERE date >= '?' AND date <= '?' ", lstartDate, lendDate];
最佳答案
是result == nil
吗?如果是这样,则意味着存在错误,您可以查看[database lastErrorMessage]
以查看错误是什么。
但是,一个错误跳出了我的脑海:在SQL中使用?
占位符时,不应使用引号。因此,删除那些:
FMResultSet * result = [database executeQuery:@"SELECT * FROM dayEPOCTable WHERE date >= ? AND date <= ?", @(lstartDate), @(lendDate)];
NSAssert(result, @"executeQuery error: %@", [database lastErrorMessage]);
当然,可能还有很多其他可能的问题根源,但这就是我要开始的地方,即消除引号并检查
executeQuery
是否成功,以及是否失败检索SQLite错误消息。请注意,关于为
executeQuery
占位符提供的可变参数,作为 ?
documentation says:绑定到SQL语句中
?
占位符的可选参数。这些应该是Objective-C对象(例如NSString
,NSNumber
等),而不是基本的C数据类型(例如int
,char *
等)。因此,在上面的示例中,我将
lstartDate
和lendDate
替换为@(lstartDate)
和@(lendDate)
。这使它们成为NSNumber
对象。