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

有人可以解释一下这里发生了什么吗?这就是我认为正在发生的事情 - 他正在将值插入到名为 comment 的列下的表中。然后,他进行查询,将光标设置到他在表中添加评论的位置。

然后我对他为什么做 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的文档

查询返回:“一个光标对象,位于第一个条目之前。”

然后,http://developer.android.com/reference/android/database/Cursor.html

moveToFirst() 说:“将光标移动到第一行。”

于 2012-06-22T18:58:23.783 回答