来自使用Swift的SQLite查询的奇怪结果

时间:2015-10-20 14:20:49

标签: ios swift sqlite

我的数据库中有一张表。在该表中,我在一个名为“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不是从数据库中检索长值的正确类型吗?

1 个答案:

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