xUtils使用-----db模块

来源:互联网 发布:恐同即深柜 知乎 编辑:程序博客网 时间:2024/06/14 05:31

xUtils是一个不错的快速开发框架,开发群气氛也非常活跃,项目地址,推荐使用LogUtils,DbUtils和HttpUtils,本文着重介绍DbUtils使用。

使用DbUtils类时只要记住一个类对应一张表即可,同时别忘为应用加上读写sd卡权限

1、初始化配置DbUtils

使用很简单,看代码即可

// DbUtils.create(this),提供了不同的重载方法DbUtils dbUtils = DbUtils.create(this, Environment.getExternalStorageDirectory().getPath(), "people.db"); dbUtils.configDebug(true);//打印sql语句

2、创建简单Java类

注意一张表对应一个类,这里以简单的Parents与Child为例简单的介绍下。
Parents.java:
import com.lidroid.xutils.db.annotation.Column;import com.lidroid.xutils.db.annotation.Finder;import com.lidroid.xutils.db.annotation.Id;import com.lidroid.xutils.db.annotation.NoAutoIncrement;import com.lidroid.xutils.db.annotation.Table;import com.lidroid.xutils.db.sqlite.FinderLazyLoader;@Table(name="parent")//可以不加,加上避免混淆错误,也可以在混淆时选择不混淆该类public class Parents {@Id//注释可以不加,加上只是增强可读性,避免混淆错误@NoAutoIncrement//若主键为int 或long则为自增长,若不需要添加此选项private int id ;//必须存在id@Column(column="ADDRESS")//可以不写,则创建的表中列名就是addressprivate String address ;@Finder(valueColumn="id",targetColumn="parentId")public FinderLazyLoader<Child> children ;public Parents() {super();}public Parents(int id, String address) {super();this.id = id;this.address = address;}//setter/getter方法省略}
Child.java
import com.lidroid.xutils.db.annotation.Foreign;import com.lidroid.xutils.db.annotation.Transient;public class Child {@Transient//加上它表示该字段不会入库,同时静态字段也不会入库private String score ;private String name ;private String email ;private int id ;@Foreign(column="parentId",foreign="id")public Parents parent ;public Child(String name, String email) {super();this.name = name;this.email = email;}public Child() {super();}<pre name="code" class="java" style="font-size: 14px;">//setter/getter方法省略
}

3.CRUD操作

3.1增加

 Parents parent = new Parents(1, "zhengzhou"); Child c1 = new Child("张三", "hha@126.com"); Child c2 = new Child("李四", "lisi@126.com"); Child c3 = new Child("lucy", "lucy@126.com"); c1.setParent(parent); c2.setParent(parent); c3.setParent(parent); try { //dbUtils.saveBindingId(c1) ;//会将id值赋给bean dbUtils.save(c1); dbUtils.save(c2); dbUtils.save(c3); dbUtils.save(parent); } catch (DbException e) { }
也可以直接保存List集合dbUtils.saveAll(List<?>)/dbUtils.saveBindingIdAll(List<?>)。

3.2修改与查询

try {List<Child> children = dbUtils.findAll(Child.class);if (children != null && children.size() > 0) {for (Child c : children) {c.setName(c.getName() + "修改");}}dbUtils.updateAll(children, "name");//再次查询所有的ChildList<Child> cs = dbUtils.findAll(Child.class);if (children != null && children.size() > 0) {for (Child c : cs) {System.out.println(c.getName());}}} catch (DbException e) {}
由父类查找其下的所有子类 :
List<Child> c;try {c = p.children.getAllFromDb();System.out.println(c.size());} catch (DbException e) {e.printStackTrace();}

注意其同时提供了saveOrUpdate()方法方便操作。

3.3、删除操作

DbUtil删除数据很简单,提供了以下方法:
try {dbUtils.deleteAll(Child.class);dbUtils.delete(child);dbUtils.deleteById(Child.class, 1);dbUtils.dropDb();//删除整张表,慎用dbUtils.dropTable(Child.class);} catch (DbException e) {e.printStackTrace();}

3.4、查询操作

主要提供了findAll()、findById()、findFirst()以及execQuery()(有execNonQuery()执行非查询的sql操作)。
下面主要介绍下条件查询与分页操作。
try {List<Child> findChild = dbUtils.findAll(Selector.from(Child.class).where("id", "<", "3")//执行至此处相当于WHERE id<54 AND (age>20 OR age<30).and(WhereBuilder.b("score", ">", "70").or("age", "<", "10"))// op为"in"或"between"时,最后一个参数必须是数组或Iterable的实现类(例如List等).where("id", "in", new int[]{1, 2, 3}).orderBy("id")        .limit(pageSize)        .offset(pageSize * pageIndex)) ;} catch (DbException e) {e.printStackTrace();}
也可以“按需”取出:
try {//只取出name列和count数值List<DbModel> dbModel = dbUtils.findDbModelAll(Selector.from(Parents.class).select("name", "count(name)"));dbModel.get(0).getString("name") ;dbModel.get(0).getInt("count(name)") ;} catch (DbException e) {}












0 0
原创粉丝点击