【问题标题】:FMDB SQLite question: row count of a query?FMDB SQLite 问题:查询的行数?
【发布时间】:2011-04-19 17:53:22
【问题描述】:

有谁知道在使用 FMDB 时如何返回查询的计数?如果我执行Query @"select count(*) from sometable are..." 我会得到一个空的 FMResultSet。如何获取查询的行数?我是否需要执行类似“select * from sometable where..”之类的查询并遍历结果集?或者我可以使用 useCount 还是最好的方法(就性能而言)来做到这一点?

谢谢!

【问题讨论】:

    标签: iphone objective-c sqlite fmdb


    【解决方案1】:

    试试这个。这个对我有用。不建议迭代所有记录。

    FMResultSet *rs = [db executeQuery:@"select count(FIELD) as cnt from TABLENAME"];
    while ([rs next]) {
        NSLog(@"Total Records :%d", [rs intForColumn:@"cnt"]);
    }
    

    也许你应该检查你的 Where 子句。

    【讨论】:

      【解决方案2】:

      更短的代码来完成同样的事情:

      NSUInteger count = [db intForQuery:@"SELECT COUNT(field) FROM table_name"];

      确保包含FMDatabaseAdditions.h header file 以使用intForQuery:

      【讨论】:

      • 有类似“intForQueryWithFormat”的东西吗?
      • intForQuery 的常规实现已经采用了变量参数列表。只需将问号放在您想要使用变量的位置,然后将它们放在调用的末尾,如下所示:NSUInteger count = [db intForQuery:@"SELECT COUNT(?) FROM ?", fieldName, tableName];
      【解决方案3】:

      第一个也是对的,但是通过使用这种方法,您可以使用相同的查询检索记录和计数,编写另一个不头疼。只需将 count(*) 作为计数添加到您的查询中即可。

      您总是可以只运行正确的 SQL 语句。我会这样做:

      FMResultSet *rs = [database executeQuery:@"select count(*) as count from words"];
      [rs next];
      
      wordsThatExist = [rs intForColumn:@"count"];
      

      设置 SQL 查询可能比迭代更快、更便宜。我相信计数很便宜。

      【讨论】:

        【解决方案4】:

        如果您想在对结果进行操作之前知道行数,您甚至可以执行一个简单的查询并询问结果 columnCount 为您提供行数,如果您真的需要,您可以保存一个查询用 resultSet 做点​​什么

        FMResultSet *results = [database executeQuery:@"SELECT * from tableName"];
        int numberOfRows = [results columnCount];
        
        while ([results next]){
        ... do your stuff ...
        }
        

        【讨论】:

        • 不是 columnCount 给你列数而不是行数吗?我不相信这是一个正确的答案。
        【解决方案5】:

        Swift 2 示例

        此代码 sn-p 将为您打印计数。

        if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsInArray: nil) {
            while rs.next() {
                print("Total Records:", rs.intForColumn("Count"))
            }
        }
        

        如果不行,给点建议:

        a) 在您的项目中查找写有let database =var database = 的行。如果您找到了,请将 db 更改为 database
        b) 您是否将 Select 语句中的 TABLE_NAME 更改为您的表的名称?

        【讨论】:

          【解决方案6】:

          请尝试以下代码,这对我有用

          let objManager = ModelManager.getInstance()
          
          objManager.database?.open()
          
          let resultSet1: FMResultSet! = sharedInstance.database!.executeQuery("SELECT COUNT(Field) FROM TableName”, withArgumentsInArray:nil)
          
                  if (resultSet1 != nil)
                  {
                      while resultSet1.next()
                      {
                        countRecord = Int(resultSet1.intForColumn("COUNT(Field)"))
                      }
          
                  }
          
               print(countRecord)
          

          您将获得字段计数

          【讨论】:

            【解决方案7】:

            为 Swift 3 更新对“int For Column”的细微更改

            if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsInArray: nil) {
            while rs.next() {
                print("Total Records:", rs.int(forColumn: "Count"))
                }
            }
            

            【讨论】:

              【解决方案8】:

              为 Swift 4 更新方法参数名称的微小变化

              if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsIn: nil) {
              while rs.next() {
                  print("Total Records:", rs.int(forColumn: "Count"))
                  }
              }
              

              【讨论】:

                猜你喜欢
                • 2011-10-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-12-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多