web-dev-qa-db-ja.com

FMDB SQLiteの質問:クエリの行数?

fMDBを使用するときにクエリのカウントを返す方法を知っている人はいますか? Query @ "select count(*)from sometable was ..."を実行すると、空のFMResultSetが返されます。クエリの行数を取得するにはどうすればよいですか? 「select * from sometable where ..」のようなクエリを実行して、結果セットを反復処理する必要がありますか?または、useCountを使用できますか、またはこれを行うための最良の方法(パフォーマンスの観点から)は何ですか?

ありがとう!

23
Fuggly

同じことを達成するためのより短いコード:

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

必ず FMDatabaseAdditions.hヘッダーファイル 使用するにはintForQuery:

88
Ben Baron

これを試して。わたしにはできる。すべてのレコードを繰り返すことはお勧めしません。

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

Where句を確認する必要があるかもしれません。

21
palaniraja

スイフト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 =を示すプロジェクト内の行を探します。見つかった場合は、dbdatabaseに変更します
b)SelectステートメントのTABLE_NAMEを、テーブルと呼ばれるものに変更しましたか?

5
rvg

最初のものも正しいですが、この方法を使用すると、同じクエリを使用してレコードを取得してカウントでき、別のクエリを作成するのに苦労することはありません。 count(*)をcountとしてクエリに追加するだけです。

いつでも適切なSQLステートメントを実行できます。私は次のようなことをします:

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

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

SQLクエリの設定は、反復するよりも速くて安価かもしれません。カウントは安いと思います。

3
ViruMax

Swift「intForColumn」へのマイナーな変更のために更新されました

if let rs = db.executeQuery("SELECT COUNT(*) as Count FROM TABLE_NAME", withArgumentsInArray: nil) {
while rs.next() {
    print("Total Records:", rs.int(forColumn: "Count"))
    }
}
1
Chris L

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

次のコードを試してみてください、これは私のために働きます

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
Nipul Daki