我正在使用FMDB作爲將SQLite數據庫集成到我的XCode項目中的一種方法。我一直在關注這個問題this tutorial,而且大部分情況都非常好。創建一個表格並將對象插入表格一直很簡單。但是,當嘗試將查詢結果從db保存到應用程序中的變量時,我遇到了一些問題。下面是我用這個希望的過程(包括結構的變量的類型)代碼:無法從bool轉換爲FMResult爲SQL查詢結果設置?
struct pulledMessage{
var userIDs: String
var userNames: String
var message: String
var sender: String
var messageNumber: Int
}
func loadMessageData() -> [pulledMessage]!{
var messagesPulled: [pulledMessage]!
if openDatabase(){//correctly opens the database
let query = "select * from messages order by messageNumber asc"
do{
print(database)
let results: FMResultSet = try database.executeStatements(query)
//^statement above causes error
//The type FMResultSet is not usable for some reason
while results.next(){
let message = pulledMessage(userIDs: String(results.string(forColumn: "userIDs")), userNames: String(results.string(forColumn: "userNames")), message: String(results.string(forColumn: "message")), sender: String(results.string(forColumn: "sender")), messageNumber: Int(results.string(forColumn: "messageNumber")))
if messagesPulled == nil{
messagesPulled = [pulledMessage]()
}
messagesPulled.append(contentsOf: message)
}
}
catch{
print(error.localizedDescription)
}
database.close()
}
return messagesPulled
}
現在,我目前運行到這個問題並不一定是邏輯流爲主。我可以理解這個過程以及這些命令正在嘗試做什麼。這個問題相當於let results = try database.executeStatements(query)
。該行是上述數據庫中找到的行的近似直接副本,但它是results.next()
行和let messages = pulledMessage(...)
中的錯誤原因。 .executeStatements
表示結果的類型爲bool
。 .next()
不能在類型bool
上調用,我也不能做results.string
或其他。雖然我理解這個問題,但我不知道如何修改它。由於.executeStatements
將返回bool
,而不是select * from messages
SQL命令的實際結果,因此如何將results
設置爲本教程似乎預期的任何類型/對象?
編輯:我想將查詢結果設置爲FMResultSet
,這樣我就可以使用.next()
並將我的變量分配給某些結果的屬性。然而,我試圖這樣做的方法(可以在我發佈的代碼中查看)設置爲:let results: FMResultSet = try database.executeStatments()
。但是,這給了我一個錯誤,我無法將bool轉換爲FMResultSet,所以我卡住了?
你要打電話讓結果:FMResultSet =嘗試database.executeQuery(查詢,值:無),而不是讓結果:FMResultSet =嘗試database.executeStatments(),因爲的executeQuery( )返回FMResultSet而executeStatments()返回布爾 –