【问题标题】:Result set returning nil even there is data in database FMDB Swift即使数据库 FMDB Swift 中有数据,结果集也返回 nil
【发布时间】:2016-11-27 17:11:30
【问题描述】:

您好,我在我的 swift 项目中使用 FMDB。我将我的 sqite 文件复制到文档目录中,它成功了。我可以获取复制到文档目录文件夹中的 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")
    }
 }

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

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 循环,即使我的数据库中有数据,我也没有获取数据。

【问题讨论】:

    标签: ios iphone swift sqlite fmdb


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多