web-dev-qa-db-ja.com

SQLiteカーソルでのmoveToFirst()の使用とは

私はプログラミングの初心者で、このコードをインターネットで見つけましたが、うまくいきます

Cursor c=db.query(DataBase.TB_NAME, new String[] {DataBase.KEY_ROWID,DataBase.KEY_RATE}, DataBase.KEY_ROWID+"= 1", null, null, null, null);
        if(c!=null)
        {
            c.moveToFirst();
        }

しかし、私はの使用を理解することはできません

if(c!=null)
    {
        c.moveToFirst();
    }

部。それは正確に何をし、私が削除した場合

if(c!=null) { c.moveToFirst(); }

一部、コードは機能しません。

21
Aswin

SQLiteDatabase.query() のドキュメントは、クエリメソッドが返すことを示しています。

「カーソルオブジェクト。最初のエントリの前に配置されます。」

moveToFirst()を呼び出すと、クエリが空のセットを返したかどうかをテストできます(戻り値をテストする)。また、カーソルが最初の結果に移動します(セットが空でない場合)。空の戻り値セットを防ぐために、投稿したコードは戻り値をテストする必要があることに注意してください(実行されていません)。

moveToFirst()の呼び出しとは異なり、if(c!=null)のテストは役に立ちません。 query()Cursorオブジェクトを返すか、例外をスローします。 nullを返すことはありません。

56
Ted Hopp
if (c.moveToFirst()) {
  while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
    ...
    c.moveToNext();
  } 
}
9
macio.Jun

moveToFirst()メソッドは、カーソルを最初の行に移動します。クエリが空のセットを返したかどうかのテストを実行できます。以下にその実装のサンプルを示します。

if (cursor.getCount() == 0 || !cursor.moveToFirst()) {

return cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN)); 

cursor.close(); 
0
WaterRocket8236

カーソルはクエリの結果の行ではありません。カーソルは、クエリの結果行を反復処理できるオブジェクトです。カーソルは各行に移動できます。 .moveToFirst()メソッドは、結果テーブルの最初の行に移動します。

0
Bobs