23

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

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(); }

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

4

5 に答える 5

62

SQLiteDatabase.query()のドキュメントには、クエリメソッドが返すと書かれています:

「最初のエントリの前に配置される Cursor オブジェクト。」

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

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

于 2012-09-16T07:03:14.100 に答える
0

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

于 2012-09-16T08:13:27.820 に答える
-1

macio.Junの言うことは正しいです!

以下のようなコードがあります。

    String sql = "select id,title,url,singer,view,info from cache where id=" + id;
    SQLiteDatabase db = getMaintainer().getReadableDatabase();
    Cursor query = db.rawQuery(sql, null);
    query.moveToFirst(); 
    while(query.moveToNext()){
        DBMusicData entity = new DBMusicData();
        entity.setId(query.getString(query.getColumnIndex(FIELD_ID)));
        entity.setTitle(query.getString(query.getColumnIndex(FIELD_TITLE)));
        entity.setSinger(query.getString(query.getColumnIndex(FIELD_SINGER)));
        entity.setTitlepic(query.getString(query.getColumnIndex(FIELD_PICURL)));
        entity.setInfoUrl(query.getString(query.getColumnIndex(FIELD_INFO)));
        entity.setViews(query.getString(query.getColumnIndex(FIELD_VIEW)));
        Log.w(tag, "cache:"+ entity.toString());
    }
    query.close();
    query=null;
    db.close();
    db=null;

キャッシュ テーブルに 1 つのレコードしかない場合、query.moveToFirst(); レコードが返されなくなります。

于 2015-07-30T09:16:22.087 に答える