2011-07-29 6 views
0

は、私はちょうどデータベース呼び出しから返されたカーソルを持って言う:すべての呼び出しは、例えば同様にgetCount()のように、それに行われる前にこれはif/elseifによってCursorでdbに2回クエリを実行させますか?

Cursor myCursor = db.rawQuery(someQuery, null); 

は、ドキュメントによると、カーソルが実際に移入されません。だから私の質問は、次のコードは実際に私のデータベースを2回クエリですか?

 if(myCursor.getCount() > 1) 
     { 
      // Do something 
     } 

     else if(myCursor.getCount() == 1) 
     { 
      // Do something else 
     } 

Androidは最初の 'if'文の後にCursorオブジェクトをキャッシュしますが、代わりに 'else if'文がキャッシュされたオブジェクトにアクセスしますか?

答えて

1

いいえ、そうではありません。カーソルオブジェクトには実際にそれ自身のカウントが含まれています。あなたは同様にgetCount()メソッドを見.Take SQLiteCursorオブジェクトhereのソースコードを見ることができます:それは初回のみがチェックされます

@Override 
public int getCount() { 
    if (mCount == NO_COUNT) { 
     fillWindow(0); 
    } 
    return mCount; 
} 

。 mCountは、Cursorが再クエリされたときにのみ更新されます(同じページのQueryThread.run()を参照)。

関連する問題