ios - FMDB SQL 查询不返回任何数据

标签 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 和 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.).

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

关于ios - FMDB SQL 查询不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39606831/

相关文章:

ios - 按下按钮时应用程序崩溃

ios - 如何创建一个自定义 UIView,根据 Objective-C 中的滚动方向从 UINavBar 后面向下或向上滑动?

ios - 以编程方式向 UITextField 添加约束

python - django 中用户表的外键

ios - 核心图 : How to add a plotting point to CurvedScatterPlot?

ios - 如何用另一个 NSTimer 来停止 NSTimer?

objective-c - 使用 UIPinchGestureRecognizer 缩放整个屏幕

objective-c - 不活跃? @"inactive": @"active" syntax?

java - 什么时候必须关闭数据库?

apache-flex - 尝试将数据库附加到当前打开的数据库,但我收到一条错误消息,提示 ATTACH is not allowed from SQL