2016-07-24 32 views
0

你好,我正在使用FMDB到我的swift項目。我將我的sqite文件複製到文檔目錄併成功。我可以得到複製到文檔目錄文件夾中的sqlite文件。 我將數據插入到數據庫,因爲這:結果集返回零甚至有數據庫中的數據FMDB Swift

if db.open() { 
    let InsertQry = "insert into profiles (image_url, name,dob,gender) values ('\(imgName)','\(nameTxt.text!)','\(dobTxt.text!)','\(genderTxt.text!)')" 
    print("query= \(InsertQry)") 
    let result = db.executeUpdate(InsertQry, withArgumentsInArray: nil) 
    if !result { 
     print(db.lastErrorMessage()) 
    } 
    else 
    { 
     print("Success") 
    } 
} 

,並將其插入數據成功,我可以看到在使用SQLite經理源碼文件數據(Firefox附加一個插件)。 現在我想用這個代碼從我的表中的所有數據:

if db.open() { 
    let querySQL = "SELECT * FROM profiles" 

    let results:FMResultSet? = self.db.executeQuery(querySQL,withArgumentsInArray: nil) 
    if results?.next() == true { 
     self.userProfilesArray = NSMutableArray() 
     while results!.next() { 
      let profileInfo = NSMutableDictionary() 
      profileInfo.setObject(results!.stringForColumn("image_url"), forKey: "image_url") 
      profileInfo.setObject(results!.stringForColumn("name"), forKey: "name") 
      profileInfo.setObject(results!.stringForColumn("dob"), forKey: "dob") 
      profileInfo.setObject(results!.stringForColumn("gender"), forKey: "gender") 
      self.userProfilesArray.addObject(profileInfo) 
     } 
    } else { 
     print("results nil") 
     } 
    db.close() 
} 

問題是我進入if results?.next() == true聲明,但我不打算while循環,我沒有得到數據,即使有數據在我DATABSE。

回答

1

每次調用next()都會佔用一行。如果你的表包含一行,你的while循環將不會看到它,因爲if語句會消耗它。

因此,用if let results = results {代替if results?.next() == true {。這甚至會將print("results nil")行變成準確的行。

將現有的Objective-C代碼移植到Swift之後,考慮使用真正的Swift SQLite庫:它們將結果集作爲常規集合公開,以Swift方式處理錯誤,並且更易於使用。參見例如https://github.com/groue/GRDB.swift#fetching-rows