SQLite处理来自数据库SWIFT的实数



我有以下代码和数据库,不确定为什么我得到的结果是

private func preLoadData() {

var dbPinch: OpaquePointer?
guard let databasePath = Bundle.main.path(forResource: "Airports", ofType: "db") else {
return
}
sqlite3_open(databasePath, &dbPinch)

let queryStatementString = "SELECT * FROM airports"

func query() {

var queryStatement: OpaquePointer? = nil

if sqlite3_prepare_v2(dbPinch, queryStatementString, -1, &queryStatement, nil) == SQLITE_OK {

do {

while (sqlite3_step(queryStatement) == SQLITE_ROW) {

let queryResultCol4 = sqlite3_column_text(queryStatement, 4)
airportObject.latitude_deg = Float(Int64(Int(bitPattern: queryResultCol4!)))
print("Latitude_Deg: (airportObject.latitude_deg)")
}

try backgroundContext.save()

} catch {
print(error.localizedDescription)
}



} else {
print("Could not executes")

}
sqlite3_finalize(queryStatement)
}
query()
sqlite3_close(dbPinch)
}      

我的数据库是这样的结构,字段latitude_deg是REAL类型。例如,有问题的记录中的数据是-22.81290054

当我打印到控制台时,我得到的是:longitude_Deg:1.40518e+14

关于如何处理SQL返回的实际值的任何想法。我有这个Float类型的填充和对象属性。@NSManaged公共变量latitude_deg:浮动

为任何感兴趣的修复了它

let queryResultCol5 = sqlite3_column_text(queryStatement, 5)
airportObject.longitude_deg = Double(String(cString: queryResultCol5!)) ?? 0
print("longitude_Deg: (String(describing: airportObject.longitude_deg))")

(注意:我不知道swift,也没有任何方法来测试它,但它的Sqlite3 API似乎非常接近C(

我怀疑你应该能够使用:

airportObject.longitude_deg = sqlite3_column_double(queryStatement, 4)

而不是用转换的绳子跳过所有的障碍。

最新更新