数据库之xUtils:增删改查_表与表之间

xUtils数据库是xUtils框架里包含的一部分。xUtils是一款快速开发android移动应用的框架,其包含了很多实用的android工具. 目前xUtils主要有四大模块:DbUtils模块、ViewUtils模块、HttpUtils模、BitmapUtils模块。
详细介绍请见:
kevin-gox的Utils3中对Sqlite数据库的操作 - CSDN博客 http://blog.csdn.net/tybaoerge/article/details/50414471
此处我只介绍此数据库的使用方法。

1.引入xUtils框架:

  compile 'org.xutils:xutils:3.3.26'

添加权限:

 
    


        
            
                
                
            
        
      
    

2.新建BaseApplication,建立数据库

注释很详细,就不多做介绍了:

import android.app.Application;
import org.xutils.DbManager;
import org.xutils.db.table.TableEntity;
import org.xutils.ex.DbException;
import org.xutils.x;

/**
 * daoCinfig对象主要用于对于数据库的一些初始化设置
 * 1.setDbName 设置数据库的名称
 * 2.setDbDir 设置数据库存放的路径
 * 3.setDbVersion 设置数据库的版本
 * 4.setAllowTransaction(true) 设置允许开启事务
 * 5.setDbUpgradeListener 设置一个版本升级的监听方法
 *
 * 注意:
 * 数据库里面表的创建的时间,
 * 只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,
 * 如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作
 */

public class BaseApplication extends Application{

    public static DbManager.DaoConfig daoConfig;

    @Override
    public void onCreate() {
        super.onCreate();
        //框架初始化
        x.Ext.init(this);
        //初始化数据库
        initDb();
    }

    public static DbManager.DaoConfig getDaoConfig() {
        return daoConfig;
    }

    /**
     * 初始化数据库、建表
     */
    protected void initDb() {
        //本地数据的初始化
        daoConfig = new DbManager.DaoConfig()
                .setDbName("xutils_db") //设置数据库名
                .setDbVersion(1) //设置数据库版本,每次启动应用时将会检查该版本号,
                //发现数据库版本低于这里设置的值将进行数据库升级并触发DbUpgradeListener
                .setAllowTransaction(true)//设置是否开启事务,默认为false关闭事务
                .setTableCreateListener(new DbManager.TableCreateListener() {
                    @Override
                    public void onTableCreated(DbManager db, TableEntity entity) {

                    }
                })//设置数据库创建时的Listener
                .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                    @Override
                    public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                        if( oldVersion < newVersion ){
                            db.getDatabase().setVersion( newVersion);
                        }
                    }
                });//设置数据库升级时的Listener,这里可以执行相关数据库表的相关修改,比如alter语句增加字段等
        //.setDbDir(null);//设置数据库.db文件存放的目录,默认为包名下databases目录下

    }

}

3.建立User和Order类(其实就是表table):

一个User对应多个Order

User

/**
 * 如果需要添加联合唯一索引则可以在@Table注解加上
 * onCreated = “CREATE UNIQUE INDEX unique_name ON table_name(column1, column2)”)
 * 为表创建column1,column2联合唯一索引
 */
//为表创建NAME,EMAIL联合唯一索引
@Table(name = "user",
        onCreated = "CREATE UNIQUE INDEX realative_unique ON user(NAME, EMAIL)")
public class User implements Serializable{
    @Column(
            name = "ID",
            isId = true,
            autoGen = true
    )
    private int id;
    @Column(name = "NAME",property = "NOT NULL")//NAME字段非空
    private String name;

    @Column(name = "EMAIL",property = "NOT NULL")
    private String email;

    @Column(name = "MOBILE")
    private String mobile;

    @Column(name = "REGTIME")
    private Date regTime;

    @Column(name = "ORDER")
    private List orderlist;

    //国家
    @Column(name = "country",property = "China")
    private String country = "";

    public User(){

    }

    public User(String name, String email, String mobile){
        this.name = name;
        this.email = email;
        this.mobile = mobile;
    }


    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    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 String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public Date getRegTime() {
        return regTime;
    }

    public void setRegTime(Date regTime) {
        this.regTime = regTime;
    }

    public List getOrders(DbManager db) throws DbException {
        return db.selector(Order.class).where("USERID", "=", this.id).findAll();
    }

    public void setOrderlist(List orderlist) {
        this.orderlist = orderlist;
    }

