23

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

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

但我无法理解

if(c!=null)
    {
        c.moveToFirst();
    }

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

if(c!=null) { c.moveToFirst(); }

部分,代码不起作用。

4

5 回答 5

62

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

“一个光标对象,位于第一个条目之前。”

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

与对 的调用不同moveToFirst(),对 的测试if(c!=null)是无用的;query()要么返回一个Cursor对象,要么抛出异常。它永远不会回来null

于 2012-09-16T07:03:14.100 回答
16
if (c.moveToFirst()) {
  while(!c.isAfterLast()) { // If you use c.moveToNext() here, you will bypass the first row, which is WRONG
    ...
    c.moveToNext();
  } 
}
于 2013-11-03T02:33:41.640 回答
0

光标不是查询结果的行。游标是一个可以迭代查询结果行的对象。光标可以移动到每一行。.moveToFirst()方法将其移动到结果表的第一行。

于 2012-09-16T08:13:27.820 回答
0

moveToFirst() 方法将光标移动到第一行。它允许执行查询是否返回空集的测试。这是其实现的示例,

if (cursor.getCount() == 0 || !cursor.moveToFirst()) {

return cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN)); 

cursor.close(); 
于 2016-05-21T03:21:02.017 回答
-1

macio.Jun 说的是对的!

我们有如下代码:

    String sql = "select id,title,url,singer,view,info from cache where id=" + id;
    SQLiteDatabase db = getMaintainer().getReadableDatabase();
    Cursor query = db.rawQuery(sql, null);
    query.moveToFirst(); 
    while(query.moveToNext()){
        DBMusicData entity = new DBMusicData();
        entity.setId(query.getString(query.getColumnIndex(FIELD_ID)));
        entity.setTitle(query.getString(query.getColumnIndex(FIELD_TITLE)));
        entity.setSinger(query.getString(query.getColumnIndex(FIELD_SINGER)));
        entity.setTitlepic(query.getString(query.getColumnIndex(FIELD_PICURL)));
        entity.setInfoUrl(query.getString(query.getColumnIndex(FIELD_INFO)));
        entity.setViews(query.getString(query.getColumnIndex(FIELD_VIEW)));
        Log.w(tag, "cache:"+ entity.toString());
    }
    query.close();
    query=null;
    db.close();
    db=null;

如果缓存表中只有一条记录,query.moveToFirst(); 将导致没有记录返回。

于 2015-07-30T09:16:22.087 回答