我正在向我的 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 都有表中存在的硬编码值,我已经转到设备,下载了容器以检查以确保这些值出现在 SQL 数据库中。
我想做的是返回表中 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
替换为 @(lstartDate)
和 @(lendDate)
。这使它们成为 NSNumber
对象。
关于ios - FMDB SQL 查询不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606831/