天天看点

xUtils框架的介绍(三)

接上回,继续介绍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){  

            dbutils.delete(stus.get(0));  

            dbutils.deleteall(stus);  

            dbutils.deletebyid(student.class, wherebuilder.b("age", "==", 20));  

            dbutils.droptable(student.class);  

            dbutils.dropdb();  

    }