2010-10-01 4 views
22

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

Спасибо!

ответ

87

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

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

Убедитесь, чтобы включить в него FMDatabaseAdditions.h header file использовать intForQuery:.

+0

Спасибо, что работает также, круто :-) – Fuggly

+0

+1 голос за вас einsteinx2 за короткую и более сладкую версию. – palaniraja

+0

Спасибо большое! : D – Stormer

18

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

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

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

+0

идеально! Благодаря! – Fuggly

+0

Great :) отлично работает –

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 ... 
} 
+2

Doesn 't columnCount дает вам количество столбцов, а не строк? Я не верю, что это правильный ответ. –

4

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")) 
    } 
} 

Если это не сработало, несколько предложений:

а) Посмотрите на строку в вашем проекте, который говорит let database = или var database =. Если вы найдете его, то измените db на database
b) Вы изменили TABLE_NAME в инструкции Select ко всему, что вызвала ваша таблица?

0

Пожалуйста, попробуйте следующий код, это работает для меня

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) 

вы получите Граф поля

0

обновленные для Swift 3 незначительных изменений в "междунар для столбца"

if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsInArray: nil) { 
while rs.next() { 
    print("Total Records:", rs.int(forColumn: "Count")) 
    } 
} 
Смежные вопросы