fmdb插入日期给出“无效日期”

时间:2012-03-25 14:54:17

标签: objective-c ios fmdb

我正在尝试在我最新的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];

数据库已填充,一切正常,但*#%除外!约会...... :) 有什么问题?

2 个答案:

答案 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)。