0

カーソルの仕組みを理解しようとしていますが、このコードの一部がわかりません - ( http://www.vogella.com/articles/AndroidSQLite/article.htmlから削除)

public Comment createComment(String comment) {
        ContentValues values = new ContentValues();
        values.put(MySQLiteHelper.COLUMN_COMMENT, comment);
        long insertId = database.insert(MySQLiteHelper.TABLE_COMMENTS, null,
                values);
        Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                null, null, null);
        cursor.moveToFirst();
        Comment newComment = cursorToComment(cursor);
        cursor.close();
        return newComment;
    }

誰かがここで何が起こっているのか説明してもらえますか? これが私が考えていることです - 彼はコメントという名前の列の下のテーブルに値を挿入しています。次に、テーブル内でコメントを追加した場所にカーソルを設定してクエリを実行します。

次に、なぜ彼がcursor.moveToFirst()を行うのか混乱しています。カーソルは、彼が追加したばかりの現在のコメントを指していませんか? 彼はテーブルに挿入したばかりのコメントを返そうとしているのではないかと思ったので、moveToFirst() メソッドを削除することはできませんでしたか?

4

2 に答える 2

1
  Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS,
                allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                null, null, null);

返される結果はカーソル オブジェクトです。

 cursor.moveToFirst();

カーソル オブジェクトの最初の要素を指していること (または) カーソルが空でないことを確認してください。

 Comment newComment = cursorToComment(cursor);

別のメソッドを呼び出してカーソルを通過し、Commentオブジェクトを返すメソッド内でコード化されたロジックを実行します。

 cursor.close();

カーソルを閉じて、適格な GC になり、メモリが解放されるようにします。

 return newComment;

コメント オブジェクトを呼び出し元に返します。

于 2012-06-22T18:56:48.400 に答える
0

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.htmlのドキュメントから

クエリは、「最初のエントリの前に配置された Cursor オブジェクト」を返します。

次に、http://developer.android.com/reference/android/database/Cursor.html

moveToFirst() : 「カーソルを最初の行に移動します。」

于 2012-06-22T18:58:23.783 に答える