FMDB SQL 查询未返回任何数据

FMDB SQL query not returning any data

我正在向我的 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 都有 table 中存在的硬编码值,我已经转到设备,下载了容器以检查以确保这些值出现在 SQL 数据库中。

我想做的是 return table.

中 lstartDate 和 lendDate 之间的所有行(包括 lstartDate 和 lendDate)

更新: 将 long long 转换为 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

Optional parameters to bind to ? placeholders in the SQL statement. These should be Objective-C objects (e.g. NSString, NSNumber, etc.), not fundamental C data types (e.g. int, char *, etc.).

所以在上面的例子中,我用 @(lstartDate)@(lendDate) 替换了 lstartDatelendDate。这使它们成为 NSNumber 个对象。