私はプログラミングの初心者で、このコードをインターネットで見つけましたが、うまくいきます
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(); }
一部、コードは機能しません。
SQLiteDatabase.query() のドキュメントは、クエリメソッドが返すことを示しています。
「カーソルオブジェクト。最初のエントリの前に配置されます。」
moveToFirst()
を呼び出すと、クエリが空のセットを返したかどうかをテストできます(戻り値をテストする)。また、カーソルが最初の結果に移動します(セットが空でない場合)。空の戻り値セットを防ぐために、投稿したコードは戻り値をテストする必要があることに注意してください(実行されていません)。
moveToFirst()
の呼び出しとは異なり、if(c!=null)
のテストは役に立ちません。 query()
はCursor
オブジェクトを返すか、例外をスローします。 null
を返すことはありません。
if (c.moveToFirst()) {
while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
...
c.moveToNext();
}
}
moveToFirst()メソッドは、カーソルを最初の行に移動します。クエリが空のセットを返したかどうかのテストを実行できます。以下にその実装のサンプルを示します。
if (cursor.getCount() == 0 || !cursor.moveToFirst()) {
return cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN));
cursor.close();
カーソルはクエリの結果の行ではありません。カーソルは、クエリの結果行を反復処理できるオブジェクトです。カーソルは各行に移動できます。 .moveToFirst()
メソッドは、結果テーブルの最初の行に移動します。