【问题标题】:Swift: Get number of rows in result setSwift:获取结果集中的行数
【发布时间】:2019-08-20 07:43:53
【问题描述】:

我想获取结果集中的行数。我正在使用 FMDB 进行数据库操作。还有一个函数hasAnotherRow(),但它每次都返回true。下面是我的代码。

let selectQuery = "SELECT * FROM \(tableName) WHERE chrSync = 'Y'"
if let rs = database.executeQuery(selectQuery, withArgumentsIn: [])
{

    // Here I want to check if rs has more than 0 rows

    while(rs.next()){
        let dir = rs.resultDictionary                 
        let json = JSON(dir)
        data.append(json)

        print("Has another: \(rs.hasAnotherRow())") // It always returns true   
    }
    let json = JSON(data)
    return json
}

我是IOS新手,如果有答案请分享给我。

谢谢。

【问题讨论】:

  • @Anbu.Karthik,我不想只从查询中计数。我想要带有数据的结果集的大小。
  • 很多时候你不能得到计数,因为这本身就是一个查询,也因为结果集可能没有所有行(出于内存原因)并且每次都从数据库中获取下一行你打电话给next(),因此它不知道。我不知道 fmdb 以及它如何实现结果集处理,但很可能您需要手动计算行数。
  • @JoakimDanielson,感谢您提供信息。

标签: ios swift sqlite fmdb


【解决方案1】:

我认为这是关键(https://github.com/aws-amplify/aws-sdk-ios/tree/master/AWSCore/FMDB):

在尝试访问之前,您必须始终调用 -[FMResultSet next] 查询中返回的值,即使您只期望一个:

FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
if ([s next]) {
    int totalCount = [s intForColumnIndex:0];
}

斯威夫特

var s: FMResultSet? = db.executeQuery("SELECT COUNT(*) FROM myTable", withArgumentsIn: nil)
if s?.next() != nil {
    var totalCount: Int? = s?.int(forColumnIndex: 0)
}

它可以用于任何 SELECT,如果选择返回行,则 totalCount 的最后一个值将包含 FMResultSet 中的行数。

【讨论】:

  • 我使用的是swift语言。
  • @SagarZala 您是否更改了上述代码中的 selectQuery
  • @NikunjKumbhani,我不想只从查询中计数。我想要带有数据的结果集的大小。喜欢 JSON.count
  • 尝试 if database.open() { your code } 只是为了检查您的数据库是否打开。
  • 错误:“FMDatabase”类型的值没有成员“执行”
猜你喜欢
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2019-07-20
  • 2014-11-03
  • 2013-08-09
相关资源
最近更新 更多