即使数据库FMDB Swift中有数据,结果集也会返回nil

时间:2016-07-24 06:44:32

标签: ios iphone swift sqlite fmdb

你好我在我的swift项目中使用FMDB。我将sqite文件复制到文档目录中并成功。我可以将sqlite文件复制到文件目录文件夹中。 我将数据插入到数据库中:

K$1

它成功插入数据我可以使用sqlite manager(Firefox Add-One插件)在sqlite文件中查看数据。 现在我想使用以下代码从我的表中获取所有数据:

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")
    }
 }

问题是我要进入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() } 语句,但我不打算循环播放,即使数据库中有数据,我也无法获取数据。

1 个答案:

答案 0 :(得分:1)

每次调用next()都会消耗一行。如果你的表包含一行,你的while循环将看不到它,因为if语句使用它。

所以用if results?.next() == true {替换if let results = results {。这甚至可以将print("results nil")行转换为准确的行。

将现有的Objective-C代码移植到Swift后,请考虑使用真正的Swift SQLite库:它们将结果集公开为常规集合,以Swift方式处理错误,并且更易于使用。请参阅示例https://github.com/groue/GRDB.swift#fetching-rows