DbUtils和HttpUtils

xUtils的最后两个模块:DbUtils和HttpUtils。首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把DbUtils用到项目中去。

操纵数据库的工具类,无论多牛X,总离不开最根本的CRUD,即创建,查询,更新和删除。下面从这四个角度依次介绍xUtils是如何简便持久化数据的。大家都知道,在Android里面如果要存储一个对象,我们需要创建一个SQLiteOpenHelper,然后还得创建一张对应对象各个属性的表,还得继续把我们的对象转换成ContentValues,进而去存储。真心是麻烦的不能再麻烦了,我们现在介绍的DbUtils就能让你轻松解脱麻绳一样的代码。DbUtils在进行save操作的时候,会根据java反射反射出对象的各个字段,然后去查询数据库中是否存在这个对象类型对应的表,如果表已经存在,直接进行插入操作;如果不存在,就先动态的创建的一张对应我们对象的表,再进行插入处理。直接上代码,大家看。

@OnClick(R.id.insert)
	public void insert(View v) {
		Student stu = null;
		for (int i = 0; i < 20; i++) {
			stu = new Student();
			stu.setAge(10 + i);
			stu.setName("jack" + i);
			mList.add(stu);
			try {
				dbUtils.save(stu);
			} catch (DbException e) {
				e.printStackTrace();
			}
		}
	}
注意:并不是所有的实体对象都快可以通过这种方式去存储,一定要保证对象的类型中有int类型的id或者_id的属性,这就对应数据库表中的主键字段。如果类型中没有id字段,可以通过@Id注解去指定一个int类型的字段作为主键。如果表中的又字段不想被存储在数据库中,也可以通过@Transient去实现忽略。如果直接存储一个对象的列表,这样也是被允许的,达到批量存储的目的。

DbUtils可以帮助对SQL语句不是很熟悉的同学快速的实现查询,而不用去写sql查询语句,而且可以对查询结果进行排序和分页,使用简单,功能强大。大家可以看下,下面的几行代码就能实现复杂的查询功能

dbUtils.findAll(Selector.from(Student.class)
		.where("_id", "<", 10).and("age", ">", 10).orderBy("_id")
		.limit(pageSize).offset(pageSize * pageIndex));
同样的,也可以对数据库中得数据进行便捷的更新。下面演示的是更新Student对应的表中的第一条记录的age这个字段。这个比较简单,就直接上代码看吧。
@OnClick(R.id.update)
	public void update(View v){
		try {
			List<Student> stus = dbUtils.findAll(Selector.from(Student.class));
			Student stu = stus.get(0);
			stu.setAge(20);
			dbUtils.update(stu);
		} catch (DbException e) {
			e.printStackTrace();
		}
	}

最后一个就是数据的删除。一个实体对象,一组实体对象,根据条件删除,删除表,删除整个数据库,这些操作都可以通过一句简单的代码来实现,看了代码就明白了。
@OnClick(R.id.delete)
	public void delete(View v){
		try {
			List<Student> stus = dbUtils.findAll(Selector.from(Student.class));
			dbUtils.delete(stus.get(0));
			dbUtils.deleteAll(stus);
			dbUtils.deleteById(Student.class, WhereBuilder.b("age", "==", 20));
			dbUtils.dropTable(Student.class);
			dbUtils.dropDb();
		} catch (DbException e) {
			e.printStackTrace();
		}
	}
//查找
Parententity = db.findById(Parent.class, parent.getId());
Parententity = db.findFirst(entity);//通过entity的属性查找
List<Parent>list = db.findAll(entity);//通过entity的属性查找
List<Parent>list = db.findAll(Parent.class);//通过类型查找
ParentParent =db.findFirst(Selector.from(Parent.class).where("name","=","test"));
//IS NULL
ParentParent = db.findFirst(Selector.from(Parent.class).where("name","=",null));
//IS NOT NULL
ParentParent = db.findFirst(Selector.from(Parent.class).where("name","!=",null));
//WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMITpageSize OFFSET pageOffset
List<Parent>list = db.findAll(Selector.from(Parent.class)
                                  .where("id","<", 54)
                                  .and(WhereBuilder.b("age",">", 20).or("age", " < ", 30))
                                  .orderBy("id")
                                  .limit(pageSize)
                                  .offset(pageSize* pageIndex));
//op为"in"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parenttest = db.findFirst(Selector.from(Parent.class).where("id","in", new int[]{1, 2, 3}));
//op为"between"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parenttest = db.findFirst(Selector.from(Parent.class).where("id","between", new String[]{"1", "5"}));
DbModeldbModel =db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")只取出name列
List<DbModel>dbModels =db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name","count(name)"));
...
List<DbModel>dbModels = db.findDbModelAll(sql); // 自定义sql查询
db.execNonQuery(sql)// 执行自定义sql





你可能感兴趣的:(DbUtils和HttpUtils)