Swift FMResultSet nil /获取行数

时间:2016-05-24 09:31:20

标签: swift sqlite fmdb

我正在开发一个从互联网上提取数据的应用程序,并且在没有连接的情况下,有一个本地数据库来存储这些数据。

我能够很好地存储和提取数据库中的数据,但我似乎无法获得数据库中项目的计数。

这是我的代码:

func getCount(tableName:String) -> Int {
    let sql = "SELECT COUNT(id) FROM " + tableName
    print(sql) // <---- prints out the complete SQL, works fine
    let resultSet: FMResultSet! = sharedInstance.database!.executeQuery(sql, withArgumentsInArray: nil)
    var count = 0
    if resultSet != nil {
        print("Database not empty")
        while resultSet.next() {
            count += 1
        }
        return count
    } else {
        return 0
    }
}

问题

不幸的是,即使我的getCount功能似乎无法正常工作,因为它始终会返回0.它甚至不会超过if resultSet != nil部分。

是的,数据库表中至少有一个项目,并且在SQLiteBrowser中手动放入该查询会得到我的结果。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

你做错了就是忽视错误处理。

查看你的代码:你的函数返回0的代码路径是什么?

有两个:

  1. 有一个resultSet,resultSet.next()方法返回nil(表示没有行)
  2. 没有resultSet(表示数据库错误)。
  3. 由于SELECT COUNT(id)语句不能返回任何行,这意味着您有数据库错误。

    既然你忽略了它(通过返回0)你就不知道会发生什么,而且在堆栈溢出时,你是无能为力的。

    简而言之:处理错误。