我的数据库中有一张表。在该表中,我在一个名为“fechainicio”的列中存储了一个值(它是一个日期,以毫秒为单位):“1424386800000”。
我已经在我的Mac上下载了SQLite浏览器,以实际检查该值是否存储,并且它是正确的,它是。
稍后,在我的代码中,我使用以下方法检索该值:
var fechaInicio:Int64=Int64(results!.intForColumn("fechainicio"))
当我这样做时,我收到的值为“-1542342272”。
为什么检索的值不正确?
我也试过
var fechaInicio:Int64=results!.intForColumn("fechainicio").toIntMax()
和
var fechaInicio=results!.intForColumn("fechainicio")
Int64不是从数据库中检索长值的正确类型吗?
答案 0 :(得分:0)
来自(Objective-)C的int
类型是32位整数类型(并在Swift中映射到Int32
)。这意味着
- (int)intForColumn:(NSString*)columnName;
来自FMDB的方法只能返回32但值。此方法最终调用SQLite函数
int sqlite3_column_int(sqlite3_stmt*, int iCol);
返回值的低32位,没有任何溢出检查。 正确的解决方案是使用
- (long)longForColumn:(NSString*)columnName;
而是在Swift中返回Int64
。