我正在尝试在我最新的ios项目中使用fmdb,到目前为止效果很好。但现在我正在尝试使用NSDate作为参数进行插入,并最终在我的sqlite数据库中存储为无效日期。 我尝试了多种解决方案,但似乎没有任何效果。我做错了什么?
[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 :(得分:6)
SQLite doesn't have a date format,以便FMDB期望将日期字段存储为浮点数/实数:
else if ([obj isKindOfClass:[NSDate class]]) {
sqlite3_bind_double(pStmt, idx, [obj timeIntervalSince1970]);
}
因此,请尝试使用该格式制作表格。
答案 1 :(得分: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,这是一个double( https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html)。