什么是在SQLite游标中使用moveToFirst()

Asw*_*win 21 sqlite android cursor

我是一个编程新手,我在互联网上找到了这段代码,它工作正常

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();
        }
Run Code Online (Sandbox Code Playgroud)

但我无法理解使用的

if(c!=null)
    {
        c.moveToFirst();
    }
Run Code Online (Sandbox Code Playgroud)

部分.它究竟做了什么,如果我删除了

if(c!=null) { c.moveToFirst(); }
Run Code Online (Sandbox Code Playgroud)

部分,代码不起作用.

Ted*_*opp 56

SQLiteDatabase.query()的文档说查询方法返回:

"一个Cursor对象,位于第一个条目之前."

调用moveToFirst()有两件事:它允许您测试查询是否返回空集(通过测试返回值)并将光标移动到第一个结果(当集合不为空时).请注意,为了防止空返回集,您发布的代码应该测试返回值(它没有这样做).

与呼叫不同moveToFirst(),测试if(c!=null)是无用的; query()将返回一个Cursor对象,否则将抛出异常.它永远不会回来null.

  • @Aswin - 完成."null"的测试没用.您可以将调用移到`if`之外的`moveToFirst()`并删除`if`. (2认同)

mac*_*Jun 11

if (c.moveToFirst()) {
  while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
    ...
    c.moveToNext();
  } 
}
Run Code Online (Sandbox Code Playgroud)