ContentValues

ContentValues类似于映射,也是用于存储键值对。区别之处在于ContentValues的键只能是字符串,查看ContentValues的源码,会发现其内部保存键值对的数据结构就是HashMap,“private HashMap<String, Object> mValues;”。另外,ContentValues实现了Parcelable接口,也是为了提高手机上的处理效率。

这里提到ContentValues,还是因为Android源码在操作SQLite时只认这个数据结构,而不认别的java容器类,所以我们得额外对它加以了解了。幸好ContentValues的用法很简单,主要就是保存操作put,以及读取操作get。put和get方法都支持常用的基本数据类型,如整型、浮点数、字符串、布尔类型、字节等等。

SQLite在插入、更新、查询操作中需要用到ContentValues数据,下面是插入和更新的代码例子:

 private static final String TABLE_NAME = "person";public int delete(String condition) {int count = mDB.delete(TABLE_NAME, condition, null);return count;}public boolean insert(ArrayList<Person> personArray) {for (int i = 0; i < personArray.size(); i++) {// ContentValues对象ContentValues cv = new ContentValues();cv.put("name", personArray.get(i).name);cv.put("age", personArray.get(i).age);cv.put("height", personArray.get(i).height);cv.put("weight", personArray.get(i).weight);cv.put("company", personArray.get(i).company);long result = mDB.insert(TABLE_NAME, "", cv);// 添加成功后返回行号,失败后返回-1if (result == -1) {return false;}}return true;}public int update(Person person, String condition) {ContentValues cv = new ContentValues();cv.put("name", person.name);cv.put("age", person.age);cv.put("height", person.height);cv.put("weight", person.weight);cv.put("company", person.company);int count = mDB.update(TABLE_NAME, cv, condition, null);return count;}

Cursor

Cursor是用来指示当前查询操作的游标,在Android中一般用于查询SQLite,也可用于查询ContentProvider,甚至可用于DownloadManager查询下载任务。Cursor的常用方法如下:

控制类
close : 关闭游标
isClosed : 判断游标是否关闭
isFirst : 判断游标是否在开头
isLast : 判断游标是否在末尾

移动类
moveToFirst : 移动游标到开头
moveToLast : 移动游标到末尾
moveToNext : 移动游标到下一个
moveToPrevious : 移动游标到上一个
move : 往后移动游标若干偏移量
moveToPosition : 移动游标到指定位置

取值类
getCount : 获取记录数
getInt : 获取当前记录的整型值
getFloat : 获取当前记录的浮点数值
getString : 获取当前记录的字符串值
getType : 获取当前记录的字段类型

下面是使用游标进行查询的代码例子:

 public ArrayList<Person> query(String sql) {ArrayList<Person> personArray = new ArrayList<Person>();Cursor cursor = mDB.rawQuery(sql, null);if (cursor.moveToFirst()) {for (;; cursor.moveToNext()) {Person person = new Person();person.xuhao = cursor.getInt(0);person.name = cursor.getString(1);person.age = cursor.getInt(2);person.height = cursor.getFloat(3);person.weight = cursor.getDouble(4);person.company = cursor.getLong(5);personArray.add(person);if (cursor.isLast() == true) {break;}}}cursor.close();return personArray;}

点击下载本文用到的SQLite游标操作的工程代码

点此查看Android开发笔记的完整目录

Android开发笔记(三十一)SQLite游标及其数据结构相关推荐

  1. Android开发笔记(十一)自定义视图的构造方法

    自定义视图的用法 Android自带的视图常常不能满足实际开发的需求,这种情况下我们就得自定义视图(View). 首先在res\values目录下找到attrs.xml(如没有则创建之),在该属性定义 ...

  2. 【Visual C++】游戏开发笔记三十一 回归季:游戏开发资料整理打包下载专栏行文思路整理

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/8147229 作者:毛星云    邮箱: h ...

  3. 【Visual C++】游戏开发笔记三十一 回归季 游戏开发资料整理打包下载 专栏行文思路整理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  4. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

  5. Android开发笔记(序)

    本开发笔记,借鉴与其他开发者整理的文章范例与心得体会.在这里作为开发过程中的一个总结与笔记式记录. 如有侵犯作者权益,请及时联系告知删除.俗话说:集百家成一言,去粕成金. ************** ...

  6. Android开发笔记(序)写在前面的目录大全

    转自  湖前琴亭 的博客https://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面 ...

  7. Andriod开发之二十:Android开发笔记(序)写在前面的目录

    https://blog.csdn.net/aqi00/article/details/50038385 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教 ...

  8. Android开发笔记(三十)SQLite数据库基础操作

    SQLite语法 SQLite是一个小巧的嵌入式数据库,使用方便.开发简单,手机上最早由ios运用,后来android兴起同样也采用了sqlite.sqlite的多数sql语法与oracle是一样的, ...

  9. Android开发笔记(一百三十一)水波图形与水波动画

    水波图形RippleDrawable RippleDrawable是Android在5.0之后新增的图形类,它的作用是在点击时展示水波动画,从而提示用户在这里按压了屏幕.这个提示效果类似于状态图形St ...

最新文章

  1. HDU1261(高精度乘法+高精度除法)
  2. 单链表的建立,插入和释放
  3. containers文件夹可以删除吗_电脑进行C盘清理,appdata文件夹可以删除吗?
  4. new 实例化对象是啥意思_前端经典面试题解密:JS的new关键字都干了什么?
  5. 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化
  6. 当60亿次攻击来袭,人机联合打了一场漂亮的防御战
  7. 搭建ceph单节点对象存储服务器
  8. Nginx官网提供的版本类型
  9. Ubuntu 12.04 MTK环境配置说明
  10. DNS协议及Bind应用
  11. 透镜成像原理,眼球成像原理,小孔成像原理
  12. 用canvas画太极图(一步步详解附带源代码)
  13. hadoop tyarn冲突_hadoop集群启动yarn时出现的问题和解决方法
  14. 数字正交下变频(多相滤波法)
  15. 《Python编程:从入门到实践》 练习 9-4 9-5
  16. 第三代战斗机的特点有哪些
  17. buid和version之间的区别
  18. Python定时任务框架APScheduler快速入门
  19. 代码敲累了就来写《创业计划书》吧
  20. Java调用执行python脚本

热门文章

  1. Leetcode每日一题:190.reverse-bits(颠倒二进制位)
  2. 吴恩达机器学习(十四)推荐系统(基于梯度下降的协同过滤算法)
  3. Linux 获取grep前后几行
  4. 事务的传播行为和隔离级别?
  5. vb连接mysql出现的问题_连接数据库问题用户定义类型未定义【vb6】
  6. php验证码只有图片没有文字_有没有免费好用的图片文字识别工具?在线就能使用超准确...
  7. php与tp5,PHP开发(33)-ThinkPHP5.0(5)命名空间与TP5-PhpStorm
  8. gdal for java_gdal java环境配置
  9. IDEA调整输出字体的字体与大小
  10. Spring Data Jpa使用@Query时 报错Validation failed for query for method public abstract