あまりにも高価なcursor.getCount()に代わるものがあるかどうか疑問に思っています! 私の目標は、最初に 1 つのクエリを実行することです。カーソルが null または cursor.getCount() <=0 の場合は、別のクエリを実行する必要があります。
しかし、基になるデータが大きくなる可能性があるため、getCount() 呼び出しに対して Application Not Responding が発生していました。それを行うためのより良い解決策はありますか?
あまりにも高価なcursor.getCount()に代わるものがあるかどうか疑問に思っています! 私の目標は、最初に 1 つのクエリを実行することです。カーソルが null または cursor.getCount() <=0 の場合は、別のクエリを実行する必要があります。
しかし、基になるデータが大きくなる可能性があるため、getCount() 呼び出しに対して Application Not Responding が発生していました。それを行うためのより良い解決策はありますか?
カーソルが空の場合、moveToFirst は false になります
テーブルに行があるかどうかだけを知りたい場合、非常に最適なクエリは次のとおりです。
SELECT EXISTS (SELECT * FROM <tableName>);
これは とは異なり、テーブル全体をスキャンするわけではなくcount()
、iPhone 上の 250,000 件以上のレコードを持つテーブルに対して 2 ミリ秒未満で実行されるため、サイズに応じて確実にスケーリングされます。
Cursor.getCount()
ほとんどの (すべてではないにしても)Cursor
メソッドが最終的にそれを呼び出すため、使用を避けるのは非常に困難です。ソース コードを参照してください。
クエリで句を使用しlimit
て制限を 1 に設定し、クエリから返されたカーソルが空かどうかを確認してみてください。
限られたフィールドで最初のクエリを実行します。たとえば、最初のクエリは _id に対してのみ実行される場合があります。