Iphone 执行带有NSDate的FMDB查询,但不生效

Iphone 执行带有NSDate的FMDB查询,但不生效,iphone,nsdate,fmdb,Iphone,Nsdate,Fmdb,我通过FMDB执行的任何包含NSDates的查询都会执行,但不会返回结果集或对数据库进行编辑。我在ios 4.3模拟器中工作。其他没有规定日期的查询将正确执行。以下是我使用的代码练习: NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"yyyy-MM-dd hh-mm-ss"]; NSDate *start = [dateFormatter dateFro

我通过FMDB执行的任何包含NSDates的查询都会执行,但不会返回结果集或对数据库进行编辑。我在ios 4.3模拟器中工作。其他没有规定日期的查询将正确执行。以下是我使用的代码练习:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh-mm-ss"];

NSDate *start = [dateFormatter dateFromString:@"2011-07-18 06:40:21" ];
NSDate *end = [dateFormatter dateFromString:@"2011-07-18 06:41:19"];

[dateFormatter release];

FMDatabase* db = [FMDatabase databaseWithPath:appDelegate.databasePath];
if (![db open]) {
NSLog(@"Could not open db.");
}

[db beginTransaction];
[db executeUpdate:@"delete from time_stamp_table where time_stamp >= ? 
and time_stamp <= ?",start,end];

NSLog(@"Err %d: %@", [db lastErrorCode], [db lastErrorMessage]);
[db commit];
[db close];
当我在命令行的sqlite3中使用存储在模拟应用程序上下文中的数据库进行这些查询时,它们就工作了。是否有一些特殊的准备工作,用于通过NSDate与FMDB进行查询,但我没有

类查询

 SELECT *  from Time_Stamp where updatedTime >= DATE('2011-05-17 06:40:21') AND updatedTime <= DATE('2011-07-19 06:40:21')
SELECT*from Time\u Stamp,其中updatetime>=DATE('2011-05-17 06:40:21')和updatetime

 SELECT *  from Time_Stamp where updatedTime >= DATE('2011-05-17 06:40:21') AND updatedTime <= DATE('2011-07-19 06:40:21')

SELECT*from Time\u Stamp,其中updatetime>=DATE('2011-05-17 06:40:21')和updatetime尽量避免将NSDate解析为SQL查询。而是尝试用sqlite可能理解的格式解析NSString:“2011-07-18 06:41:19”。
如果希望sqlite比较这些值,则必须使用特定的日期函数。Sqlite3为您提供了转换字符串的函数

其次,为了纠正Rahul Sharma的错误,使用DATE函数比较时间戳将失败,因为时间戳同时保存日期和时间。因此,应该使用DATETIME函数

[db executeUpdate:@"delete from time_stamp_table where time_stamp >= DATETIME(?) 
                                                   and time_stamp <= DATETIME(?);",
                    @"2011-07-18 06:40:21",
                    @"2011-07-18 06:41:19"]; 
[db executeUpdate:@“从时间戳表中删除,其中时间戳>=DATETIME(?)

时间戳尽量避免将NSDate解析为SQL查询,而是尝试用sqlite可能理解的格式解析NSString:“2011-07-18 06:41:19”。 如果希望sqlite比较值,则必须使用特定的日期函数。sqlite 3提供转换字符串的函数

其次,为了纠正Rahul Sharma的错误,使用DATE函数比较时间戳将失败,因为时间戳同时保存日期和时间。因此,应该使用DATETIME函数

[db executeUpdate:@"delete from time_stamp_table where time_stamp >= DATETIME(?) 
                                                   and time_stamp <= DATETIME(?);",
                    @"2011-07-18 06:40:21",
                    @"2011-07-18 06:41:19"]; 
[db executeUpdate:@“从时间戳表中删除,其中时间戳>=DATETIME(?)

时间戳可能是您使用了
executeQuery
方法。删除操作属于更新操作。起初,我使用了
executeQuery
,但即使反复检查属性类型也找不到问题。最后
executeUpdate
修复了它。

可能是您使用了
executeQuery
方法。删除操作属于更新操作。起初,我使用了
executeQuery
,但即使反复检查属性类型也找不到问题。最后
executeUpdate
将其修复。

-1不,不起作用。FMDB不会这样做。另外,建议使用
+stringWithFormat:
也是不正确的ng.FMDB还有其他方法(比如
executeQueryWithFormat:
)这就是你想要的。我补充说我还没有测试过这些。如果你有一个工作方法,请与我们分享。-1不,不会工作。FMDB不会那样做。另外,建议使用
+stringWithFormat:
是错误的。FMDB还有其他方法(比如
executeyWithFormat:
)这就是你想要的。我补充说我还没有测试过这些。不过如果你有一个工作方法。请与我们大家分享。
[db executeUpdate:@"delete from time_stamp_table where time_stamp >= DATETIME(?) 
                                                   and time_stamp <= DATETIME(?);",
                    @"2011-07-18 06:40:21",
                    @"2011-07-18 06:41:19"];