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)
替换了 lstartDate
和 lendDate
。这使它们成为 NSNumber
个对象。
我正在向我的 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)
替换了 lstartDate
和 lendDate
。这使它们成为 NSNumber
个对象。