什么是SQLite中的游标使用moveToFirst()的(What is The use of m

2019-06-18 04:28发布

我是一个新手,编程,我发现这段代码在互联网上工作得很好

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

部分代码不能正常工作。

Answer 1:

对于文档SQLiteDatabase.query()说,查询方法返回:

“A光标对象,其被定位在所述第一条目之前”。

调用moveToFirst()做两件事情:它可以让你测试查询是否返回一个空集(通过测试的返回值),它的光标移动到第一个结果(当设定不为空)。 请注意,谨防空回集,您发布的代码应该测试返回值(它不是做)。

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



Answer 2:

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


Answer 3:

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



Answer 4:

moveToFirst()方法将光标移动到第一行。 它允许执行测试查询是否返回一个空集与否。 下面是其实现的一个样本,

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

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

cursor.close(); 


Answer 5:

什么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(); 将导致没有记录返回。



文章来源: What is The use of moveToFirst () in SQLite Cursors