Swift: получить количество строк в наборе результатов - PullRequest
0 голосов
/ 29 марта 2019

Я хочу получить количество строк в наборе результатов. Я использую 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 ]

1 голос
/ 29 марта 2019

я думаю вот ключ (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];
}

Swift

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.

0 голосов
/ 15 июня 2019
FMResultSet *resultSet = [db executeQuery:@"SELECT COUNT(*) FROM myTable"];
int numRows = 0;
if ([resultSet next]) {
    numRows = [resultSet intForColumn:@"COUNT(*)"];
}

Приведенный выше фрагмент даст вам один столбец с именем "COUNT (*)" в результате.[ResultSet next] будет перебирать все строки в результате запроса (в данном случае это 1 строка).Так что это также может быть использовано для получения количества строк.

...