FMDB SQL查询不返回任何数据

时间:2016-09-21 03:00:19

标签: ios objective-c sqlite fmdb

我正在向我的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&amp; lstartDate都有表中存在的硬编码值,我已经去了Devices,下载容器进行检查以确保这些值出现在SQL db上。

我要做的是返回表格中的所有行,包括表格中的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];

1 个答案:

答案 0 :(得分:1)

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对象(例如NSStringNSNumber等),而不是基本的C数据类型(例如intchar *等。)

因此,在上面的示例中,我已将lstartDatelendDate替换为@(lstartDate)@(lendDate)。这使他们成为NSNumber个对象。