Swift:获取结果集中的行数

时间:2019-03-29 11:12:32

标签: ios swift sqlite fmdb

我想获取结果集中的行数。我正在使用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的新手,如果已回答,请分享给我。

谢谢。

2 个答案:

答案 0 :(得分: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中的行数。

答案 1 :(得分:0)

FMResultSet *resultSet = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
int numRows = 0;
if ([resultSet next]) {
    numRows = [resultSet intForColumn:@"COUNT(*)"];
}

以上代码段将为您提供一个名为“ COUNT(*)”的列。 [resultSet next]将遍历查询结果中的所有行(本例中为1行)。因此,这也可以用于获取行数。