Android 中查询数据库时Cursor类的使用

在做一个获取天气的DEMO,做的过程中,需要从数据库中读取数据,在此过程中使用了Cursor,就又在网上查阅了前辈们的问题以及API,又重新学习了下,在此做些记录,供自己以后温故而知新,能帮到其他童鞋就更好了害羞

    当我们从数据库中查询数据的时候,将返回结果放在Cursor中,在理解的时候,就是将Cursor看成每行的集合,在Curson中,我们查出来的每条数据就是一行,组成了整个Cursor,

[java]  view plain  copy
  1. 打开数据库,对数据进行更改是用此方法生成SQLiteDatabase对象  
[java]  view plain  copy
  1. SQLiteDatabase dbwrite = myDBHelper.getReadableDatabase();   
[java]  view plain  copy
  1. Cursor cursor = dbwrite.rawQuery("select * from citys",null);  

做完这些,我们就需要来取出我们查询的数据,或者对其中的数据进行操作。

第一步,我们先进行判空操作:

cursor有很多方法,其中moveToFirst()------移动光标到第一行,如果返回值为false即为空。

[java]  view plain  copy
  1. if (cursor.moveToFirst() == false)  
  2. {    
  3. Toast.makeText(mContext, "您的CITY表中无数据!!!", Toast.LENGTH_SHORT).show();  
  4. }       

当讲到这里很多童鞋可能会问为什么不直接用判断是否为null,经小弟实际使用,发现这个不太好理解,跟我们平常使用的相反,不知道是不是我错了,先说我试验的结果,我的cursor为空时,当cursor!=null时才判断出它为空,当cursor=null时根本拦截不下来,有兴趣的童鞋也可以试试

[java]  view plain  copy
  1. if(cursor!=null)  
  2. {    
  3.     Toast.makeText(mContext, "您的CITY表中无数据!!!", Toast.LENGTH_SHORT).show();  
  4. }        

第二步遍历取出数据,由于在我做的DEMO里,我要在数据库中取出多条,包含城市名与城市对应ID的数据,所以,我声明了,

[java]  view plain  copy
  1. ArrayList<HashMap<String,String>> AL= new ArrayList<HashMap<String,String>>();  

然后通过while()循环取数据,cursor.moveToNext()---光标移动到下一行,它返回的boolean值的意义为,当为真时表明光标移动成功,为false时说明移动失败,即没有移动成功。

[java]  view plain  copy
  1. while(cursor.moveToNext()){  
  2. //moveToNext()移动光标到下一行   
  3.     HashMap<String,String> HM = new HashMap<String,String>();  
  4.     String id = cursor.getString(cursor.getColumnIndex("cityid"));  
  5.     String name = cursor.getString(cursor.getColumnIndex("cityname"));  
  6.     HM.put("cityid", id);  
  7.     HM.put("cityname", name);  
  8.     AL.add(HM);  
  9.                   
  10. }  

在上面的代码中,关于cursor.getColumnIndex()的理解,在文档中,该方法返回指定列的索引,

我的理解是,首先通过字段名,先确定要找的列在cursor的第几列,然后再当前行中获得,

即 cursor.getString(index);

有关遍历的方法,我个人习惯用上面的方法,如果有童鞋喜欢用for循环,

Cursor还提供了cursor.isAfterLast()---判断游标是否指向最后一行,true为已经最后一行,false为不是最后一行。

结合上面的moveToFirst()和moveToNext()就可以使用for循环了

[html]  view plain  copy
  1. for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){  
  2.     HashMap<String,String> HM = new HashMap<String,String>();  
  3.     String id = cursor.getString(cursor.getColumnIndex("cityid"));  
  4.     String name = cursor.getString(cursor.getColumnIndex("cityname"));  
  5.     HM.put("cityid", id);  
  6.     HM.put("cityname", name);  
  7.     AL.add(HM);  
  8. }  

我项目里使用到的Cursor就是这些,另外从网上和文档里还整理出了一些Cursor的其他方法,童鞋们有用到的可以看下,欢迎童鞋们补充哈可怜

[java]  view plain  copy
  1. cursor.isClosed();//如果为TRUE表示该游标已关闭  
  2. cursor.close();//关闭游标,且释放资源  
  3. cursor.getColumnCount();//返回所有列的总数  
  4. cursor.getColumnNames();//返回一个字符串数组的列名,即将列名全部返回到一个字符串数组中  
  5. cursor.getCount();//返回Cursor中的行数  
  6. cursor.moveToFirst();//移动光标到第一行  
  7. cursor.moveToLast();//移动光标到最后一行  
  8. cursor.moveToNext();//移动光标到下一行  
  9. cursor.moveToPrevious();//移动光标到上一行  
  10. int columnIndex = 0;  
  11. int position = 0;  
  12. cursor.getColumnName(columnIndex);//从给定的索引返回列名  
  13. cursor.moveToPosition(position);//移动光标到给定位置  
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值