我有以下代码和数据库,不确定为什么我得到的结果是
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)
而不是用转换的绳子跳过所有的障碍。