DbUtils分析

DbUtils是xUtils四大模块中的一个重要模块:

  • android中的orm框架,一行代码就可以进行增删改查;
  • 支持事务,默认关闭;
  • 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
  • 支持绑定外键,保存实体时外键关联实体自动保存或更新;
  • 自动加载外键关联实体,支持延时加载;
  • 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
  • 下面是使用DbUtils的实例和Fenxi

DbUtils使用方法:

DbUtils db = DbUtils.create(this);
User user = new User(); //这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性
user.setEmail("wyouflf@qq.com");
user.setName("wyouflf");
db.save(user); // 使用saveBindingId保存实体时会为实体的id赋值

...
// 查找
Parent entity = db.findById(Parent.class, parent.getId());
List<Parent> list = db.findAll(Parent.class);//通过类型查找

Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test"));

// IS NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));
// IS NOT NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null));

// WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize 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等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));
// op为"between"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"}));

DbModel dbModel = 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
...
对于 id,id需要在javabean类中声明和实现get、set方法;在数据填充时不需要填充,因为这会自己动一次产生,
在适配器adapter中,需要获取!
创建一个项目 实现一个注册界面;点击注册按钮 将跳转到另一个activity,在这个界面中有一个listview来按照依次排序的方式显示
name,number,age,这几个字段是和一个javabean类一一对应的,在该javabean中还有id字段也是声明了的!!记住。
不过不用coder进行填充数据;具体实现如下;
实现xUtils的集成,在注册按钮中创建一个dButils实例,创建一个javabean实例
将所有得到的name,number,age,实现填充到javabean实例中,然后db实例来调用save方法!完成以上后,
跳转到另一个activity中;
此部分代码如下:
	public void register_click(View v)
	{
		String name_content = name.getText().toString();
		String number_content = number.getText().toString();
		Integer age_content = Integer.parseInt(age.getText().toString());
		
		Student s = new Student();
		s.setName(name_content);
		s.setNumber(number_content);
		s.setAge(age_content);
		try {
			db.save(s);
		} catch (DbException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		startActivity(new Intent(this, ShowActivity.class));
		this.finish();
	}
该activity只有一个listview控件;这个时候需要做的是做一个listview的适配器 adapter;自定义一个Myadapter,
数据源是 List<javabean>的泛型;
子布局是自己定义的 包括 id,name,number,age;接下来的adapter的完成就是水到渠成;回到目标activity,
在进行数据填充到adapter中
时,数据源来自 上一个activity中,保存在一个以包名_javabean 为名的.db文件中;采用的提取方式是 创建一个dbUtils,
然后采用findall方法
来查询所有的数据/或者进行约束条件,找到符合约束的数据;具体的实现代码如下:
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_show);
		lv = (ListView) findViewById(R.id.showact_lv);
		db =DbUtils.create(this);
		initDatas();
		adapter = new MyAdapter(this, datas);
		lv.setAdapter(adapter);
	}
	private void initDatas() {
		// TODO Auto-generated method stub
		try {
//			datas = db.findAll(Student.class);
			datas = db.findAll(Selector.from(Student.class).where("age","<",40).orderBy("age"));
		} catch (DbException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值