compile 'org.xutils:xutils:3.3.36'
3.使用步骤
- 使用XUtils3的一系列初始化。
- 创建一个javaBean类,该类即是需要存储的数据,在数据库中的表。
- 调用x.getDb方法获取DbManager对象
- 使用DbManager对象进行CRUD.
初始化XUtils3
在Application的onCreate方法中加入如下代码
//xUtils3初始化
x.Ext.init(this);
//是否打开log
x.Ext.setDebug(true);
添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
建立数据库的表(JavaBean)
1.在类名上面加入@Table标签,标签里面的属性name的值就是以后生成的数据库的表的名字
2.实体bean里面的属性需要加上@Column标签,这样这个标签的name属性的值会对应数据库里面的表的字段。
3.实体bean里面的普通属性,如果没有加上@Column标签就不会在生成表的时候在表里面加入字段。
4.实体bean中必须有一个主键,如果没有主键,表以后不会创建成功,@Column(name=”id”,isId=true,autoGen=true)这个属性name的值代表的是表的主键的标识,isId这个属性代表的是该属性是不是表的主键,autoGen代表的是主键是否是自增长,如果不写autoGen这个属性,默认是自增长的属性。
/**
* Created by Administrator on 2016/7/8.
* 数据库存储 表 的实体类
* 在类名上加上@Table标签,标签里面的name就是以后生成数据库的表的表名。
* 实体bean里面的属性,如果没有加上@Column,在生成表的时候,就不会在表里面加上该字段,反之亦然。
*/
@Table(name = "Parent")
public class Parent {
//id
@Column(name = "id", isId = true, autoGen = true)
private int id;
//姓名
@Column(name = "name")
private String name;
//年龄
@Column(name = "age")
private int age;
//性别
@Column(name = "sex")
private String sex;
//工资
@Column(name = "salary")
private String salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
@Override
public String toString() {
return "[id=" + getId() +",name=" + getName() + ",age=" + getAge()
+ ",sex=" + getSex() + ",salary=" + getSalary() +"}\n";
}
}
获取DBManager对象
DbManager db = x.getDb(DaoConfig daoConfig);
获取DbManager需要一个daoConfig对象。
注意:数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作,但是只要我们想进行一张表的CRUD操作,我们必须先执行上面的步骤,通俗点说就是必须拿到一个Dbmanger这个对象。
daoCinfig对象主要用于对于数据库的一些初始化设置
1.setDbName 设置数据库的名称
2.setDbDir 设置数据库存放的路径
3.setDbVersion 设置数据库的版本
4.setAllowTransaction(true) 设置允许开启事务
5.setDbUpgradeListener 设置一个版本升级的监听方法
public class DbConfig {
private static DbManager.DaoConfig daoConfig;
public static DbManager.DaoConfig getDaoConfig(){
File file = new File(Environment.getExternalStorageDirectory().getPath());
if(daoConfig == null){
daoConfig = new DbManager.DaoConfig()
.setDbName("xiaoxiao.db") //设置数据库的名字
// .setDbDir(file) //设置数据库存储的位置
.setDbVersion(1) //设置数据的版本号
.setAllowTransaction(true) //设置是否允许开启事务
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {//设置一个数据库版本升级的监听
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
}
});
}
return daoConfig;
}
}
通过DbManager这个类我们知道主要它做了以下几件事情:
1.getDaoConfig 获取数据库的配置信息
2.getDatabase 获取数据库实例
3.saveBindingId saveOrUpdate save 插入数据的3个方法(保存数据)
4.replace 只有存在唯一索引时才有用 慎重
5.delete操作的4种方法(删除数据)
6.update操作的2种方法(修改数据)
7.find操作6种方法(查询数据)
8.dropTable 删除表
9.addColumn 添加一列
10.dropDb 删除数据库
添加数据
插入数据有三个方法
Save 插入数据
saveOrUpdate 插入数据,与save的区别:当一个实体里面的主键一样时如果使用saveOrUpdate会将当前主键对应的这条数据进行替换,而如果你使用了save就会报错。
saveBindingId 使用saveBindingId保存实体时会为实体的id赋值
/**
* 存储Parent到数据库
* @param parent 需要存储的对象
* @return
*/
public boolean insertParent(Parent parent) {
try {
return dbManager.saveBindingId(parent);
} catch (DbException e) {
e.printStackTrace();
}
return false;
}
查找数据
1.findById
通过主键的值来查找表里的数据
/**
* 根据数据的唯一标识ID查找数据
* @param entityType 需要查询的表
* @param id
* @param <T>
* @return
*/
public <T> T findByIdParent(Class<T> entityType,String id){
try {
return dbManager.findById(entityType, id);
} catch (DbException e) {
e.printStackTrace();
}
return null;
}
2.findFirst
返回表里的第一条数据
/**
* 返回给定表的第一条数据
* @param entityType
* @param <T>
* @return
*/
public <T> T findFirstParent(Class<T> entityType){
try {
return dbManager.findFirst(entityType);
} catch (DbException e) {
e.printStackTrace();
}
return null;
}
3.findAll
返回给定表的所有数据
/**
* 查询给定表的所有数据
* @param entityType
* @param <T>
* @return
*/
public <T> List<T> findAllParent(Class<T> entityType){
try {
return dbManager.findAll(entityType);
} catch (DbException e) {
e.printStackTrace();
}
return null;
}
4.Selector
返回指定条件查询出的数据
/**
* 根据age和sex查询所有符合条件的Patent
* @param entity
* @param Age
* @param sex
* @param <T>
* @return
*/
public <T> List<T> selectByAgeAndSex(Class<T> entity, int Age, String sex){
try {
return dbManager.selector(entity).where("age",">",Age).and("sex","=",sex).findAll();
} catch (DbException e) {
e.printStackTrace();
}
return null;
}
下面两个方法主要使用sql语句查询数据:
该方法返回一个DbModel对象,该对象以hashMap的方式存储查询结构,即:key为表的字段,value为记录的值 例: key:name value:小丽
下面是DbModel的部分源码:
5.findDbModelFirst
返回sql语句查询到的第一条结果
/**
* 根据给定sql语句返回查询到的第一条数据
* @param sql sql语句
* @return
*/
public DbModel findDbModelFirst(String sql){
try {
return dbManager.findDbModelFirst(new SqlInfo(sql));
} catch (DbException e) {
e.printStackTrace();
}
return null;
}
DbModel dbModel = dbHelper.findDbModelFirst("select * from Parent");
if(dbModel != null){
mTextView.setText(dbModel.getString("name"));
}
6.findDbModelAll
返回sql语句查询到的所有结果
/**
* 根据给定sql语句返回查询到的所有数据
* @param sql
* @return
*/
public List<DbModel> findDbModelAll(String sql){
try {
return dbManager.findDbModelAll(new SqlInfo(sql));
} catch (DbException e) {
e.printStackTrace();
}
return null;
}
List<DbModel> dbModelList = dbHelper.findDbModelAll("select * from Parent where age > 24");
StringBuilder builder = new StringBuilder();
if(dbModelList != null){
for (DbModel dbModel : dbModelList){
builder.append(dbModel.getString("name") + "\n");
}
mTextView.setText("" + builder.toString());
}
输出结果:
修改操作
1.修改单条数据的某个字段或多个字段。
Update第一个参数是需要修改的实体
第二个参数是一个可变参数,是你需要修改的字段的name。
/**
* 修改第一条数据的值
*/
public void update(){
//将id为1的这条记录的数据的age修改为30,name修改为“张三丰”
try {
Parent parent = dbManager.findById(Parent.class, 1);
parent.setAge(30);
parent.setName("张三丰");
dbManager.update(parent,"name","age");
} catch (DbException e) {
e.printStackTrace();
}
}
2.修改符合条件的数据的对应字段。
keyValue是一个键值对对象,第一个参数为字段名,第二个参数为需要修改成的值
whereBuilder.b 为需要修改数据的条件,符合的数据都会被修改。
public void update2(){
//将parent表中的性别为man的工资salasy都变为6000
KeyValue keyValue = new KeyValue("salary","6000");
try {
dbManager.update(Parent.class, WhereBuilder.b("sex","=","men"),keyValue);
} catch (DbException e) {
e.printStackTrace();
}
}
结果
删除操作
1.deleteById
根据指定的主键来删除对应的一条数据
/**
* 根据主键进行单条数据的删除
* @param entity
* @param id
*/
public void deleteById(Class entity, String id){
try {
dbManager.deleteById(entity, id);
} catch (DbException e) {
e.printStackTrace();
}
}
2.delete(Object entity)
根据具体的实体对象来删除数据
/**
*根据实体bean来删除数据
*/
public void deleteObject(){
try {
Parent parent = dbManager.findFirst(Parent.class);
dbManager.delete(parent);
} catch (DbException e) {
e.printStackTrace();
}
}
3.delete(Class<?> entityType)
删除指定表的所有数据,注意:删除的是数据,表还是存在的。
/**
* 删除表里的所有数据
* 注意:表还是会存在,只是数据没了
*/
public void deleteTableAllTate(){
try {
dbManager.delete(Parent.class);
} catch (DbException e) {
e.printStackTrace();
}
}
4.delete(Class<?> entityType, WhereBuilder whereBuilder)
根据where语句删除数据
/**
* 根据where语句进行删除操作
*/
public void delteWhere(){
//删除sex=men, salary=6000的数据
try {
dbManager.delete(Parent.class,
WhereBuilder.b("sex","=","men").and("salary","=","6000"));
} catch (DbException e) {
e.printStackTrace();
}
}
5.dropTable(Class<?> entityType)
删除表
/**
* 删除指定的表
*/
public void dropTable(){
try {
dbManager.dropTable(Parent.class);
} catch (DbException e) {
e.printStackTrace();
}
}
6.dropDb()
删除数据库
/**
* 删除数据库
*/
public void dropDb(){
try {
dbManager.dropDb();
} catch (DbException e) {
e.printStackTrace();
}
}
给表增加字段
需求:我们需要在parent表中添加一个country字段。
步骤:
1.在parent类中添加country属性
2.调用dbManager.addColumn(Parent.class,"country");方法添加字段
3.在DbManager.DaoConfig()中的版本号+1,是否必须未知。
//国家
@Column(name = "country",property = "中国")
private String country = "";
/**
* 添加country字段
*/
public void addColumn(){
try {
dbManager.addColumn(Parent.class,"country");
} catch (DbException e) {
e.printStackTrace();
}
}
public synchronized static DbHelper getInstance(){
if(dbManager == null){
dbHelper = new DbHelper();
}
if(dbManager == null){
DbManager.DaoConfig daoConfig = DbConfig.getDaoConfig();
dbManager = x.getDb(daoConfig);
}
dbHelper.addColumn();
return dbHelper;
}