Подтвердить что ты не робот

Вопрос FMDB SQLite: количество строк в запросе?

Кто-нибудь знает, как вернуть счетчик запросов при использовании FMDB? Если я executeQuery @ "select count (*) from sometable, были..." Я возвращаю пустой FMResultSet. Как я могу получить количество строк запроса? Нужно ли делать запрос типа "select * from sometable where.." и повторять набор результатов? Или я могу использовать useCount или как наилучшим образом (с точки зрения производительности) сделать это?

Спасибо!

4b9b3361

Ответ 1

Более короткий код, чтобы выполнить одно и то же:

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

Обязательно включите заголовочный файл FMDatabaseAdditions.h, чтобы использовать intForQuery:.

Ответ 2

попробуйте это. Меня устраивает. Итерация всех записей не рекомендуется.

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

Возможно, вам стоит проверить предложение Where.

Ответ 3

Пример Swift 2

Этот фрагмент кода напечатает счетчик для вас.

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) Вы изменили TABLE_NAME в инструкции Select на то, что вы вызываете в вашей таблице?

Ответ 4

Первый тоже прав, но с помощью этого метода вы можете извлекать записи и подсчитывать, используя один и тот же запрос, без головной боли, чтобы написать еще один. Просто добавьте count (*) в качестве счетчика к вашему запросу.

Вы всегда можете просто запустить правильную инструкцию SQL. Я делаю что-то вроде:

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

wordsThatExist = [rs intForColumn:@"count"];

Настройка SQL-запроса может быть быстрее и дешевле, чем повторение. Я считаю, что подсчеты дешевы.

Ответ 5

обновлено для 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"))
    }
}

Ответ 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 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"))
    }
}

Ответ 8

Если вы хотите узнать количество строк перед тем, как сделать что-то с результатом, вы даже можете сделать простой запрос и запросить результат columnCount, который даст вам количество строк, и вы можете сохранить один запрос, если вы действительно хотите сделать что-то с resultSet

FMResultSet *results = [database executeQuery:@"SELECT * from tableName"];
int numberOfRows = [results columnCount];

while ([results next]){
... do your stuff ...
}