xUtils是一款快速开发Android移动应用的框架,其包含了很多实用的android工具.
目前xUtils主要有四大模块:
xUtils项目github请见:xUtils
由于xUtils3 api变化较多,已转至xUtils3
- 本文使用的xUtils版本为v3.1.22
DbUtils
xutils3_db
通过androidStudio新建工程xutils3_db,引入xUtils3依赖:
@H_404_14@
在${project_dir}/build.gradle(Module:app)的dependencies函数内添加compile ‘org.xutils:xutils:3.1.22’ 。然后构建一下就引入了xUtils3框架添加相关权限
在清单文件src/main/AndroidManifest.xml的manifest节点下添加<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />@H_404_14@xUtil的初始化
新建android.app.Application继承类me.kevingo.xutils3_db.MyApplication,复写onCreate()方法:// 在application的onCreate中初始化 @Override public void onCreate() { super.onCreate(); x.Ext.init(this); x.Ext.setDebug(true); // 是否输出debug日志 }在清单文件src/main/AndroidManifest.xml的Application节点添加属性android:name=”me.kevingo.xutils3_db.MyApplication”
@H_404_14@
通过以上的操作,就可以在代码中使用xUtils3的相关Api了
Entity
xUtils3中的DB模块提供了两个核心注解即org.xutils.db.annotation.Column和org.xutils.db.annotation.Table注解
- 加注了@Table的实体类将被映射到sqlite中的数据库表,@Table注解有属性name和onCreated两个属性,name属性决定了该实体类映射的数据库表名,而onCreated属性则可以用来添加表一级的属性或约束,例如创建联和唯一索引等@H_404_14@
- 加注了@Column的实体类属性将会映射到sqlite数据库中的字段,@Column注解有name、property、isId、autoGen属性,name属性决定了实体类属性对应的数据库字段名;property属性可以用来添加数据库中字段一级的属性或约束条件例如not null,索引等;isId属性表示该字段是否是主键,默认为false;autoGen则表示如果一个字段为主键,是否自增长,默认为true,所以该字段只有在isId属性为true时有效.@H_404_14@
- 未加注@Column注解的字段将不映射sqlite字段@H_404_14@
新建User类
在me.kevingo.xutils3_db.entity包下新建User类,并添加@Table和@Column注解进行ORM映射
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 23@H_404_14@
- 24@H_404_14@
- 25@H_404_14@
- 26@H_404_14@
- 27@H_404_14@
- 28@H_404_14@
- 29@H_404_14@
- 30@H_404_14@
- 31@H_404_14@
- 32@H_404_14@
- 33@H_404_14@
- 34@H_404_14@
- 35@H_404_14@
- 36@H_404_14@
- 37@H_404_14@
- 38@H_404_14@
- 39@H_404_14@
- 40@H_404_14@
- 41@H_404_14@
- 42@H_404_14@
- 43@H_404_14@
- 44@H_404_14@
- 45@H_404_14@
- 46@H_404_14@
- 47@H_404_14@
- 48@H_404_14@
- 49@H_404_14@
- 50@H_404_14@
- 51@H_404_14@
- 52@H_404_14@
- 53@H_404_14@
- 54@H_404_14@
- 55@H_404_14@
- 56@H_404_14@
- 57@H_404_14@
- 58@H_404_14@
- 59@H_404_14@
- 60@H_404_14@
- 61@H_404_14@
- 62@H_404_14@
- 63@H_404_14@
- 64@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 23@H_404_14@
- 24@H_404_14@
- 25@H_404_14@
- 26@H_404_14@
- 27@H_404_14@
- 28@H_404_14@
- 29@H_404_14@
- 30@H_404_14@
- 31@H_404_14@
- 32@H_404_14@
- 33@H_404_14@
- 34@H_404_14@
- 35@H_404_14@
- 36@H_404_14@
- 37@H_404_14@
- 38@H_404_14@
- 39@H_404_14@
- 40@H_404_14@
- 41@H_404_14@
- 42@H_404_14@
- 43@H_404_14@
- 44@H_404_14@
- 45@H_404_14@
- 46@H_404_14@
- 47@H_404_14@
- 48@H_404_14@
- 49@H_404_14@
- 50@H_404_14@
- 51@H_404_14@
- 52@H_404_14@
- 53@H_404_14@
- 54@H_404_14@
- 55@H_404_14@
- 56@H_404_14@
- 57@H_404_14@
- 58@H_404_14@
- 59@H_404_14@
- 60@H_404_14@
- 61@H_404_14@
- 62@H_404_14@
- 63@H_404_14@
- 64@H_404_14@
- 如果需要添加联合唯一索引则可以在@Table注解加上onCreated = “CREATE UNIQUE INDEX unique_name ON table_name(column1,column2)”) 为表创建column1,column2联合唯一索引@H_404_14@
获取DbManager
org.xutils.DbManager集成了所有对数据库表的操作,类似于SpringJDBC,hibernate等服务端ORM框架的SessionTemplate,DaoTemplate类,我们可以通过如下获取该对象
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 23@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 23@H_404_14@
新增实体记录
新增实体记录或者实体记录List可以通过org.xutils.DbManager#save或者#saveOrUpdate或者#saveBindingId方法,这三个方法内部会判断传入的是一个List<T>还是一个扁平化的Object来做相应的处理,但这三个方法虽然都能保存对象或者对象List,但又有区别:
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
查询实体记录
如果要查询某张表内的所有对象,可以通过org.xutils.DbManager#findAll(Class<T> class),根据对象的主键id来查找org.xutils.DbManager#findById(Class<T> entityType,Object idValue),当然如果只有这么几个方法来提供查找实体对象显然是不足以满足需求的,所以xUtil的作者还提供了了一个更加灵活的查询对象org.xutils.db.Selector.该对象提供了where(),and(),or(),orderBy(),groupBy(),limit(),offset(),count()等方法来实现灵活的复杂查询,而且这些方法都返回对象本身,所以可以进行链式操作.
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
删除对象
删除一个对象或者对象List通过org.xutils.DbManager#deleteById(Class<T> entityType,Object idValue)来删除某个主键对应的记录,org.xutils.DbManager#delete(Object entity)方法删除某个已经存在表中的对象,org.xutils.DbManager#delete(Class<T> entityType)则会删除表中所有记录,相当于清空表数据.但如果只有以上方法来提供删除操作显然还不够灵活,如果需要根据where条件来删除符合条件的记录,则可以使用org.xutils.db.sqlite.WhereBuilder对象来达到目的,WhereBuilder对象提供了类似Selector对象的and(),expr()等方法来链式操作该对象本身.复写的toString方法可以返回其对应的where条件语句.代码如下:
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
更新对象
更新对象除了几个update方法外还可以通过replace方法实现.
/** * 保存或更新实体类或实体类的List到数据库,根据id和其他唯一索引判断数据是否存在. * @param entity * @throws DbException */ void replace(Object entity) throws DbException;
通过update方法传入WhereBuilder对象和org.xutils.common.util.KeyValue对象实现对复合条件的记录更新指定的列和值
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
更加灵活的SQL查询
通过org.xutils.DbManager对象中的一系列exec前缀的方法可以实现sql语句查询
- 1@H_404_14@
- 1@H_404_14@
一对多关系的实现
假如一个User对象对应多个Oder对象我们该如何实现映射呢?
Order实体类
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 23@H_404_14@
- 24@H_404_14@
- 25@H_404_14@
- 26@H_404_14@
- 27@H_404_14@
- 28@H_404_14@
- 29@H_404_14@
- 30@H_404_14@
- 31@H_404_14@
- 32@H_404_14@
- 33@H_404_14@
- 34@H_404_14@
- 35@H_404_14@
- 36@H_404_14@
- 37@H_404_14@
- 38@H_404_14@
- 39@H_404_14@
- 40@H_404_14@
- 41@H_404_14@
- 42@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 18@H_404_14@
- 19@H_404_14@
- 20@H_404_14@
- 21@H_404_14@
- 22@H_404_14@
- 23@H_404_14@
- 24@H_404_14@
- 25@H_404_14@
- 26@H_404_14@
- 27@H_404_14@
- 28@H_404_14@
- 29@H_404_14@
- 30@H_404_14@
- 31@H_404_14@
- 32@H_404_14@
- 33@H_404_14@
- 34@H_404_14@
- 35@H_404_14@
- 36@H_404_14@
- 37@H_404_14@
- 38@H_404_14@
- 39@H_404_14@
- 40@H_404_14@
- 41@H_404_14@
- 42@H_404_14@
public List<Order> getOrders(DbManager db) throws DbException { return db.selector(Order.class).where("USERID",this.id).findAll(); }
一对多的查询:
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
- 1@H_404_14@
- 2@H_404_14@
- 3@H_404_14@
- 4@H_404_14@
- 5@H_404_14@
- 6@H_404_14@
- 7@H_404_14@
- 8@H_404_14@
- 9@H_404_14@
- 10@H_404_14@
- 11@H_404_14@
- 12@H_404_14@
- 13@H_404_14@
- 14@H_404_14@
- 15@H_404_14@
- 16@H_404_14@
- 17@H_404_14@
总结
xUitls3中DB模块的简单使用差不多就是这些,文中如有谬误,欢迎各位指正.最后,感谢xUtils框架作者wyouflf带来如此简单实用的android开发必备良药.
本文源码下载xUtils3中对Sqlite数据库的操作
(function(){ ('pre.prettyprint code').each(function () {
var lines =
for (i = 1; i <= lines; i++) {