sql - 选择sqlite(Swift)中的count(col_name)不起作用

标签 sql swift sqlite

我正在使用sqlite包装器here访问Swift中的sqlite数据库。

我基于包装程序编写了此代码,以对表中的项目进行计数。

public func numberOfRows() -> Int {

        let cmd = """
        SELECT count(*) from  \(self.tableName)
        """

        do{

            let db = DatabaseUtils.getInstance().getConnection()


            let stmt = try db.prepare( cmd )


            if try stmt.step() == .row {
                return Int(from: stmt,index:  1) ?? -1
            }

            return -1

        }catch {
            Log.out("Error occurred while fetching count data in \(tableName)")
            return -1
        }

    }


但是当逻辑未找到计数时,它会继续返回-1,如逻辑所示。

到目前为止,其他所有功能都可以正常工作;创建表,插入,批处理插入。

select count(col_name) from table_name where some_col = "?"也可以。

题:

我该如何补救才能工作

  SELECT count(*) from  table_name?

最佳答案

返回值时的列号(例如sqlite3_column_xxx的结果)从零开始。当您要表示列1时,您正在尝试检索列0



顺便说一句,如果要检测无效索引,可以删除该nil合并运算符。例如,而不是:

if try stmt.step() == .row {
    return Int(from: stmt,index:  1) ?? -1
}


相反,您可以检查是否不仅step成功,而且Int(from:index:)返回了非nil值:

if try stmt.step() == .row {
    if let count = Int(from: stmt, index: 1) {
        return count
    } else {
        // do whatever you want when it fails, e.g.

        fatalError("no value returned; invalid column index?")
    }
}


或更简洁地说:

if try stmt.step() == .row, let count = Int(from: stmt, index: 1) {
    return count
} else {
    fatalError("no value returned; invalid column index?")
}


这会使您认识到您需要从0开始的索引:

if try stmt.step() == .row, let count = Int(from: stmt, index: 0) {
    return count
} else {
    fatalError("no value returned; invalid column index?")
}

关于sql - 选择sqlite(Swift)中的count(col_name)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59118229/

相关文章:

ios - 删除行后如何重置 Sqlite id 值?

mysql - 插入自定义自增字段

ios - __ swift 中的 block

ios - iPhone 来电时如何截屏

swift - 如何让这段代码秒到秒倒计时?

android - SQLiteStatements 需要关闭吗?

mysql - 具有连接和多个分组依据的 SQL 查询

c# - 通过 ODBC 查询系统间缓存

sql - MSSQL - 授予除一个表之外的所有表的选择权限

android - Android 的通用图像加载器可以处理来自 sqlite 数据库的图像吗?