前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android开发笔记(三十一)SQLite游标及其数据结构

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

作者头像
aqi00
发布2019-01-18 10:43:00
6770
发布2019-01-18 10:43:00
举报
文章被收录于专栏:老欧说安卓老欧说安卓

ContentValues

ContentValues类似于映射,也是用于存储键值对。区别之处在于ContentValues的键只能是字符串,查看ContentValues的源码,会发现其内部保存键值对的数据结构就是HashMap,“private HashMap<String, Object> mValues;”。另外,ContentValues实现了Parcelable接口,也是为了提高手机上的处理效率。 这里提到ContentValues,还是因为Android源码在操作SQLite时只认这个数据结构,而不认别的java容器类,所以我们得额外对它加以了解了。幸好ContentValues的用法很简单,主要就是保存操作put,以及读取操作get。put和get方法都支持常用的基本数据类型,如整型、浮点数、字符串、布尔类型、字节等等。 SQLite在插入、更新、查询操作中需要用到ContentValues数据,下面是插入和更新的代码例子:

代码语言:javascript
复制
	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);
			// 添加成功后返回行号,失败后返回-1
			if (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 : 获取当前记录的字段类型

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

代码语言:javascript
复制
	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开发笔记的完整目录

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年12月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ContentValues
  • Cursor
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档