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

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

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

部分,代码不起作用。

  • 什么是com.sec.android.provider。*应用程序?
  • Android上的随机SQLiteConnectionPool错误。 如何避免?
  • 列_id不存在
  • 一个用于deviseAndroid的SQLite数据库的开发工具
  • 从Android应用程序访问外部存储中的某个下载的.sqlite数据库
  • 是否可以在android数据库的文本字段中应用主键
  • Android:批量插入,当InsertHelper弃用
  • 如何使用从主表加载数据的CursorLoader从子表中检索数据?
  • SQLiteDatabase.query()的文档说,查询方法返回:

    “游标对象,位于第一个入口之前”。

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

    与对moveToFirst()的调用不同,对if(c!=null)是无用的; query()将返回一个Cursor对象,否则会抛出一个exception。 它永远不会返回null

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

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

    moveToFirst()方法将光标移动到第一行。 它允许执行testing,无论查询是否返回空集。 这是一个实现的例子,

     if (cursor.getCount() == 0 || !cursor.moveToFirst()) { return cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN)); cursor.close(); 

    什么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; 

    如果我们在caching表中只有一个logging, query.moveToFirst(); 会导致没有logging返回。