1

我正在android中学习sqlite。今天我遇到了一个代码,用于在数据库中查找特定条目并将其返回(用于向用户显示)。我对代码中发生的事情有点困惑。首先程序员调用查询方法,然后将光标移动到第一行。

为什么他调用 moveTofirst() 方法?这种方法不会将光标放在数据库的开头,从而导致查询方法返回的内容丢失。

Cursor c = database.query(TABLE_NAME,columns, NAME_COL+ "="+ findname, null,null,null,null);

if(c!=null)
{
   c.moveToFirst();
   name= c.getString(1);
   return name;
}

问候。

4

4 回答 4

3

不,根据文档, moveToFirst() 的描述是

将光标移动到第一行。

所以基本上,您将光标设置到结果的第一行(而不是表本身),因为光标仅包含与您的查询匹配的行,而不是表中的所有行(除非您查询它们)。

于 2013-06-26T12:41:59.940 回答
2

您可能要调用 moveToFirst() 的另一个原因是,当您第一次查询时,光标从索引 -1 开始。因此,您必须调用 moveToFirst() 或任何其他 moveTo.. 函数才能访问正确的行。

于 2013-06-26T12:46:42.757 回答
1

调用moveToFirst()允许您测试查询是否返回了一个empty集合(通过测试return值)并将 移动cursor到第一个结果(当集合不是时empty)。

有关更多信息,请访问链接

于 2013-06-26T12:41:37.760 回答
1

当您进行查询时,您会返回所有结果,“封装”在一个Cursor对象中。此游标包含您要求的所有行,但不包含整个数据库!

要查看结果,您必须将光标移动到它包含的行中。就在查询之后,光标没有指向任何东西。调用moveToFirst()使光标指向查询结果的第一行。

此外,正如您的问题的答案中所说,您还可以测试是否实际返回了某些结果。

于 2013-06-26T12:53:32.380 回答