XUtils db学习笔记(xutils 3.5.0)

来源:互联网 发布:淘宝手机端访客怎么看 编辑:程序博客网 时间:2024/06/15 17:41

目前只使用了db模块,将其他模块剔除,减小包的体积!已经修改好的包上传。下载地址,笔记基于该修改包!

1.定义vo

定义简单的一对多关系,Parent和Child。

import org.xutils.db.annotation.Column;import org.xutils.db.annotation.Table;import java.util.Date;@Table(name = "parent", onCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)")public class Parent {    @Column(name = "id", isId = true,autoGen = false)    private int id;    @Column(name = "name")    public String name;    @Column(name = "email")    private String email;    @Column(name = "isAdmin")    private boolean isAdmin;    @Column(name = "time")//可以直接保存date类型参数    private Date time;    @Column(name = "date")//可以直接保存date类型参数    private java.sql.Date date;    //setter/getter省略    public List<Child> getChildren(DbManager db) throws DbException {            return db.selector(Child.class).where("parentId", "=", this.id).findAll();        }}
import org.xutils.db.annotation.Column;import org.xutils.db.annotation.Table;@Table(name = "child")public class Child {    @Column(name = "id", isId = true)    private int id;    @Column(name = "name")    public String name;    @Column(name = "email")    private String email;    @Column(name = "parentId"/*, property = "UNIQUE"//如果是一对一加上唯一约束*/)//此处保存parentId    public long parentId;    // 这个属性被忽略,不存入数据库    public String willIgnore;    @Column(name = "text")    private String text;   //setter/getter省略}

2.初始化数据库设置

2.1 设置数据库

DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()            .setDbName("test.db")            // 不设置dbDir时, 默认存储在app的私有目录.            .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了.            .setDbVersion(2)            .setDbOpenListener(new DbManager.DbOpenListener() {                @Override                public void onDbOpened(DbManager db) {                    // 开启WAL, 对写入加速提升巨大                    db.getDatabase().enableWriteAheadLogging();                }            })            .setDbUpgradeListener(new DbManager.DbUpgradeListener() {                @Override                public void onUpgrade(DbManager db, int oldVersion, int newVersion) {                    // TODO: ...                    // db.addColumn(...);                    // db.dropTable(...);                    // ...                    // or                    // db.dropDb();                }            });

2.2 初始化一个数据库实例

DbManager db = DbManagerImpl.getInstance(daoConfig,getApplicationContext());

注意此处是我修改的去掉其他模块的写法,若使用原生的,用 x.getDb(daoConfig);
这个方法会缓存一个db实例,重复调用不会新建一个db实例。

3 保存实例

            Parent parent = new Parent();            parent.name = "测试" + System.currentTimeMillis();            parent.setAdmin(true);            parent.setEmail("wyouflf@qq.com");            parent.setTime(new Date());            parent.setDate(new java.sql.Date(new Date().getTime()));            //db.save(parent);            db.saveBindingId(parent);//保存对象关联数据库生成的id

也可以批量保存:

                parentList = new ArrayList<Parent>();                for (int i = 0; i < 1000; i++) {                    Parent parent = new Parent();                    parent.setAdmin(true);                    parent.setDate(new java.sql.Date(1234));                    parent.setTime(new Date());                    parent.setEmail(i + "_@qq.com");                    parentList.add(parent);                }                try {                    db.save(parentList);                } catch (DbException ex) {                    ex.printStackTrace();                }

注意不会级联保存,需要手动操作!

4 查改删

4.1 查询数据

查询所有数据:

List<Child> children = db.selector(Child.class).findAll();

按条件查找:

List<Parent> list = db.selector(Parent.class)                    .where("id", "<", 54)                    .and("time", ">", calendar.getTime())                    .orderBy("id")                    .limit(10)                    .offset(10 * currPage)                    .findAll();

4.2 更改数据

parent.name = "hahaha123";parent.setEmail("wyouflf@gmail.com");db.update(parent);db.update(parent, "name", "email");db.update(Parent.class,WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true),        new KeyValue("name", "test_name"), new KeyValue("isAdmin", false));

delete类似,有4个方法重载,可以根据id删除或对象、条件删除,不在赘述!