Xutils3 数据库模块的使用方法

本文详细介绍了如何使用Xutils3进行数据库管理,包括数据库的初始化、JavaBean的定义、获取DbManager对象、数据的增删改查操作,以及如何添加数据库字段。通过示例代码展示了如何插入、查找、更新和删除数据,是Android开发者使用Xutils3操作数据库的实用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.开源地址

https://github.com/wyouflf/xUtils3/tree/master

2.导入工程

使用Gradle构建时添加一下依赖即可:

 compile 'org.xutils:xutils:3.3.36'

3.使用步骤

  1. 使用XUtils3的一系列初始化。
  2. 创建一个javaBean类,该类即是需要存储的数据,在数据库中的表。
  3. 调用x.getDb方法获取DbManager对象
  4. 使用DbManager对象进行CRUD.

初始化XUtils3

ApplicationonCreate方法中加入如下代码

    //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;
}

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值