2015-10-20 44 views
0

我在我的數據庫中有一個表。在該表中,我存儲了一個值(以日期爲單位,以毫秒爲單位):「1424386800000」,名爲「fechainicio」。使用Swift的SQLite查詢的奇怪結果

我已經下載了我的Mac中的SQLite瀏覽器,實際檢查值是否存儲,以及它的正確與否。

後來,在我的代碼,我檢索使用這一點,值:

var fechaInicio:Int64=Int64(results!.intForColumn("fechainicio")) 

當我這樣做,我收到值「-1542342272」。

爲什麼值檢索不正確?

我也曾嘗試

var fechaInicio:Int64=results!.intForColumn("fechainicio").toIntMax() 

var fechaInicio=results!.intForColumn("fechainicio") 

是不是INT64正確的類型從數據庫中檢索長期價值?

+0

您需要使用stringForColumn進行提取,然後將此類型轉換爲double。這並不奇怪。 IntForColumn提供10位數值。 –

+0

那麼,Swift中沒有長類型。據我所知,Swift中的Long類型是... Int64 – Fustigador

+1

(Objective-)C中的int類型是Swift中的Int32類型。將1424386800000截斷爲32位給出-1542342272。你應該使用'longForColumn()'(假設這是FMDB)。 –

回答

0

來自(Objective-)C的int類型是一個32位整數類型(並映射到Swift中的Int32)。這意味着來自FMDB的方法只能返回32個值 - 但是這些值只能返回32個值。此方法最終調用SQLite函數

int sqlite3_column_int(sqlite3_stmt*, int iCol); 

它返回值的低32位,沒有任何溢出檢查。 適當解決方案是使用

- (long)longForColumn:(NSString*)columnName; 

代替這夫特返回Int64

+0

偉大而詳細的解釋。感謝您不僅提供解決方案,而且爲什麼失敗。 – Fustigador