    public String toString(){
        return "{id=" + id + ",  name=" + name + ",  email=" + email + ",  mobile="
                + mobile + ",country = " + country + "}\n";
    }

}

order:

@Table(name = "order")
public class Order implements Serializable{

    @Column(name = "ID", isId = true, autoGen = true)
    private int id;
    @Column(name = "NUMBER")
    private String number;
    @Column(name = "SUBJECT")
    private String subject;
    @Column(name = "USERID")
    private int userId;

    public User getUser(DbManager db) throws DbException {
        return db.findById(User.class, userId);
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    @Override
    public String toString() {
        return this.getClass().getName()
                + "{id=" + id + ",  number=" + number + ",  subject=" + subject + ",  userId=" + userId + "}\n";
    }

}

4.对数据库进行数据操作的所有函数:

方便学习,所以把函数统一写在了一起,每个方法都尝试了很多种写法:

增:

 /**
     * 给user表添加country字段
     */
    public boolean dbAddUserColumn(){
        try {
            int version = dbManager.getDatabase().getVersion();
            dbManager.addColumn(User.class, "country");
            BaseApplication.getDaoConfig().getDbUpgradeListener().onUpgrade( dbManager,version,version + 1);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 批量增加User但无oderlist
     *
     * @throws DbException
     */
    public boolean dbAddUsers(){
        //User user = new User("Kevingo","[email protected]","13299999999",new Date());
        //db.save(user);//保存成功之后【不会】对user的主键进行赋值绑定
        //db.saveOrUpdate(user);//保存成功之后【会】对user的主键进行赋值绑定
        //db.saveBindingId(user);//保存成功之后【会】对user的主键进行赋值绑定,并返回保存是否成功

        //方法一:
        try {
            List users = new ArrayList();
            for (int i = 0; i < 10; i++) {
                //User的@Table注解onCreated属性加了name,email联合唯一索引.
                User user = new User(i + "_QiLin", "[email protected]", "13299999999");
                users.add(user);
            }
            dbManager.saveBindingId(users);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }

        //方法二:使用sql语句
//        try {
//            for( int i = 0 ; i < 9; i++){
//                String name = i + "_Wilson";
//                String sqlString = "INSERT INTO User (name,email, mobile) VALUES ( '" +  name
//                        + " ','[email protected]' , '99999999999')";
//                dbManager.execNonQuery( sqlString );
//            }
//        } catch (DbException e) {
//            e.printStackTrace();
//            return false;
//        }

        return true;
    }

    /**
     * findById获得此user后增加其oderlist
     *
     * @throws DbException
     */
    public boolean dbAddUserOfOders( int userId){
        try {
            User user = dbManager.findById(User.class, userId);
            if (user == null) {
                user = new User("Kevingo" + System.currentTimeMillis(), "[email protected]", "13299999990");
                dbManager.saveBindingId(user);
            }
            for (int i = 0; i < 5; i++) {
                Order order = new Order();
                order.setNumber(i + "");
                order.setSubject( i + "_Chinese");
                order.setUserId(user.getId());
                dbManager.save(order);
            }
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * findById获得此user后增加其country
     *
     * @throws DbException
     */
    public boolean dbAddUserCountry(){
        try {
            List users = dbManager.findAll(User.class);
            if (users == null || users.size() == 0) {
                return false;
            }
            for (User user : users) {
                user.setCountry("China");
                dbManager.saveOrUpdate(user);
            }
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

删:

 /**
     * 按条件删除user
     * 删除方法:
     * 1.删除一个对象或者对象List,
     * 通过org.xutils.DbManager#deleteById(Class entityType, Object idValue)来删除某个主键对应的记录。
     * 2.org.xutils.DbManager#delete(Object entity)方法删除某个已经存在表中的对象。
     * 3.org.xutils.DbManager#delete(Class entityType)则会删除表中所有记录,相当于清空表数据。
     * 4.WhereBuilder对象提供了类似Selector对象的and(), or(), expr()等方法来链式操作该对象本身,
     * 复写的toString方法可以返回其对应的where条件语句.
     *
     * @throws DbException
     */
    public boolean dbDeleteUser( int UserId){

//        //方法一:使用whereBuilder
//        try {
//            List users = dbManager.findAll(User.class);
//            if (users == null || users.size() == 0) {
//                return false;
//            }
//            WhereBuilder whereBuilder = WhereBuilder.b();
////            whereBuilder.and("id", ">", "5").or("id", "=", "1").expr(" and mobile > '2015-12-29 00:00:01' ");
//            whereBuilder.and("id", "=", Integer.toString(UserId));
//            dbManager.delete(User.class, whereBuilder);
//        } catch (DbException e) {
//            e.printStackTrace();
//            return false;
//        }

        //方法二:使用Sql语句
        try {
            String sqlString = " DELETE FROM user WHERE id = " + Integer.toString(UserId);
            dbManager.execNonQuery( sqlString);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }

//        db.delete(User.class);//删除所有数据
//        db.delete(Order.class);//删除所有数据
        //db.delete(users.get(0)); //删除第一个对象
        //db.delete(User.class);//删除表中所有的User对象【慎用】
        //db.delete(users); //删除users对象集合
        //users =  db.findAll(User.class);
        // showDbMessage("【dbDelete#delete】数据库中还有user数目:" + users.size());

        return true;
    }

    /**
     * 根据OrderId进行删除
     * @param OrderId
     * @return
     */
    public boolean dbDeleteOrder( int OrderId){
        try {
            WhereBuilder whereBuilder = WhereBuilder.b();
            whereBuilder.and("id", "=", Integer.toString(OrderId));
            dbManager.delete(Order.class, whereBuilder);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

改:

/**
     * 按条件筛选出user并更新其email、mobile信息
     * 更新方法:
     * 1.更新对象除了几个update方法外还可以通过replace方法实现。
     * 2.通过update方法传入WhereBuilder对象和org.xutils.common.util.KeyValue对象实现对复合条件的记录更新指定的列和值。
     * 3.通过org.xutils.DbManager对象中的一系列exec前缀的方法可以实现sql语句查询。
     *
     * @throws DbException
     */
    public boolean dbUpdateUserInfo( int UserId,String mobile){

//        List users = db.findAll(User.class);
//        if (users == null || users.size() == 0) {
//            showDbMessage("无任何用户信息,请先添加用户");
//            return;
//        }

//          //第一种
//        User firstUser = db.findFirst(User.class);//修改了第一条数据
//        firstUser.setName("老王");
//        firstUser.setEmail("[email protected]");
//        db.update(firstUser, "name", "email");

        //第二种
//        //方法一:使用whereBuilder
//        try {
//            WhereBuilder whereBuilder = WhereBuilder.b();
//            whereBuilder.and("id", "=", Integer.toString(UserId));
//            dbManager.update(User.class, whereBuilder,
//                    new KeyValue("email", "[email protected]")
//                    , new KeyValue("mobile", mobile));//对User表中复合whereBuilder所表达的条件的记录更新email和mobile
//        } catch (DbException e) {
//            e.printStackTrace();
//            return false;
//        }

        //方法二:使用sql语句
        try {
            String sqlStr = "UPDATE user SET email = '[email protected]', mobile = '"
                    + mobile + "'WHERE id = " + Integer.toString(UserId);
            dbManager.execNonQuery( sqlStr);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 根据OrderId更新subject信息
     * @param OrderId
     * @param subject
     * @return
     */
    public boolean dbUpdateOrderInfo( int OrderId,String subject){
        try {
            WhereBuilder whereBuilder = WhereBuilder.b();
            whereBuilder.and("id", "=", Integer.toString(OrderId));
            dbManager.update(Order.class, whereBuilder,
                    new KeyValue("subject", subject));
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

查:

 /**
     * 按条件查找user
     * 查询方法:
     * 1.查询某张表内的所有对象, 可以通过org.xutils.DbManager#findAll(Class class)。
     * 2.根据对象的主键id来查找org.xutils.DbManager#findById(Class entityType, Object idValue)。
     * 3.查询对象org.xutils.db.Selector.该对象提供了where(), and(), or(),orderBy(), groupBy(), limit(), offset(),
     * count()等方法来实现灵活的复杂查询,而且这些方法都返回对象本身,所以可以进行链式操作。
     *
     * @throws DbException
     */
    public List dbFindUserByCondition(){
        //List users = db.findAll(User.class);
        //showDbMessage("【dbFind#findAll】第一个对象:"+users.get(0).toString());

        //User user = db.findById(User.class, 1);
        //showDbMessage("【dbFind#findById】第一个对象:" + user.toString());

        //long count = db.selector(User.class).where("name","like","%kevin%").and("email","=","[email protected]").count();//返回复合条件的记录数
        //showDbMessage("【dbFind#selector】符合条件数目:" + count);

//        //使用sql语句进行查询
//        Cursor cursor = db.execQuery("select * from user where id<=5");
//        if( cursor != null && !cursor.isLast() ){
//            cursor.moveToNext();
//            cursor.getString(cursor.getColumnIndex("NAME"));
//            int count = cursor.getColumnCount();
//            showDbMessage("【db.execQuery#selector】符合条件数目:" + count);
//        }
//        if (cursor!=null){
//            cursor.close();
//        }

        //Sql查询语句使用说明:
        //以"A"或"L"或"N"开头的人:WHERE name LIKE '[ALN]%'
        //不以 "A" 或 "L" 或 "N" 开头的人:WHERE name LIKE '[!ALN]%'
        //选取名字的第一个字符之后是"eorge"的人:where name like '_eorge'

        //使用selector进行复合查询
        List users = null;
        try {
            users = dbManager.selector(User.class)
                    .where("name", "like", "%kevin%")
                    .and("email", "=", "[email protected]")
                    .orderBy("regTime", true)//true为:降序desc
                    .limit(2) //只查询两条记录
                    .offset(2) //偏移两个,从第三个记录开始返回,limit配合offset达到sqlite的limit m,n的查询
                    .findAll();
        } catch (DbException e) {
            e.printStackTrace();
            return users;
        }

        return users;
    }

    /**
     * 查找所有user
     *
     * @throws DbException
     */
    public List dbFindAllUser(){
        List users = null;
        try {
            users = dbManager.findAll(User.class);
        } catch (DbException e) {
            e.printStackTrace();
            return users;
        }
        return users;
    }

    /**
     * 查找此user的orders
     *
     * @throws DbException
     */
    public List dbFindAllOrder( User user){
        List orders = null;
        try {
            if ( user != null ) {
                orders = user.getOrders(dbManager);
            }
        } catch (DbException e) {
            e.printStackTrace();
            return orders;
        }
        return orders;
    }

整体代码:

/**
 * db.save(entity);//保存成功之后【不会】对user的主键进行赋值绑定
 * db.saveOrUpdate(entity);//如果一个对象主键为null则会新增该对象,
 * 成功之后【会】对user的主键进行赋值绑定,否则根据主键去查找更新
 * db.saveBindingId(entity);//保存成功之后【会】对user的主键进行赋值绑定,并返回保存是否成功
 */

public class MyDbHelper {

    private DbManager dbManager;

    public  MyDbHelper (){
        this.dbManager = x.getDb(BaseApplication.getDaoConfig());
    }
    /**
     * 给user表添加country字段
     */
    public boolean dbAddUserColumn(){
        try {
            int version = dbManager.getDatabase().getVersion();
            dbManager.addColumn(User.class, "country");
            BaseApplication.getDaoConfig().getDbUpgradeListener().onUpgrade( dbManager,version,version + 1);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 批量增加User但无oderlist
     *
     * @throws DbException
     */
    public boolean dbAddUsers(){
        //User user = new User("Kevingo","[email protected]","13299999999",new Date());
        //db.save(user);//保存成功之后【不会】对user的主键进行赋值绑定
        //db.saveOrUpdate(user);//保存成功之后【会】对user的主键进行赋值绑定
        //db.saveBindingId(user);//保存成功之后【会】对user的主键进行赋值绑定,并返回保存是否成功

        //方法一:
        try {
            List users = new ArrayList();
            for (int i = 0; i < 10; i++) {
                //User的@Table注解onCreated属性加了name,email联合唯一索引.
                User user = new User(i + "_QiLin", "[email protected]", "13299999999");
                users.add(user);
            }
            dbManager.saveBindingId(users);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }

        //方法二:使用sql语句
//        try {
//            for( int i = 0 ; i < 9; i++){
//                String name = i + "_Wilson";
//                String sqlString = "INSERT INTO User (name,email, mobile) VALUES ( '" +  name
//                        + " ','[email protected]' , '99999999999')";
//                dbManager.execNonQuery( sqlString );
//            }
//        } catch (DbException e) {
//            e.printStackTrace();
//            return false;
//        }

        return true;
    }

    /**
     * findById获得此user后增加其oderlist
     *
     * @throws DbException
     */
    public boolean dbAddUserOfOders( int userId){
        try {
            User user = dbManager.findById(User.class, userId);
            if (user == null) {
                user = new User("Kevingo" + System.currentTimeMillis(), "[email protected]", "13299999990");
                dbManager.saveBindingId(user);
            }
            for (int i = 0; i < 5; i++) {
                Order order = new Order();
                order.setNumber(i + "");
                order.setSubject( i + "_Chinese");
                order.setUserId(user.getId());
                dbManager.save(order);
            }
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * findById获得此user后增加其country
     *
     * @throws DbException
     */
    public boolean dbAddUserCountry(){
        try {
            List users = dbManager.findAll(User.class);
            if (users == null || users.size() == 0) {
                return false;
            }
            for (User user : users) {
                user.setCountry("China");
                dbManager.saveOrUpdate(user);
            }
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 按条件查找user
     * 查询方法:
     * 1.查询某张表内的所有对象, 可以通过org.xutils.DbManager#findAll(Class class)。
     * 2.根据对象的主键id来查找org.xutils.DbManager#findById(Class entityType, Object idValue)。
     * 3.查询对象org.xutils.db.Selector.该对象提供了where(), and(), or(),orderBy(), groupBy(), limit(), offset(),
     * count()等方法来实现灵活的复杂查询,而且这些方法都返回对象本身,所以可以进行链式操作。
     *
     * @throws DbException
     */
    public List dbFindUserByCondition(){
        //List users = db.findAll(User.class);
        //showDbMessage("【dbFind#findAll】第一个对象:"+users.get(0).toString());

        //User user = db.findById(User.class, 1);
        //showDbMessage("【dbFind#findById】第一个对象:" + user.toString());

        //long count = db.selector(User.class).where("name","like","%kevin%").and("email","=","[email protected]").count();//返回复合条件的记录数
        //showDbMessage("【dbFind#selector】符合条件数目:" + count);

//        //使用sql语句进行查询
//        Cursor cursor = db.execQuery("select * from user where id<=5");
//        if( cursor != null && !cursor.isLast() ){
//            cursor.moveToNext();
//            cursor.getString(cursor.getColumnIndex("NAME"));
//            int count = cursor.getColumnCount();
//            showDbMessage("【db.execQuery#selector】符合条件数目:" + count);
//        }
//        if (cursor!=null){
//            cursor.close();
//        }

        //Sql查询语句使用说明:
        //以"A"或"L"或"N"开头的人:WHERE name LIKE '[ALN]%'
        //不以 "A" 或 "L" 或 "N" 开头的人:WHERE name LIKE '[!ALN]%'
        //选取名字的第一个字符之后是"eorge"的人:where name like '_eorge'

        //使用selector进行复合查询
        List users = null;
        try {
            users = dbManager.selector(User.class)
                    .where("name", "like", "%kevin%")
                    .and("email", "=", "[email protected]")
                    .orderBy("regTime", true)//true为:降序desc
                    .limit(2) //只查询两条记录
                    .offset(2) //偏移两个,从第三个记录开始返回,limit配合offset达到sqlite的limit m,n的查询
                    .findAll();
        } catch (DbException e) {
            e.printStackTrace();
            return users;
        }

        return users;
    }

    /**
     * 查找所有user
     *
     * @throws DbException
     */
    public List dbFindAllUser(){
        List users = null;
        try {
            users = dbManager.findAll(User.class);
        } catch (DbException e) {
            e.printStackTrace();
            return users;
        }
        return users;
    }

    /**
     * 查找此user的orders
     *
     * @throws DbException
     */
    public List dbFindAllOrder( User user){
        List orders = null;
        try {
            if ( user != null ) {
                orders = user.getOrders(dbManager);
            }
        } catch (DbException e) {
            e.printStackTrace();
            return orders;
        }
        return orders;
    }

    /**
     * 按条件删除user
     * 删除方法:
     * 1.删除一个对象或者对象List,
     * 通过org.xutils.DbManager#deleteById(Class entityType, Object idValue)来删除某个主键对应的记录。
     * 2.org.xutils.DbManager#delete(Object entity)方法删除某个已经存在表中的对象。
     * 3.org.xutils.DbManager#delete(Class entityType)则会删除表中所有记录,相当于清空表数据。
     * 4.WhereBuilder对象提供了类似Selector对象的and(), or(), expr()等方法来链式操作该对象本身,
     * 复写的toString方法可以返回其对应的where条件语句.
     *
     * @throws DbException
     */
    public boolean dbDeleteUser( int UserId){

//        //方法一:使用whereBuilder
//        try {
//            List users = dbManager.findAll(User.class);
//            if (users == null || users.size() == 0) {
//                return false;
//            }
//            WhereBuilder whereBuilder = WhereBuilder.b();
////            whereBuilder.and("id", ">", "5").or("id", "=", "1").expr(" and mobile > '2015-12-29 00:00:01' ");
//            whereBuilder.and("id", "=", Integer.toString(UserId));
//            dbManager.delete(User.class, whereBuilder);
//        } catch (DbException e) {
//            e.printStackTrace();
//            return false;
//        }

        //方法二:使用Sql语句
        try {
            String sqlString = " DELETE FROM user WHERE id = " + Integer.toString(UserId);
            dbManager.execNonQuery( sqlString);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }

//        db.delete(User.class);//删除所有数据
//        db.delete(Order.class);//删除所有数据
        //db.delete(users.get(0)); //删除第一个对象
        //db.delete(User.class);//删除表中所有的User对象【慎用】
        //db.delete(users); //删除users对象集合
        //users =  db.findAll(User.class);
        // showDbMessage("【dbDelete#delete】数据库中还有user数目:" + users.size());

        return true;
    }

    /**
     * 根据OrderId进行删除
     * @param OrderId
     * @return
     */
    public boolean dbDeleteOrder( int OrderId){
        try {
            WhereBuilder whereBuilder = WhereBuilder.b();
            whereBuilder.and("id", "=", Integer.toString(OrderId));
            dbManager.delete(Order.class, whereBuilder);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 按条件筛选出user并更新其email、mobile信息
     * 更新方法:
     * 1.更新对象除了几个update方法外还可以通过replace方法实现。
     * 2.通过update方法传入WhereBuilder对象和org.xutils.common.util.KeyValue对象实现对复合条件的记录更新指定的列和值。
     * 3.通过org.xutils.DbManager对象中的一系列exec前缀的方法可以实现sql语句查询。
     *
     * @throws DbException
     */
    public boolean dbUpdateUserInfo( int UserId,String mobile){

//        List users = db.findAll(User.class);
//        if (users == null || users.size() == 0) {
//            showDbMessage("无任何用户信息,请先添加用户");
//            return;
//        }

//          //第一种
//        User firstUser = db.findFirst(User.class);//修改了第一条数据
//        firstUser.setName("老王");
//        firstUser.setEmail("[email protected]");
//        db.update(firstUser, "name", "email");

        //第二种
//        //方法一:使用whereBuilder
//        try {
//            WhereBuilder whereBuilder = WhereBuilder.b();
//            whereBuilder.and("id", "=", Integer.toString(UserId));
//            dbManager.update(User.class, whereBuilder,
//                    new KeyValue("email", "[email protected]")
//                    , new KeyValue("mobile", mobile));//对User表中复合whereBuilder所表达的条件的记录更新email和mobile
//        } catch (DbException e) {
//            e.printStackTrace();
//            return false;
//        }

        //方法二:使用sql语句
        try {
            String sqlStr = "UPDATE user SET email = '[email protected]', mobile = '"
                    + mobile + "'WHERE id = " + Integer.toString(UserId);
            dbManager.execNonQuery( sqlStr);
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 根据OrderId更新subject信息
     * @param OrderId
     * @param subject
     * @return
     */
    public boolean dbUpdateOrderInfo( int OrderId,String subject){
        try {
            WhereBuilder whereBuilder = WhereBuilder.b();
            whereBuilder.and("id", "=", Integer.toString(OrderId));
            dbManager.update(Order.class, whereBuilder,
                    new KeyValue("subject", subject));
        } catch (DbException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 现在数据库版本号
     */
    public int getDBVersiona(){
        int version = dbManager.getDatabase().getVersion() ;
        return version;
    }

}

5.在其他类里使用操作函数

比如:

private MyDbHelper myDbHelper = new MyDbHelper();
boolean isOk = myDbHelper.dbAddUsers();

你可能感兴趣的:(Android之路)