Android SQLite:在Cursor中存在疑问

时间:2014-12-06 16:47:42

标签: android sqlite cursor

我目前正在学习android SQLite数据库编程。从这里阅读this教程。我遇到了一段代码,

getContact()
    // Getting single contact
public Contact getContact(int id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
            KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
            new String[] { String.valueOf(id) }, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
            cursor.getString(1), cursor.getString(2));
    // return contact
    return contact;
}

我的问题

问题1 如果此代码返回查询,

Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                        KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                        new String[] { String.valueOf(id) }, null, null, null, null);

为什么我们将光标移动到这一行的第一行?

cursor.moveToFirst();

问题2

这段代码有什么作用?

Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));

我阅读了官方文档,但仍然无法理解。有人能解释一个简单的例子吗?

1 个答案:

答案 0 :(得分:1)

问题1:因为Cursor最初设置在第一行元素之前。 问题2:它从行中获取字符串,该行在光标对象中设置为当前列(每行由列组成),数字为0,1和2.然后,它使用它们创建联系对象。