我的数据库中有一个表。在该表中,我在名为“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 不是从数据库检索长值的正确类型吗?
最佳答案
(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
。
关于ios - 使用 Swift 进行 SQLite 查询的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239234/