2012-03-25 62 views
0

我正在尝试在我最新的ios项目中使用fmdb,并且迄今为止效果很好。但现在我试图插入一个NSDate作为参数,它最终被存储为我的sqlite数据库中的无效日期。 我尝试了多种解决方案,但似乎没有任何工作。我究竟做错了什么?fmdb插入日期给出“无效日期”

[database executeUpdate:@"CREATE TABLE IF NOT EXISTS inspection (ID INTEGER PRIMARY KEY, result TEXT, date_of_inspection DATE, restaurant_id INTEGER"]; 

NSDate *today=[NSDate date]; 
[database executeUpdate:@"insert into inspection(id,result,date_of_inspection,restaurant_id) values(?,?,?,?)",[inspection valueForKey:@"id"], result, today, [restaurant valueForKey:@"id"],nil]; 

数据库被填充,一切工作正常,除了*#%!日期... :) 有什么不对?

+0

你是什么意思的“没有什么似乎工作”?请具体说明日期存储的内容。 – 2012-03-25 15:07:46

回答

6

SQLite doesn't have a date format,这样FMDB预计日期字段存储为花车/实数:

else if ([obj isKindOfClass:[NSDate class]]) { 
    sqlite3_bind_double(pStmt, idx, [obj timeIntervalSince1970]); 
} 

所以请尝试将表与该格式。

0

试试这个:

[database executeUpdate:@"CREATE TABLE IF NOT EXISTS inspection(ID INTEGER PRIMARY KEY, result TEXT, date_of_inspection REAL, restaurant_id INTEGER"]; 

NSDate *today=[NSDate date]; 
[database executeUpdate:@"insert into inspection(id,result,date_of_inspection,restaurant_id) values(?,?,?,?)",[inspection valueForKey:@"id"], result, [today timeIntervalSince1970], [restaurant valueForKey:@"id"],nil]; 

SQLite不支持DATE数据类型(http://www.sqlite.org/datatype3.html)。 您必须将其存储为REAL数据类型。 timeIntervalSince1970返回数据类型NSTimeInterval,它是双精度型( https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html)。